PRB: Fondo de ventana secundaria de estilo BS_GROUPBOX dibujar incorrecto

Seleccione idioma Seleccione idioma
Id. de artículo: 79982 - Ver los productos a los que se aplica este artículo
3.00 3.10 WINDOWS kbprg kbprb kbcode
Expandir todo | Contraer todo

Síntomas

Cuando se crea una ventana de estilo BS_GROUPBOX, su fondo no borra correctamente.

Causa

La ventana principal de la ventana de estilo BS_GROUPBOX tiene el estilo WS_CLIPCHILDREN, que impide que la ventana primaria borrar el fondo del cuadro de grupo.

Solución

Subclase de la ventana de cuadro de grupo para procesar el mensaje WM_ERASEBKGND borrando su fondo. Enumerados a continuación es un fragmento de código para demostrar este procedimiento.

Estado

Este comportamiento es por diseño.

Más información

El estilo WS_CLIPCHILDREN hace que una ventana excluir las áreas ocupadas por ventanas secundarias cuando la ventana pinta su área de cliente. Sin embargo, una ventana de estilo BS_GROUPBOX es un control estático que nunca se borra su fondo. Borrar el fondo, quita cualquier controles o botones que aparecen en el cuadro de grupo.

Por lo tanto, cuando otra ventana secundaria se coloca sobre un cuadro de grupo y posteriormente se arrastra fuera, partes de dicha ventana secundaria permanecen visibles en el fondo del cuadro de grupo. Este problema no se produce cuando la ventana primaria no tiene el estilo WS_CLIPCHILDREN.

El siguiente fragmento de código debe colocarse en procedimiento de subclase del cuadro de grupo. Este código borra el fondo del cuadro de grupo.
   case WM_ERASEBKGND:

    {
    HBRUSH  hBrush, hOldBrush;
    HPEN    hPen, hOldPen;
    RECT    rect;
    HDC     hDC;

    hDC = GetDC(hWnd);

    // Obtain a handle to the parent window's background brush.
    hBrush = GetClassWord(ghWnd, GCW_HBRBACKGROUND);
    hOldBrush = SelectObject(hDC, hBrush);

    // Create a background-colored pen to draw the rectangle
    // borders, where gWindowColor is some globally defined
    // COLORREF variable used to paint the window's background
    hPen = CreatePen(PS_SOLID, 1, gWindowColor);
    hOldPen = SelectObject(hDC, hPen);

    // Erase the group box's background.
    GetClientRect(hWnd, &rect);
    Rectangle(hDC, rect.left, rect.top, rect.right, rect.bottom);

    // Restore the original objects before releasing the DC.
    SelectObject(hDC, hOldPen);
    SelectObject(hDC, hOldBrush);

    // Delete the created object.
    DeleteObject(hPen);

    ReleaseDC(hWnd, hDC);

    // Instruct Windows to paint the group box text and frame.
    InvalidateRect(hWnd, NULL, FALSE);

    // Insert code here to instruct the contents of the group box
    // to repaint as well.

    return TRUE; // Background has been erased.
    }
				

Propiedades

Id. de artículo: 79982 - Última revisión: viernes, 11 de febrero de 2005 - Versión: 1.1
La información de este artículo se refiere a:
  • Microsoft Windows Software Development Kit 3.1
Palabras clave: 
kbmt kb16bitonly kbbutton kbctrl kbprb KB79982 KbMtes
Traducción automática
IMPORTANTE: Este artículo ha sido traducido por un software de traducción automática de Microsoft (http://support.microsoft.com/gp/mtdetails) en lugar de un traductor humano. Microsoft le ofrece artículos traducidos por un traductor humano y artículos traducidos automáticamente para que tenga acceso en su propio idioma a todos los artículos de nuestra base de conocimientos (Knowledge Base). Sin embargo, los artículos traducidos automáticamente pueden contener errores en el vocabulario, la sintaxis o la gramática, como los que un extranjero podría cometer al hablar el idioma. Microsoft no se hace responsable de cualquier imprecisión, error o daño ocasionado por una mala traducción del contenido o como consecuencia de su utilización por nuestros clientes. Microsoft suele actualizar el software de traducción frecuentemente.
Haga clic aquí para ver el artículo original (en inglés): 79982
Renuncia a responsabilidad de los contenidos de la KB sobre productos a los que ya no se ofrece asistencia alguna
El presente artículo se escribió para productos para los que Microsoft ya no ofrece soporte técnico. Por tanto, el presente artículo se ofrece "tal cual" y no será actualizado.

Enviar comentarios

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com