Problemas con CStatic

25/05/2004 - 10:15 por Sergio | Informe spam
Hola grupo,
Estoy intentando hacerme una clase que derive de CStatic. Todo va bien,
exceptuando cuando cambio el texto en tiempo de ejecución, el efecto que
se produce es que se "solapan" el texto antiguo y el texto nuevo.
Esto es lo que hago:

void CMyStatic2::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)
{
CDC *dcbuff = CDC::FromHandle(lpDrawItemStruct->hDC);
COLORREF clrBackGrnd = RGB(255,255,255);
COLORREF clrTextOld = dcbuff->GetTextColor();
COLORREF clrTextNew = RGB(255,255,255);
CRect crctRect(lpDrawItemStruct->rcItem);
CString cstrTexto;
GetWindowText(cstrTexto);
dcbuff->SetBkMode(TRANSPARENT);
dcbuff->SetTextColor(clrTextNew);
dcbuff->DrawText(cstrTexto,crctRect,DT_LEFT|DT_VCENTER|DT_SINGLELINE);
dcbuff->SetTextColor(clrTextOld);
UpdateData(FALSE);
}

He probado ha escribir el texto con TextOut, y ha escribir una cadena de
espacios en blanco antes de la salida, pero sin éxito.
 

Leer las respuestas

#1 Hernán
26/05/2004 - 10:36 | Informe spam
Sergio escribía:

Hola grupo,
Estoy intentando hacerme una clase que derive de CStatic. Todo va bien,
exceptuando cuando cambio el texto en tiempo de ejecución, el efecto que
se produce es que se "solapan" el texto antiguo y el texto nuevo.
Esto es lo que hago:

void CMyStatic2::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)
{
CDC *dcbuff = CDC::FromHandle(lpDrawItemStruct->hDC);
COLORREF clrBackGrnd = RGB(255,255,255);
COLORREF clrTextOld = dcbuff->GetTextColor();
COLORREF clrTextNew = RGB(255,255,255);
CRect crctRect(lpDrawItemStruct->rcItem);
CString cstrTexto;
GetWindowText(cstrTexto);
dcbuff->SetBkMode(TRANSPARENT);
dcbuff->SetTextColor(clrTextNew);
dcbuff->DrawText(cstrTexto,crctRect,DT_LEFT|DT_VCENTER|DT_SINGLELINE);
dcbuff->SetTextColor(clrTextOld);
UpdateData(FALSE);
}

He probado ha escribir el texto con TextOut, y ha escribir una cadena de
espacios en blanco antes de la salida, pero sin éxito.



Es responsabilidad del control, y en este caso del owner, pintar el
fondo (lo dice la doc cuando habla del procedimiento por defecto para el
WM_ERASEBKGND).

Fijate como los valores del rcItem abarcan la totalidad del client area.

Hernán (28)
Quilmes (ar)

Preguntas similares