Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - CBFD

#1
Programación C/C++ / Borra textos
27 Julio 2016, 12:46 PM
Hola que tal:

Estoy intentando crear ventanas hijas que escriban textos en otras ventanas con una clase, el problema que tengo es que cuando termina de escribir todas las ventanas refresco la ventana madre y entonces se borran todos los textos de las ventanas quedando estas.
Estoy haciendo todo tipo de pruebas trabajo con Code:Blocks y haciendo el debug cuando paro entre impresiones si me las pone pero luego cuando finaliza la función y refresca la ventana donde van desaparecen y quedan las ventanas sin textos.

La función que solicita las ventanas y la clase que las crea son :

Código ( c) [Seleccionar]


Funcion

void Pantalla()
{
TSay oSay = TSay();
  oPan4     = oSay.Crear(hInstance,  10*TamPan, 30*TamPan, wtex000, oDlgwVen, oFont, escri1, fondo2,1020*TamPan, 77*TamPan, 0, 0, "oPan4");
  oPan401   = oSay.Crear(hInstance,  25*TamPan,340*TamPan, wtex001, oPan4   , oFon3, escri3, fondo1, 630*TamPan, 30*TamPan, 1, 1, "oPan401");
  oMenPan   = oSay.Crear(hInstance,  95*TamPan, 30*TamPan, wtex000, oDlgwVen, oFont, escri3, fondo1, 245*TamPan,555*TamPan, 0, 0, "oMenPan");
  oMenPan01 = oSay.Crear(hInstance,  22*TamPan, 30*TamPan, wtex002, oMenPan , oFont, escri1, fondo1, 200*TamPan, 28*TamPan, 0, 0, "oMenPan01");
  oMenPan02 = oSay.Crear(hInstance,  52*TamPan, 30*TamPan, wtex003, oMenPan , oFont, escri1, fondo1, 200*TamPan, 28*TamPan, 0, 0, "oMenPan02");
  oMenPan03 = oSay.Crear(hInstance,  82*TamPan, 30*TamPan, wtex004, oMenPan , oFont, escri1, fondo1, 200*TamPan, 28*TamPan, 0, 0, "oMenPan03");
  oMenPan04 = oSay.Crear(hInstance, 112*TamPan, 30*TamPan, wtex008, oMenPan , oFont, escri1, fondo1, 200*TamPan, 28*TamPan, 0, 0, "oMenPan04");
  oMenPan05 = oSay.Crear(hInstance, 142*TamPan, 30*TamPan, wtex009, oMenPan , oFont, escri1, fondo1, 200*TamPan, 28*TamPan, 0, 0, "oMenPan05");
  oMenPan06 = oSay.Crear(hInstance, 172*TamPan, 30*TamPan, wtex010, oMenPan , oFont, escri1, fondo1, 200*TamPan, 28*TamPan, 0, 0, "oMenPan06");
  oMenPan07 = oSay.Crear(hInstance, 202*TamPan, 30*TamPan, wtex011, oMenPan , oFont, escri1, fondo1, 200*TamPan, 28*TamPan, 0, 0, "oMenPan07");
  oMenPan08 = oSay.Crear(hInstance, 232*TamPan, 30*TamPan, wtex012, oMenPan , oFont, escri1, fondo1, 200*TamPan, 28*TamPan, 0, 0, "oMenPan08");
  oMenPan09 = oSay.Crear(hInstance, 262*TamPan, 30*TamPan, wtex013, oMenPan , oFont, escri1, fondo1, 200*TamPan, 28*TamPan, 0, 0, "oMenPan09");
  oPant     = oSay.Crear(hInstance,  95*TamPan,300*TamPan, wtex001, oDlgwVen, oFont, escri1, fondo2, 750*TamPan,555*TamPan, 1, 0, "oPant");
  oPan2     = oSay.Crear(hInstance, 117*TamPan, 30*TamPan, wtex001, oDlgwVen, oFont, escri1, fondo2, 280*TamPan, 25*TamPan, 0, 0, "oPan2");
}

Clase

#if !defined(TSAY)
    #define TSAY

    #include <windows.h>

    WNDCLASS   wc;
    HWND       vHij;

const char* pint;
HFONT       letr;
    COLORREF    escr;
    double      x_tamX;
double      x_tamY;
int         alin;

    class TSay
    {
    protected:
        static LRESULT CALLBACK WinProc(HWND vHij, UINT msg, WPARAM wParam, LPARAM lParam)
        {
        HDC dc;
      PAINTSTRUCT ps;
    RECT rc;
    int text;
    HGDIOBJ old;

        switch(msg)
            {
            case WM_PAINT:
            dc  = GetDC(vHij);
            dc = BeginPaint (vHij, &ps);
            SetRect (&rc, 2, 3, x_tamX-4, x_tamY-6);
            SetBkMode    (dc, escr);
            SetTextColor (dc, escr);
            old = SelectObject(dc, letr);
            switch (alin)
            {
            case 0:
            text = DrawTextA(dc, pint, -1, &rc, WS_BORDER | DT_LEFT | DT_VCENTER);
            break;
            case 1:
            text = DrawTextA(dc, pint, -1, &rc, WS_BORDER | DT_CENTER | DT_VCENTER);
            break;
            case 2:
            text = DrawTextA(dc, pint, -1, &rc, WS_BORDER | DT_RIGHT | DT_VCENTER);
            break;
            }
              SelectObject(dc, old);
            ReleaseDC(vHij, dc);
            DeleteObject(old);
            EndPaint (vHij, &ps);
            break;
                case WM_DESTROY:
                    PostQuitMessage(0);
                    break;
                default:
                    return DefWindowProc(vHij, msg, wParam, lParam);
            }
            return 0;
        }
    public:
        TSay()
        {
        }
        ~TSay()
        {
        }
        HWND Crear(HINSTANCE hIns,double posX, double posY, const char *pint, HWND vent, HFONT letr, COLORREF escr, COLORREF fond, double tamX, double tamY, int bord, int alin, const char *cVen)
        {
WNDCLASSEX WndClass;

WndClass.cbSize = sizeof(WNDCLASSEX);
WndClass.style = 0;
WndClass.lpfnWndProc = WinProc;
WndClass.cbClsExtra = 0;
WndClass.cbWndExtra = 0;
WndClass.hInstance = hIns;
WndClass.hIcon = NULL;
WndClass.hIconSm = NULL;
WndClass.hCursor = LoadCursor(0, IDC_ARROW);
WndClass.hbrBackground = (HBRUSH)CreateSolidBrush(fond);
WndClass.lpszMenuName = 0;
WndClass.lpszClassName = cVen;

RegisterClassEx(&WndClass);

DWORD hPen;
if (bord == 1)
hPen = WS_BORDER | WS_CHILD| WS_VISIBLE;
else
hPen = WS_CHILD| WS_VISIBLE;

  int x_posX = (int)posX;
int x_posY = (int)posY;
int x_tamX = (int)tamX;
int x_tamY = (int)tamY;

vHij = CreateWindow(
cVen,
"TSay",
hPen,
    x_posY,
    x_posX,
    x_tamX,
    x_tamY,
vent,
    NULL,
    hIns,
    NULL);

return vHij;
}
};
#endif // TSAY




Alguna ayuda por favor.

Os dejo las imágenes de cuando estoy haciendo el debug :



y cuando termina la función y refresca la pantalla:



Un saludo y gracias.

Carlos
#2
Os dejo las imágenes de cuando estoy haceindo el debug :



y cuando termina la función y refresca la pantalla:



Un saludo.

Carlos.
#3
Hola de nuevo:

Ya he conseguido mucho y casi tengo todo hecho pero me falta todavía una cosa que no se porque pasa.

