Borra textos

Iniciado por CBFD, 27 Julio 2016, 12:46 PM

0 Miembros y 1 Visitante están viendo este tema.

CBFD

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