Mi aplicación tiene un cuadro de diálogo de inicio con una imagen que llena todo el diálogo. Además, hay un CStatic de control, que muestra algo de información variable para el usuario. Hice el CStatic control transparente con el siguiente código:

HBRUSH CStartbildDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
    if(pWnd->GetDlgCtrlID() == IDC_STATIC_INFO)
    {
        pDC->SetBkMode(TRANSPARENT);
        return reinterpret_cast<HBRUSH>(::GetStockObject(NULL_BRUSH));
    }
    else
        return CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
}

Cuando puedo cambiar el texto de la estática de control con GetDlgItem(IDC_STATIC_INFO)->SetWindowText, el nuevo texto se superpone a la edad de texto (el texto antiguo no se elimina). He tratado de volver a dibujar el fondo antes de llamar a SetWindowText imagen con GetDlgItem(IDC_STATIC_BILD)->Invalidate(), pero luego no hay información de texto se muestra (ni el antiguo ni el nuevo).

¿Sabes cómo puedo hacer que el control de la estática transparente, de modo que yo también puede reemplazar con un nuevo texto?

Gracias por su ayuda!

Solución:
Método 2 (adaptado) de la codeproject-link de Sanja trabajó para mí.

GetDlgItem(IDC_STATIC_INFO)->SetWindowText(tmp);
CRect rect;
GetDlgItem(IDC_STATIC_INFO)->GetWindowRect(&rect);
ScreenToClient(&rect);
InvalidateRect(&rect);
UpdateWindow();

2 Comentarios

Dejar respuesta

Please enter your comment!
Please enter your name here