El código es ahora así:


#if !defined(TSAY)
    #define TSAY

   #include <windows.h>

    WNDCLASS   wc;
    HWND       vHij;

const char* pint;
HFONT       letr;
    COLORREF    escr;
    double      tamX;
double      tamY;
int         alin;

    class TSay
    {
    protected:
        static LRESULT CALLBACK WinProc(HWND vHij, UINT msg, WPARAM wParam, LPARAM lParam)
        {
            switch(msg)
            {
                case WM_DESTROY:
                    PostQuitMessage(0);
                    break;
                default:
                    return DefWindowProc(vHij, msg, wParam, lParam);
            }
            return 0;
        }
    public:
        TSay()
        {
        }
        ~TSay()
        {
        }
        HWND Crear(HINSTANCE hIns,double posX, double posY, const char* pint, HWND vent, HFONT letr, COLORREF escr, COLORREF fond, double tamX, double tamY, int bord, int alin, const char *cVen)
        {
WNDCLASSEX WndClass;

WndClass.cbSize = sizeof(WNDCLASSEX);
WndClass.style = 0;
WndClass.lpfnWndProc = WinProc;
WndClass.cbClsExtra = 0;
WndClass.cbWndExtra = 0;
WndClass.hInstance = hIns;
WndClass.hIcon = NULL;
WndClass.hIconSm = NULL;
WndClass.hCursor = LoadCursor(0, IDC_ARROW);
WndClass.hbrBackground = (HBRUSH)CreateSolidBrush(fond);
WndClass.lpszMenuName = 0;
WndClass.lpszClassName = cVen;

RegisterClassEx(&WndClass);

DWORD hPen;
if (bord == 1)
{
hPen = WS_BORDER | WS_CHILD| WS_VISIBLE;
}
else
{
hPen = WS_CHILD| WS_VISIBLE;
}

  int x_posX = (int)posX;
int x_posY = (int)posY;
int x_tamX = (int)tamX;
int x_tamY = (int)tamY;

vHij = CreateWindow(
cVen,
"TSay",
hPen,
    x_posY,
    x_posX,
    x_tamX,
    x_tamY,
vent,
    NULL,
    hIns,
    NULL);

ShowWindow(vHij, 5);
RedrawWindow(vHij,NULL,NULL,RDW_INVALIDATE | RDW_INTERNALPAINT);

HDC dc  = GetDC(vHij);
PAINTSTRUCT ps;
RECT rc;
HRGN bgRgn;
HBRUSH hBrush;
HGDIOBJ old;

dc = BeginPaint (vHij, &ps);
SetRect (&rc, 0, 0, x_tamX, x_tamY);
bgRgn = CreateRectRgnIndirect(&rc);
hBrush = CreateSolidBrush(fond);
FrameRgn(dc, bgRgn, hBrush,2,2);
SetBkMode    (dc, TRANSPARENT);
SetTextColor (dc, escr);
old = SelectObject(dc, letr);

switch (alin)
{
case 0:
DrawText(dc, pint, lstrlen(pint), &rc, DT_LEFT | DT_VCENTER );
break;
case 1:
DrawText(dc, pint, lstrlen(pint), &rc, DT_CENTER | DT_VCENTER );
break;
case 2:
DrawText(dc, pint, lstrlen(pint), &rc, DT_RIGHT | DT_VCENTER );
break;
}


SelectObject(dc, old);
ReleaseDC(vHij, dc);
DeleteObject(old);
DeleteObject(bgRgn);
DeleteObject(hBrush);
    EndPaint (vHij, &ps);

RedrawWindow(vHij,NULL,NULL,RDW_INVALIDATE | RDW_INTERNALPAINT);

return vHij;
}
};
#endif // TSAY


Y crea las ventanas corectamente pero no me incorpora los textos que quiero esto lo debería hacer con las líneas de la 88 a 123. pero no lo pone. Estoy haciendo todo tipo de pruebas con eclipse y haciendo el debug cuando paro entre impresiones si me las pone pero luego cuando finaliza la función y refresca la ventana donde van desaparecen y quedan las ventanas sin textos.

la función que llama a esta clase es :


void Pantalla()
{
  TSay   oSay  = TSay  ();
  oPan4     = oSay.Crear(hInstance,  10*TamPan, 30*TamPan, wtex000, oDlgwVen, oFont, escri1, fondo2,1020*TamPan, 77*TamPan, 0, 0, "oPan4");
  oPan401   = oSay.Crear(hInstance,  25*TamPan,340*TamPan, wtex001, oPan4   , oFon3, escri3, fondo1, 630*TamPan, 30*TamPan, 1, 1, "oPan401");
  oMenPan   = oSay.Crear(hInstance,  95*TamPan, 30*TamPan, wtex000, oDlgwVen, oFont, escri3, fondo1, 245*TamPan,555*TamPan, 0, 0, "oMenPan");
  oMenPan01 = oSay.Crear(hInstance,  22*TamPan, 30*TamPan, wtex002, oMenPan , oFont, escri1, fondo1, 200*TamPan, 28*TamPan, 0, 0, "oMenPan01");
  oMenPan02 = oSay.Crear(hInstance,  52*TamPan, 30*TamPan, wtex003, oMenPan , oFont, escri1, fondo1, 200*TamPan, 28*TamPan, 0, 0, "oMenPan02");
  oMenPan03 = oSay.Crear(hInstance,  82*TamPan, 30*TamPan, wtex004, oMenPan , oFont, escri1, fondo1, 200*TamPan, 28*TamPan, 0, 0, "oMenPan03");
  oMenPan04 = oSay.Crear(hInstance, 112*TamPan, 30*TamPan, wtex008, oMenPan , oFont, escri1, fondo1, 200*TamPan, 28*TamPan, 0, 0, "oMenPan04");
  oMenPan05 = oSay.Crear(hInstance, 142*TamPan, 30*TamPan, wtex009, oMenPan , oFont, escri1, fondo1, 200*TamPan, 28*TamPan, 0, 0, "oMenPan05");
  oMenPan06 = oSay.Crear(hInstance, 172*TamPan, 30*TamPan, wtex010, oMenPan , oFont, escri1, fondo1, 200*TamPan, 28*TamPan, 0, 0, "oMenPan06");
  oMenPan07 = oSay.Crear(hInstance, 202*TamPan, 30*TamPan, wtex011, oMenPan , oFont, escri1, fondo1, 200*TamPan, 28*TamPan, 0, 0, "oMenPan07");
  oMenPan08 = oSay.Crear(hInstance, 232*TamPan, 30*TamPan, wtex012, oMenPan , oFont, escri1, fondo1, 200*TamPan, 28*TamPan, 0, 0, "oMenPan08");
  oMenPan09 = oSay.Crear(hInstance, 262*TamPan, 30*TamPan, wtex013, oMenPan , oFont, escri1, fondo1, 200*TamPan, 28*TamPan, 0, 0, "oMenPan09");
  oPant     = oSay.Crear(hInstance,  95*TamPan,300*TamPan, wtex001, oDlgwVen, oFont, escri1, fondo2, 750*TamPan,555*TamPan, 1, 0, "oPant");
  oPan2     = oSay.Crear(hInstance, 117*TamPan, 30*TamPan, wtex001, oDlgwVen, oFont, escri1, fondo2, 280*TamPan, 25*TamPan, 0, 0, "oPan2");

    RedrawWindow(oDlgwVen,NULL,NULL,RDW_INVALIDATE | RDW_INTERNALPAINT);
}


Alguna ayuda por favor.

Un saludo, gracias.

Carlos
#4
Hola a todos:

En primer lugar soy muy novato con C++ y estoy haciendo una clase para crear ventanas hijas y en ellas escribir textos, la clase es la siguiente:

Código ( c) [Seleccionar]

#include <windows.h>
#include <string>

using namespace std;

#if !defined(ClaseTSay)
#define ClaseTSay

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

class TSay
{
private:
static LRESULT CALLBACK  WinProc(HWND vHij, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
switch (uMsg)
{
case WM_PAINT :
{
HDC dc  = GetDC(vHij);
PAINTSTRUCT ps;
RECT rc;
HRGN bgRgn;
HBRUSH hBrush;
HGDIOBJ old;

  int x_posX = (int)posX;
int x_posY = (int)posY;
int x_tamX = (int)tamX;
int x_tamY = (int)tamY;

dc = BeginPaint (vHij, &ps);
SetRect (&rc, 0, 0, x_tamX, x_tamY);
bgRgn = CreateRectRgnIndirect(&rc);
hBrush = CreateSolidBrush(fond);
FrameRgn(dc, bgRgn, hBrush,2,2);
SetBkMode    (dc, fond);
SetTextColor (dc, escr);
old = SelectObject(dc, letr);

switch (m_alin)
{
case 0:
DrawText(dc, pint, lstrlen(pint), &rc, DT_LEFT | DT_VCENTER );
break;
case 1:
DrawText(dc, pint, lstrlen(pint), &rc, DT_CENTER | DT_VCENTER );
break;
case 2:
DrawText(dc, pint, lstrlen(pint), &rc, DT_RIGHT | DT_VCENTER );
break;
}


SelectObject(dc, old);
ReleaseDC(vHij, dc);
DeleteObject(old);
DeleteObject(bgRgn);
DeleteObject(hBrush);
    EndPaint (vHij, &ps);
    break;
}
default :
return DefWindowProc(vHij, uMsg, wParam, lParam);
}
return 0;
}
protected:
HWND      vHij;
WNDPROC  oldW;
double      posX;
double      posY;
const char* pint;
HWND        vent;
HFONT       letr;
COLORREF    escr;
COLORREF    fond;
double      tamX;
double      tamY;
int         bord;
int         alin;
const TCHAR *cVen;
public:
TSay()
{
vHij = NULL;
oldW = NULL;
posX = 0;
posY = 0;
pint = NULL;
vent = NULL;
letr = NULL;
escr = 00;
fond = 0;
tamX = 0;
tamY = 0;
bord = 0;
alin = 0;
cVen = NULL;
}

~TSay()
{
}

HWND Crear( double posX, double posY, const char* pint, HWND vent, HFONT letr, COLORREF escr, COLORREF fond, double tamX, double tamY, int bord, int alin, const TCHAR *cVen)
{
DWORD hPen;
if (bord == 1)
{
hPen = WS_BORDER | WS_CHILD| WS_VISIBLE;
}
else
{
hPen = WS_CHILD| WS_VISIBLE;
}

WNDCLASSEX WndClass;

WndClass.cbSize = sizeof(WNDCLASSEX);
WndClass.style = 0;
WndClass.lpfnWndProc = WinProc;
WndClass.cbClsExtra = 0;
WndClass.cbWndExtra = 0;
WndClass.hInstance = GetModuleHandle(NULL);
WndClass.hIcon = NULL;
WndClass.hIconSm = NULL;
WndClass.hCursor = LoadCursor(0, IDC_ARROW);
WndClass.hbrBackground = (HBRUSH)CreateSolidBrush(fond);
WndClass.lpszMenuName = 0;
WndClass.lpszClassName = cVen;

RegisterClassEx(&WndClass);

  int x_posX = (int)posX;
int x_posY = (int)posY;
int x_tamX = (int)tamX;
int x_tamY = (int)tamY;

vHij = CreateWindowEx(
0,
cVen,
"TSay",
hPen,
    x_posY,
    x_posX,
    x_tamX,
    x_tamY,
vent,
    NULL,
GetModuleHandle(NULL),
    NULL);

if(vHij)
{
ShowWindow(vHij, 5);
    UpdateWindow(vHij);
}
return vHij;
}
};
#endif // !defined(ClaseTSay)
:

Mi problema es que en las líneas 73, 74, 75, 77, 78, 79, 80 y 81 me da el error de "invalid use of member ' ' in static member function" y en las líneas entre la 29 y la 52 que las usan en WM_PAINT me pone "from this location".

Me podéis orientar para poder solucionar este problema.

Un saludo y gracias.

Carlos

#5
Hola que tal:

Estoy haciendo la siguiente aplicación:
- Una Ventana Principal con un Menú.
- Dentro de ella dos ventanas que muestran textos que pueden cambiar de color de fondo y de escritura.

Estos últimos son ventanas que quiero crear he adaptado una clase que he visto por internet a mis especificaciones pero cuando termina sale:



Pero no me da ninguna información más. La clase es :


#include <windows.h>
#include <string>

using namespace std;

class CWinThunk
{
protected:
virtual LRESULT CALLBACK WindowProc(UINT, WPARAM, LPARAM)=0;
DWORD InitThunk(void* pThis){
//  MOV [ESP+4], pThis
*(DWORD*)(_thunk + 0) = 0x042444C7;
*(DWORD*)(_thunk + 4) = (DWORD)pThis;
//  JMP  proc //salta a WindowProc
*(BYTE*) (_thunk + 8) = 0xe9;
*(DWORD*)(_thunk + 9) = **(DWORD**)this - ((int)_thunk + 13);
return (DWORD) _thunk;
}
private:
char _thunk[13];
};

class TSay: public CWinThunk
{
protected:
HWND     m_hWnd;
WNDPROC  m_lpOldProc;
LRESULT  CALLBACK WindowProc(UINT, WPARAM, LPARAM);
LRESULT  DefWindowProc(UINT, WPARAM, LPARAM);
public:
TSay(HINSTANCE,double, double, const char*, HWND, HFONT, COLORREF, COLORREF, double, double, int, int, HWND);
~TSay();
private:
  HINSTANCE   m_hIns;
  double      m_posX;
  double      m_posY;
  const char* m_pint;
  HWND        m_vent;
  HFONT       m_letr;
  COLORREF    m_escr;
  COLORREF    m_fond;
  double      m_tamX;
  double      m_tamY;
  int         m_bord;
  int         m_alin;
  HWND        m_vHij;
  void   _Conectar(HWND);
  static TSay *pCreando;
  static LRESULT CALLBACK PrimerMensaje(HWND, UINT, WPARAM, LPARAM);
};

static const  char* ClaseVentana = "ClaseTSay";

TSay::TSay(HINSTANCE hIns,double posX, double posY, const char* pint, HWND vent, HFONT letr, COLORREF escr, COLORREF fond, double tamX, double tamY, int bord, int alin, HWND vHij)
{
m_hIns = hIns;
m_posX = posX;
m_posY = posY;
m_pint = pint;
m_vent = vent;
m_letr = letr;
m_escr = escr;
m_fond = fond;
m_tamX = tamX;
m_tamY = tamY;
m_bord = bord;
m_alin = alin;
m_vHij = vHij;
m_lpOldProc = NULL;
m_hWnd    = NULL;

WNDCLASS wc;
ATOM     a;

ZeroMemory(&wc, sizeof(WNDCLASS));

wc.style = CS_HREDRAW | CS_VREDRAW;
wc.lpfnWndProc = (WNDPROC)TSay::PrimerMensaje;
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.hInstance = m_hIns;
wc.hIcon = LoadIcon(NULL, (LPCTSTR)IDI_APPLICATION);
wc.hCursor = LoadCursor(NULL, IDC_ARROW);
wc.hbrBackground = (HBRUSH)CreateSolidBrush(m_fond);
wc.lpszClassName = ClaseVentana;

a = RegisterClass(&wc);

pCreando = this;

  int x_posX = (int)m_posX;
int x_posY = (int)m_posY;
int x_tamX = (int)m_tamX;
int x_tamY = (int)m_tamY;

DWORD m_hPen;
  if (m_bord == 1)
  {
  m_hPen = SS_LEFT | WS_BORDER | WS_CHILD| WS_VISIBLE;
  }
  else
  {
  m_hPen = SS_LEFT | WS_CHILD| WS_VISIBLE;
  }

m_vHij = CreateWindow(
ClaseVentana,
"TSay",
m_hPen,
    x_posY,
    x_posX,
    x_tamX,
    x_tamY,
m_vent,
    NULL,
    m_hIns,
    NULL);

if(m_vHij)
{
ShowWindow(m_vHij, 5);
    UpdateWindow(m_vHij);
}
}

TSay::~TSay()
{
}

LRESULT CALLBACK TSay::WindowProc(UINT msg, WPARAM wp, LPARAM lp)
{
HDC dc  = GetDC(m_vHij);
PAINTSTRUCT ps;
RECT rc;
    HRGN bgRgn;
    HBRUSH hBrush;
    HPEN hPen;
    HGDIOBJ old;

  int x_posX = (int)m_posX;
int x_posY = (int)m_posY;
int x_tamX = (int)m_tamX;
int x_tamY = (int)m_tamY;

switch(msg)
{
case WM_PAINT:
    dc = BeginPaint (m_vHij, &ps);
SetRect (&rc, 0, 0, x_tamX, x_tamY);
bgRgn = CreateRectRgnIndirect(&rc);
    hBrush = CreateSolidBrush(m_fond);
    FillRgn(dc, bgRgn, hBrush);
SetBkMode    (dc, m_fond);
SetTextColor (dc, m_escr);
// old = SelectObject(dc, m_letr);
switch (m_alin)
    {
      case 0:
    DrawText(dc, m_pint, lstrlen(m_pint), &rc, DT_LEFT | DT_VCENTER | DT_SINGLELINE);
    break;
      case 1:
    DrawText(dc, m_pint, lstrlen(m_pint), &rc, DT_CENTER | DT_VCENTER | DT_SINGLELINE);
    break;
      case 2:
    DrawText(dc, m_pint, lstrlen(m_pint), &rc, DT_RIGHT | DT_VCENTER | DT_SINGLELINE);
    break;
}
//     SelectObject(dc, old);
// ReleaseDC(m_vHij, dc);

// DeleteObject(old);
DeleteObject(bgRgn);
    DeleteObject(hBrush);
    DeleteObject(hPen);
    EndPaint (m_vHij, &ps);

        SendMessage(m_vHij, WM_FONTCHANGE, (WPARAM)m_letr, 1);
        RedrawWindow(m_vHij,NULL,NULL,RDW_INVALIDATE | RDW_INTERNALPAINT);

break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(msg, wp, lp);
}
return 0;
}

//------------------------
TSay * TSay::pCreando;
//------------------------
LRESULT CALLBACK TSay::PrimerMensaje(HWND m_vHij, UINT msg, WPARAM wp, LPARAM lp)
{
pCreando->_Conectar(m_vHij);

return pCreando->WindowProc(msg, wp, lp);
}

void TSay::_Conectar(HWND m_vHij)
{
DWORD   dw;
m_hWnd = m_vHij;
dw = InitThunk(this);
::SetWindowLong(m_vHij, GWL_WNDPROC, dw);
}

LRESULT  TSay::DefWindowProc(UINT msg, WPARAM wp, LPARAM lp)
{
return m_lpOldProc ?
::CallWindowProc(m_lpOldProc, m_hWnd, msg, wp, lp) :
::DefWindowProc(m_hWnd, msg, wp, lp);
}



Y viene llamada desde la clase principal que es:


#include <windows.h>
#include <iostream>
#include <tlhelp32.h>
#include <string>
#include "CHSoft.h"
#include <ctype.h>
#include <stdio.h>
#include "procesos.h"

using namespace std;

LRESULT CALLBACK WinPro (HWND, UINT , WPARAM, LPARAM);
LRESULT CALLBACK WinPr2 (HWND, UINT , WPARAM, LPARAM);
LRESULT CALLBACK WinPr3 (HWND, UINT , WPARAM, LPARAM);
void InsertarMenu(HWND);
void Inicio(HWND);
bool Exists(CHAR* fname);
bool ProcessRunning( const char* name );
void Salida();
void Pantalla(HWND, HINSTANCE);
// int TSay(double, double, const char*, HWND, HFONT, COLORREF, COLORREF, double, double, int, int, HWND);

int APIENTRY WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpszArgument, int nFunsterStil)
{

    HWND oVentPrinc;
    MSG msg;
    WNDCLASSEX wincl;
// EXTERN HINSTANCE hInst;

    wincl.hInstance = hInstance;
    wincl.lpszClassName = "Principal";
    wincl.lpfnWndProc = WinPro;
    wincl.style = CS_HREDRAW | CS_VREDRAW;
    wincl.cbSize = sizeof (WNDCLASSEX);
    wincl.hIcon = LoadIcon (hInstance, "CHSIcono");
    wincl.hIconSm = LoadIcon (hInstance, "CHSIcono");
    wincl.hCursor = LoadCursor (NULL, IDC_ARROW);
    wincl.lpszMenuName = NULL;
    wincl.cbClsExtra = 0;
    wincl.cbWndExtra = 0;
    wincl.hbrBackground = (HBRUSH)CreateSolidBrush(RGB(255,255,255));

    if(!RegisterClassEx(&wincl))  return 0;


    wincl.hInstance = hInstance;
    wincl.lpszClassName = "Hija";
    wincl.lpfnWndProc = WinPr2;
    wincl.style = CS_HREDRAW | CS_VREDRAW;
    wincl.cbSize = sizeof (WNDCLASSEX);
    wincl.hCursor = LoadCursor (NULL, IDC_ARROW);
    wincl.lpszMenuName = NULL;
    wincl.cbClsExtra = 0;
    wincl.cbWndExtra = 0;
    wincl.hbrBackground = (HBRUSH)CreateSolidBrush(RGB(150,150,150));

    if(!RegisterClassEx(&wincl))  return 0;

    wincl.hInstance = hInstance;
    wincl.lpszClassName = "Hijo";
    wincl.lpfnWndProc = WinPr3;
    wincl.style = CS_HREDRAW | CS_VREDRAW;
    wincl.cbSize = sizeof (WNDCLASSEX);
    wincl.hCursor = LoadCursor (NULL, IDC_ARROW);
    wincl.lpszMenuName = NULL;
    wincl.cbClsExtra = 0;
    wincl.cbWndExtra = 0;
    wincl.hbrBackground = (HBRUSH)CreateSolidBrush(RGB(150,150,150));

    if(!RegisterClassEx(&wincl))  return 0;

    oVentPrinc = CreateWindowEx(
                 0,
                 "Principal",
                 wtex001,
                 WS_OVERLAPPEDWINDOW | WS_HSCROLL | WS_VSCROLL | WS_MAXIMIZE,
                 CW_USEDEFAULT,
                 CW_USEDEFAULT,
                 800,
                 600,
                 HWND_DESKTOP,
                 NULL,
                 hInstance,
                 NULL);

Inicio(oVentPrinc);

HWND oDlgVen;

    oDlgVen    = CreateWindowEx(
                 0,
                 "Hija",
                 wtex001,
                 WS_DLGFRAME | WS_CHILD | WS_VISIBLE,
                 100*TamPan,
                  20*TamPan,
                 1080*TamPan,
                 710*TamPan,
                 oVentPrinc,
                 NULL,
                 hInstance,
                 NULL);

HWND oDlgBro;

    oDlgBro    = CreateWindowEx(
                 0,
                 "Hijo",
                 wtex001,
                 WS_DLGFRAME | WS_CHILD | WS_VISIBLE,
                 100*TamPan,
                  20*TamPan,
                 1080*TamPan,
                 710*TamPan,
                 oVentPrinc,
                 NULL,
                 hInstance,
                 NULL);

SendMessage(oVentPrinc,WM_SETFONT,(WPARAM)oFont,MAKELPARAM(true,0));

Inicio(oVentPrinc);
    InsertarMenu(oVentPrinc);
    ShowWindow(oVentPrinc, SW_SHOWMAXIMIZED);
    ShowWindow(oDlgVen, SW_SHOW);
    ShowWindow(oDlgBro, SW_HIDE);
    UpdateWindow(oVentPrinc);

    Pantalla(oDlgVen, hInstance);

    // RedrawWindow(m_vHij,NULL,NULL,RDW_INVALIDATE | RDW_INTERNALPAINT);

    while(TRUE == GetMessage(&msg, NULL, 0, 0))
    {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }
    return msg.wParam;
}

LRESULT CALLBACK WinPro(HWND oVentPrinc, UINT msg, WPARAM wParam, LPARAM lParam)
{
    switch (msg)
    {
    case WM_COMMAND:
           switch(LOWORD(wParam))
   {
              case CYEENT:
                 MessageBox(oVentPrinc, wtex001, wtex022, MB_OK);
                 break;
              case CYEMAN:
                 MessageBox(oVentPrinc, wtex002, wtex023, MB_OK);
                 break;
              case CYELIC:
                 MessageBox(oVentPrinc, wtex003, wtex024, MB_OK);
                 break;
              case CYEDEM:
                 MessageBox(oVentPrinc, wtex004, wtex025, MB_OK);
                 break;
              case CYERES:
                 MessageBox(oVentPrinc, wtex005, wtex026, MB_OK);
                 break;
              case NYSENT:
                 MessageBox(oVentPrinc, wtex006, wtex027, MB_OK);
                 break;
              case NYSMAN:
                 MessageBox(oVentPrinc, wtex007, wtex028, MB_OK);
                 break;
              case NYSLIC:
                 MessageBox(oVentPrinc, wtex008, wtex029, MB_OK);
                 break;
              case NYSDEM:
                 MessageBox(oVentPrinc, wtex009, wtex030, MB_OK);
                 break;
              case NYSRES:
                 MessageBox(oVentPrinc, wtex010, wtex031, MB_OK);
                 break;
              case FYVENT:
                 MessageBox(oVentPrinc, wtex011, wtex032, MB_OK);
                 break;
              case FYVMAN:
                 MessageBox(oVentPrinc, wtex012, wtex033, MB_OK);
                 break;
              case FYVLIC:
                 MessageBox(oVentPrinc, wtex013, wtex034, MB_OK);
                 break;
              case FYVDEM:
                 MessageBox(oVentPrinc, wtex014, wtex035, MB_OK);
                 break;
              case FYVRES:
                 MessageBox(oVentPrinc, wtex015, wtex036, MB_OK);
                 break;
              case PAGWEB:
                 MessageBox(oVentPrinc, wtex016, wtex037, MB_OK);
                 break;
              case LICENC:
                 MessageBox(oVentPrinc, wtex017, wtex038, MB_OK);
                 break;
              case COMUNI:
                 MessageBox(oVentPrinc, wtex018, wtex039, MB_OK);
                 break;
              case CONSOL:
                 MessageBox(oVentPrinc, wtex019, wtex040, MB_OK);
                 break;
              case AYUPRO:
                 MessageBox(oVentPrinc, wtex020, wtex041, MB_OK);
                 break;
  case SALPRO:
       Salida();
       break;
           }
           break;
        case WM_DESTROY:
           Salida();
           break;
        default:
           return DefWindowProc(oVentPrinc, msg, wParam, lParam);
    case WM_SIZE:
    {
          RECT rWindow;
          GetWindowRect( oVentPrinc, &rWindow );
          int nHt = rWindow.right - rWindow.left;
          int nWi = rWindow.bottom - rWindow.top;
          if ((nHt > (1200*TamPan)) | (nWi >= (800*TamPan)))
            ShowScrollBar(oVentPrinc, SB_BOTH, FALSE);
          else
    ShowScrollBar(oVentPrinc, SB_BOTH, TRUE);
        }
    }
    return 0;
}

LRESULT CALLBACK WinPr2(HWND oDlgVen, UINT msg2, WPARAM wParam, LPARAM lParam)
{
HINSTANCE hInst;
    switch (msg2)
    {
    case WM_DESTROY:
           PostQuitMessage(0);
           break;
        default:
           return DefWindowProc(oDlgVen, msg2, wParam, lParam);
    }
    return 0;
}

LRESULT CALLBACK WinPr3(HWND oDlgBro, UINT msg3, WPARAM wParam, LPARAM lParam)
{
    switch (msg3)
    {
        case WM_DESTROY:
           PostQuitMessage(0);
           break;
        default:
           return DefWindowProc(oDlgBro, msg3, wParam, lParam);
    }
    return 0;
}

void Salida()
{
    PostQuitMessage(0);
}

void InsertarMenu(HWND oVent)
{
   HMENU hMenu01, hMenu02, hMenu03, hMenu04;

   hMenu01 = CreateMenu();
   hMenu02 = CreateMenu();
   hMenu03 = CreateMenu();
   hMenu04 = CreateMenu();

   switch (TipCyE)
    {
      case 1:
        AppendMenu(hMenu02, MF_STRING, CYEENT, wtex015);
        AppendMenu(hMenu02, MF_STRING, CYEMAN, wtex018);
        AppendMenu(hMenu02, MF_STRING, CYELIC, wtex019);
        break;
      case 2:
        AppendMenu(hMenu02, MF_STRING, CYEDEM, wtex039);
        break;
      case 3:
        AppendMenu(hMenu02, MF_STRING, CYEDEM, wtex039);
        AppendMenu(hMenu02, MF_STRING, CYERES, wtex048);
        break;
    }
   switch (TipNyS)
    {
      case 1:
        AppendMenu(hMenu03, MF_STRING, NYSENT, wtex015);
        AppendMenu(hMenu03, MF_STRING, NYSMAN, wtex018);
        AppendMenu(hMenu03, MF_STRING, NYSLIC, wtex019);
        break;
      case 2:
        AppendMenu(hMenu03, MF_STRING, NYSDEM, wtex040);
        break;
      case 3:
        AppendMenu(hMenu03, MF_STRING, NYSDEM, wtex040);
        AppendMenu(hMenu03, MF_STRING, NYSRES, wtex048);
        break;
    }
   switch (TipFyV)
    {
      case 1:
        AppendMenu(hMenu04, MF_STRING, FYVENT, wtex015);
        AppendMenu(hMenu04, MF_STRING, FYVMAN, wtex018);
        AppendMenu(hMenu04, MF_STRING, FYVLIC, wtex019);
        break;
      case 2:
        AppendMenu(hMenu04, MF_STRING, FYVDEM, wtex041);
        break;
      case 3:
        AppendMenu(hMenu04, MF_STRING, FYVDEM, wtex041);
        AppendMenu(hMenu04, MF_STRING, FYVRES, wtex048);
        break;
    }

   AppendMenu(hMenu01, MF_STRING | MF_POPUP, (UINT)hMenu02, wtex002);
   AppendMenu(hMenu01, MF_STRING | MF_POPUP, (UINT)hMenu03, wtex003);
   AppendMenu(hMenu01, MF_STRING | MF_POPUP, (UINT)hMenu04, wtex004);
   AppendMenu(hMenu01, MF_STRING           , PAGWEB       , wtex008);
   AppendMenu(hMenu01, MF_STRING           , LICENC       , wtex009);
   AppendMenu(hMenu01, MF_STRING           , COMUNI       , wtex010);
   AppendMenu(hMenu01, MF_STRING           , CONSOL       , wtex011);
   AppendMenu(hMenu01, MF_STRING           , AYUPRO       , wtex012);
   AppendMenu(hMenu01, MF_STRING           , SALPRO       , wtex013);
   SetMenu(oVent, hMenu01);
}

void Inicio(HWND oVentPrinc)
{
  if (Exists("CHSoft2.exe"))
  {
   PostQuitMessage(0);
   ShellExecute(GetDesktopWindow(), "open", "cambio.bat", NULL, NULL, SW_SHOWNORMAL);
  }
  else
  {
if (ProcessRunning("CHSoft.exe"))
      PostQuitMessage(0);
    else
    {
      if (Exists("cyew32.exe"))
        TipCyE = 1;
      else
      {
        if (Exists("cyew32.res"))
          TipCyE = 3;
    else
          TipCyE = 2;
  }
      if (Exists("nysw32.exe"))
        TipNyS = 1;
      else
      {
if (Exists("nysw32.res"))
          TipNyS = 3;
        else
          TipNyS = 2;
      }
      if (Exists("fyvw32.exe"))
        TipFyV = 1;
      else
      {
        if (Exists("fyvw32.res"))
          TipFyV = 3;
        else
          TipFyV = 2;
      }
      if ((ych / 800) < (xch / 1280))
        TamPan = ych / 800;
      else
        TamPan = xch / 1280;

      TamLet = 18 * TamPan;
      OSVERSIONINFO osv    = { sizeof(OSVERSIONINFO) };
      LPTSTR TipLet = TEXT("SEGOE UI");
      if (osv.dwPlatformId == VER_PLATFORM_WIN32_NT && osv.dwMajorVersion >= 5)
      {
    TipLet = TEXT("Times New Roman");
      }
      oFont = CreateFont(TamLet  , 0, 0, 0, 400, FALSE, FALSE, FALSE, DEFAULT_CHARSET, OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH | FF_DONTCARE, TipLet);
      oFon2 = CreateFont(TamLet  , 0, 0, 0, 400, FALSE, FALSE, FALSE, DEFAULT_CHARSET, OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH | FF_DONTCARE, TipLet);
      oFon3 = CreateFont(TamLet+9, 0, 0, 0, 800, FALSE, FALSE, FALSE, DEFAULT_CHARSET, OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH | FF_DONTCARE, TipLet);
    }
  }
}

bool Exists(CHAR* fname)
{
  if(INVALID_FILE_ATTRIBUTES == GetFileAttributes(fname) && GetLastError()==ERROR_FILE_NOT_FOUND)
     return false;
  return true;
}

bool ProcessRunning( const char* name )
{
HANDLE SnapShot = CreateToolhelp32Snapshot( TH32CS_SNAPPROCESS, 0 );
int siono = 0;
if( SnapShot == INVALID_HANDLE_VALUE )
return false;
PROCESSENTRY32 procEntry;
procEntry.dwSize = sizeof( PROCESSENTRY32 );
if( !Process32First( SnapShot, &procEntry ) )
return false;
do
{
if( strcmp( procEntry.szExeFile, name ) == 0 )
  {
  if (siono == 0)
  {
    siono = 1;
  }
  else
return true;
          }
}
while( Process32Next( SnapShot, &procEntry ) );
return false;
};

void Pantalla(HWND oDlgVen, HINSTANCE hInst)
{
  HWND oPant,oPan2,oPan4,oPan401,oPan402,oMenPan,oMenPan01,oMenPan02,oMenPan03,oMenPan04,oMenPan05,oMenPan06,oMenPan07,oMenPan08,oMenPan09;

  TSay oSay = TSay(hInst, 10*TamPan, 30*TamPan, wtex000, oDlgVen, oFont, escri1, fondo2,1020*TamPan, 77*TamPan, 0, 1, oPan4);
oSay = TSay(hInst, 35*TamPan,340*TamPan, wtex000, oDlgVen, oFon3, escri1, fondo1, 630*TamPan, 30*TamPan, 1, 1, oPan401);
  oSay = TSay(hInst, 36*TamPan,341*TamPan, wtex001, oDlgVen, oFon3, escri3, fondo1, 628*TamPan, 28*TamPan, 0, 1, oPan402);

  oSay = TSay(hInst, 95*TamPan, 30*TamPan, wtex000, oDlgVen, oFont, escri3, fondo1, 245*TamPan,555*TamPan, 0, 0, oMenPan);
oSay = TSay(hInst,117*TamPan, 45*TamPan, wtex002, oDlgVen, oFont, escri1, fondo1, 243*TamPan, 28*TamPan, 0, 0, oMenPan01);
  oSay = TSay(hInst,147*TamPan, 45*TamPan, wtex003, oDlgVen, oFont, escri1, fondo1, 243*TamPan, 28*TamPan, 0, 0, oMenPan02);
  oSay = TSay(hInst,177*TamPan, 45*TamPan, wtex004, oDlgVen, oFont, escri1, fondo1, 243*TamPan, 28*TamPan, 0, 0, oMenPan03);
  oSay = TSay(hInst,207*TamPan, 45*TamPan, wtex008, oDlgVen, oFont, escri1, fondo1, 243*TamPan, 28*TamPan, 0, 0, oMenPan04);
  oSay = TSay(hInst,237*TamPan, 45*TamPan, wtex009, oDlgVen, oFont, escri1, fondo1, 243*TamPan, 28*TamPan, 0, 0, oMenPan05);
  oSay = TSay(hInst,267*TamPan, 45*TamPan, wtex010, oDlgVen, oFont, escri1, fondo1, 243*TamPan, 28*TamPan, 0, 0, oMenPan06);
  oSay = TSay(hInst,297*TamPan, 45*TamPan, wtex011, oDlgVen, oFont, escri1, fondo1, 243*TamPan, 28*TamPan, 0, 0, oMenPan07);
  oSay = TSay(hInst,327*TamPan, 45*TamPan, wtex012, oDlgVen, oFont, escri1, fondo1, 243*TamPan, 28*TamPan, 0, 0, oMenPan08);
  oSay = TSay(hInst,357*TamPan, 45*TamPan, wtex013, oDlgVen, oFont, escri1, fondo1, 243*TamPan, 28*TamPan, 0, 0, oMenPan09);

  oSay = TSay(hInst, 95*TamPan,300*TamPan, wtex000, oDlgVen, oFont, escri1, fondo2, 750*TamPan,555*TamPan, 1, 0, oPant);
  oSay = TSay(hInst,105*TamPan, 30*TamPan, wtex000, oDlgVen, oFont, escri1, fondo2, 280*TamPan, 25*TamPan, 1, 0, oPan2);
    UpdateWindow(oDlgVen);
}


Todas las llamadas a la clase están al final del todo en Pantalla()

Me podéis ayudar para saber que error me está dando.

Un saludo

Carlos
#6
Hola:

Lo que tendría que hacer es presentar una ventana maximizada (la principal) con un menú y dentro otra en blanco, pero esto último es lo que no consigo hacer.

En teoría después de insertar el menú con
    InsertarMenu(oVentPrinc);    

con :
   
    int CreVenHij();
    ShowWindow (oDlgVen, 5);

tendría que crear la ventana hija y mostrarla dentro de la otra. Pero es ahí donde me pierdo y no se porque no lo hace.

Un saludo

Carlos
#7
Gracias MAFUS por tus aclaraciones.
#8
Hola a todos:

Estoy intentando crear una ventana principal y dentro de ella otra que muestre cierta información como botones e imágenes, y ya he llegado a crear la ventana el menú y la segunda ventana pero no se que pasa pero no la muestra, podríais ayudarme.

el cpp es el siguiente:


#include <windows.h>
#include <iostream>
#include <tlhelp32.h>
#include <string>
#include "CHSoft.h"
#include "procesos.h"

using namespace std;

LRESULT CALLBACK WinPro (HWND, UINT , WPARAM, LPARAM);
LRESULT CALLBACK WinPr2 (HWND, UINT , WPARAM, LPARAM);
void InsertarMenu(HWND);
void Inicio(HWND);
bool exists(CHAR* fname);
bool ProcessRunning( const char* name );
long TSAY();
void tema();
int CreVenHij();

int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpszArgument, int nFunsterStil)
{
HWND oDlgVen;
    HWND oVentPrinc;
    MSG msg;
    WNDCLASSEX wincl; 

    wincl.hInstance = hInstance;
    wincl.lpszClassName = "Principal";
    wincl.lpfnWndProc = WinPro; 
    wincl.style = CS_DBLCLKS;
    wincl.cbSize = sizeof (WNDCLASSEX);
    wincl.hIcon = LoadIcon (hInstance, "CHSIcono");
    wincl.hIconSm = LoadIcon (hInstance, "CHSIcono");
    wincl.hCursor = LoadCursor (NULL, IDC_ARROW);
    wincl.lpszMenuName = NULL; 
    wincl.cbClsExtra = 0;
    wincl.cbWndExtra = 0; 
    wincl.hbrBackground = (HBRUSH)CreateSolidBrush(RGB(150,150,150));

    if(!RegisterClassEx(&wincl))  return 0;
           
    oVentPrinc = CreateWindowEx(
                 0,                   
                 "Principal",         
                 wtex001,             
                 WS_OVERLAPPEDWINDOW | WS_HSCROLL | WS_VSCROLL | WS_MAXIMIZE,
                 CW_USEDEFAULT,       
                 CW_USEDEFAULT,       
                 600,                 
                 400,                 
                 HWND_DESKTOP,         
                 NULL,
                 hInstance,           
                 NULL                 
    );

Inicio(oVentPrinc);
    ShowWindow(oVentPrinc, 3);
    InsertarMenu(oVentPrinc);  
   
    int CreVenHij();
    ShowWindow (oDlgVen, 5);
   
    while(TRUE == GetMessage(&msg, NULL, 0, 0))
    {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }
    return msg.wParam;
}

LRESULT CALLBACK WinPro(HWND oVentPrinc, UINT msg, WPARAM wParam, LPARAM lParam)
{
    switch (msg)
    {
        case WM_COMMAND:
           switch(LOWORD(wParam))
   {
              case CYEENT:
                 MessageBox(oVentPrinc, wtex001, wtex022, MB_OK);
                 break;
              case CYEMAN:
                 MessageBox(oVentPrinc, wtex002, wtex023, MB_OK);
                 break;
              case CYELIC:
                 MessageBox(oVentPrinc, wtex003, wtex024, MB_OK);
                 break;
              case CYEDEM:
                 MessageBox(oVentPrinc, wtex004, wtex025, MB_OK);
                 break;
              case CYERES:
                 MessageBox(oVentPrinc, wtex005, wtex026, MB_OK);
                 break;                
              case NYSENT:
                 MessageBox(oVentPrinc, wtex006, wtex027, MB_OK);
                 break;
              case NYSMAN:
                 MessageBox(oVentPrinc, wtex007, wtex028, MB_OK);
                 break;
              case NYSLIC:
                 MessageBox(oVentPrinc, wtex008, wtex029, MB_OK);
                 break;
              case NYSDEM:
                 MessageBox(oVentPrinc, wtex009, wtex030, MB_OK);
                 break;
              case NYSRES:
                 MessageBox(oVentPrinc, wtex010, wtex031, MB_OK);
                 break;                  
              case FYVENT:
                 MessageBox(oVentPrinc, wtex011, wtex032, MB_OK);
                 break;
              case FYVMAN:
                 MessageBox(oVentPrinc, wtex012, wtex033, MB_OK);
                 break;
              case FYVLIC:
                 MessageBox(oVentPrinc, wtex013, wtex034, MB_OK);
                 break;
              case FYVDEM:
                 MessageBox(oVentPrinc, wtex014, wtex035, MB_OK);
                 break;
              case FYVRES:
                 MessageBox(oVentPrinc, wtex015, wtex036, MB_OK);
                 break;                  
              case PAGWEB:
                 MessageBox(oVentPrinc, wtex016, wtex037, MB_OK);
                 break;
              case LICENC:
                 MessageBox(oVentPrinc, wtex017, wtex038, MB_OK);
                 break;
              case COMUNI:
                 MessageBox(oVentPrinc, wtex018, wtex039, MB_OK);
                 break;
              case CONSOL:
                 MessageBox(oVentPrinc, wtex019, wtex040, MB_OK);
                 break;
              case AYUPRO:
                 MessageBox(oVentPrinc, wtex020, wtex041, MB_OK);
                 break;
  case SALPRO:
                 MessageBox(oVentPrinc, wtex021, wtex042, MB_OK);
                 PostQuitMessage(0);     
                 break;
           }
           break;
        case WM_DESTROY:
           PostQuitMessage(0);     
           break;
        default:                   
           return DefWindowProc(oVentPrinc, msg, wParam, lParam);
    case WM_SIZE:
    {
          RECT rWindow;
          GetWindowRect( oVentPrinc, &rWindow );
          int nHt = rWindow.right - rWindow.left;
          int nWi = rWindow.bottom - rWindow.top;         
          if ((nHt > (1200*TamPan)) | (nWi >= (800*TamPan)))
            ShowScrollBar(oVentPrinc, SB_BOTH, FALSE);
          else
    ShowScrollBar(oVentPrinc, SB_BOTH, TRUE);
        }
    }
    return 0;
}

int CreVenHij()
{
MSG        msg2;
HWND       oDlgVen;
HWND       oVentPrinc;
WNDCLASSEX wincl2;
HINSTANCE  hInstanc2;
   
wincl2.hInstance = hInstanc2;
wincl2.lpszClassName = "Ventana Hija";
wincl2.lpfnWndProc = WinPr2; 
wincl2.style = CS_DBLCLKS;
wincl2.cbSize = sizeof (WNDCLASSEX);
wincl2.hCursor = LoadCursor (NULL, IDC_ARROW);
wincl2.lpszMenuName = NULL; 
wincl2.cbClsExtra = 0;
wincl2.cbWndExtra = 0; 
wincl2.hbrBackground = (HBRUSH)CreateSolidBrush(RGB(250,250,150));

if(!RegisterClassEx(&wincl2)) return 0;

    oDlgVen = CreateWindowEx ( 0,         
              "Hija",                         
              "Ventana Hija",               
              WS_CHILD | WS_POPUP,       
              0*TamPan,                     
              0*TamPan,             
              600*TamPan,                     
              800*TamPan,                   
              oVentPrinc,
              NULL,                     
              hInstanc2,                       
              NULL);     
 
    while(TRUE == GetMessage(&msg2, NULL, 0, 0))   
{
    TranslateMessage(&msg2);
DispatchMessage(&msg2);
}
       
    return msg2.wParam;
}

LRESULT CALLBACK WinPr2(HWND oDlgVen, UINT msg2, WPARAM wParam, LPARAM lParam)
{
    switch (msg2)                 
    {
        case WM_DESTROY:
           PostQuitMessage(0);     
           break;
        default:                   
           return DefWindowProc(oDlgVen, msg2, wParam, lParam);
    }
    return 0;
}

void InsertarMenu(HWND oVentPrinc)
{
   HMENU hMenu01, hMenu02, hMenu03, hMenu04;
   
   hMenu01 = CreateMenu();
   hMenu02 = CreateMenu();
   hMenu03 = CreateMenu();
   hMenu04 = CreateMenu();

   switch (TipCyE)
    {
      case 1:
        AppendMenu(hMenu02, MF_STRING, CYEENT, wtex015);
        AppendMenu(hMenu02, MF_STRING, CYEMAN, wtex018);
        AppendMenu(hMenu02, MF_STRING, CYELIC, wtex019);
        break;
      case 2:
        AppendMenu(hMenu02, MF_STRING, CYEDEM, wtex039);
        break;    
      case 3:
        AppendMenu(hMenu02, MF_STRING, CYEDEM, wtex039);
        AppendMenu(hMenu02, MF_STRING, CYERES, wtex048);
        break;
    }
   switch (TipNyS)
    {
      case 1:
        AppendMenu(hMenu03, MF_STRING, NYSENT, wtex015);
        AppendMenu(hMenu03, MF_STRING, NYSMAN, wtex018);
        AppendMenu(hMenu03, MF_STRING, NYSLIC, wtex019);
        break;
      case 2:
        AppendMenu(hMenu03, MF_STRING, NYSDEM, wtex040);
        break;    
      case 3:
        AppendMenu(hMenu03, MF_STRING, NYSDEM, wtex040);
        AppendMenu(hMenu03, MF_STRING, NYSRES, wtex048);
        break;
    }   
   switch (TipFyV)
    {
      case 1:
        AppendMenu(hMenu04, MF_STRING, FYVENT, wtex015);
        AppendMenu(hMenu04, MF_STRING, FYVMAN, wtex018);
        AppendMenu(hMenu04, MF_STRING, FYVLIC, wtex019);
        break;
      case 2:
        AppendMenu(hMenu04, MF_STRING, FYVDEM, wtex041);
        break;    
      case 3:
        AppendMenu(hMenu04, MF_STRING, FYVDEM, wtex041);
        AppendMenu(hMenu04, MF_STRING, FYVRES, wtex048);
        break;
    }

   AppendMenu(hMenu01, MF_STRING | MF_POPUP, (UINT)hMenu02, wtex002);
   AppendMenu(hMenu01, MF_STRING | MF_POPUP, (UINT)hMenu03, wtex003);
   AppendMenu(hMenu01, MF_STRING | MF_POPUP, (UINT)hMenu04, wtex004);
   AppendMenu(hMenu01, MF_STRING           , PAGWEB       , wtex008);
   AppendMenu(hMenu01, MF_STRING           , LICENC       , wtex009);
   AppendMenu(hMenu01, MF_STRING           , COMUNI       , wtex010);
   AppendMenu(hMenu01, MF_STRING           , CONSOL       , wtex011);
   AppendMenu(hMenu01, MF_STRING           , AYUPRO       , wtex012);
   AppendMenu(hMenu01, MF_STRING           , SALPRO       , wtex013);   
   SetMenu (oVentPrinc, hMenu01);
}

void Inicio(HWND oVentPrinc)
{
  if (exists("CHSoft2.exe"))
  {
   PostQuitMessage(0);
   ShellExecute(GetDesktopWindow(), "open", "cambio.bat", NULL, NULL, SW_SHOWNORMAL);
  }
  else
  {
if (ProcessRunning("CHSoft.exe"))
      PostQuitMessage(0);
    else
    {
      if (exists("cyew32.exe"))
        TipCyE = 1;
      else
      {
        if (exists("cyew32.res"))
          TipCyE = 3;
    else
          TipCyE = 2;
  }
      if (exists("nysw32.exe"))
        TipNyS = 1;
      else
      { 
if (exists("nysw32.res"))
          TipNyS = 3;
        else
          TipNyS = 2;
      }
      if (exists("fyvw32.exe"))
        TipFyV = 1;
      else
      {
        if (exists("fyvw32.res"))
          TipFyV = 3;
        else
          TipFyV = 2;
      }
      if ((ych / 800) < (xch / 1280))
        TamPan = ych / 800;
      else
        TamPan = xch / 1280;

      Tamlet = 18 * TamPan;
      OSVERSIONINFO osv    = { sizeof(OSVERSIONINFO) };
      LPTSTR        szFont = TEXT("Times New Roman");
      if (osv.dwPlatformId == VER_PLATFORM_WIN32_NT &&    osv.dwMajorVersion >= 5)
      {
    szFont = TEXT("SEGOE UI");
      }
      oFont = CreateFont(Tamlet  , 0, 0, 0, FW_NORMAL, FALSE, FALSE, FALSE, DEFAULT_CHARSET, OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH | FF_DONTCARE, szFont);
      oFon2 = CreateFont(Tamlet  , 0, 0, 0, FW_NORMAL, FALSE, FALSE, FALSE, DEFAULT_CHARSET, OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH | FF_DONTCARE, szFont);
      oFon3 = CreateFont(Tamlet+3, 0, 0, 0, FW_BOLD  , FALSE, FALSE, FALSE, DEFAULT_CHARSET, OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH | FF_DONTCARE, szFont);
    }
  }
}

bool exists(CHAR* fname)
{
  if(INVALID_FILE_ATTRIBUTES == GetFileAttributes(fname) && GetLastError()==ERROR_FILE_NOT_FOUND)
     return false; 
  return true;
}

bool ProcessRunning( const char* name )
{
HANDLE SnapShot = CreateToolhelp32Snapshot( TH32CS_SNAPPROCESS, 0 );
const char* siono = "N";
if( SnapShot == INVALID_HANDLE_VALUE )
return false;
PROCESSENTRY32 procEntry;
procEntry.dwSize = sizeof( PROCESSENTRY32 );
if( !Process32First( SnapShot, &procEntry ) )
return false;
do
{
if( strcmp( procEntry.szExeFile, name ) == 0 )
  {
  if (siono == "N")
  {
    siono = "S";
  }
  else   
return true;
          }
}
while( Process32Next( SnapShot, &procEntry ) );
return false;
};


Gracias.

Carlos.
#9
Hola MAFUS:

Yo en todo momento se que tipo son las variables.

Imaginate:

int var01;
int var02 = 1;
char[6] var03 = "var04";
int var04 = 4;

var01 = var02 + &var03;

y lo tendría que hacer es var01 = var02 + var04.

Un saludo

Carlos
#10
Hola MAFUS y ivancea96:

Es Clipper con las librerías Fivewin y  harbour, y todas son librerías de c++ que se tienen compilar con borland de embarcadero.

Os repito lo de las 1000 variables es un ejemplo otro podría ser el uso de una base de datos:

Imaginemos que cada año tenemos que usa unos límites de cotización para aplicar a las nóminas y los tenemos en una base los del 2015 en "base2015" los de 2016 en "base2016". Si yo creo:
base = "base" + ejercicio

y luego

use &base

dependiendo de la variable "ejercicio" obtendremos los límites de 2015 o 2016.

O imaginemos que llamas a una función y dependiendo desde donde la llames vuelva a otra para continuar con un proceso:

void uno()
{
sitio = "CUATRO()"
tres()
}

void dos()
{
sitio = "CINCO()"
tres()
}

void tres()
{
run &sitio
}

Dependiendo de si viene de uno o de dos va a cuatro o cinco.

Un saludo

Carlos