PROBLEMA: BS_GROUPBOX estilo subordinado janela fundo pintar errado

Traduções de Artigos Traduções de Artigos
Artigo: 79982 - Ver produtos para os quais este artigo se aplica.
3.00 3.10 WINDOWS kbprg kbprb kbcode
Expandir tudo | Reduzir tudo

Sintomas

Quando uma janela de estilo BS_GROUPBOX é criada, o fundo não apaga correctamente.

Causa

A janela principal da janela de estilo BS_GROUPBOX tem o estilo WS_CLIPCHILDREN, que impede a janela principal de apagar o fundo da caixa de grupo.

Resolução

Subclasse a janela para processar a mensagem WM_ERASEBKGND por apagar o fundo da caixa de grupo. Segue-se um fragmento de código para demonstrar este procedimento.

Ponto Da Situação

Este comportamento ocorre por predefinição.

Mais Informação

O estilo WS_CLIPCHILDREN faz com que uma janela excluir as áreas ocupadas por janelas subordinadas quando a janela desenha respectiva área cliente. No entanto, uma janela de estilo BS_GROUPBOX é um controlo estático que nunca apaga o fundo. Apagar o fundo remove quaisquer controlos ou botões que aparecem na caixa de grupo.

Por conseguinte, quando outra janela subordinada é ignorada através de uma caixa de grupo e subsequentemente arrastado para fora do escritório, partes dessa janela subordinada permanecem visíveis no fundo da caixa de grupo. Este problema não ocorre quando a janela principal não tem o estilo WS_CLIPCHILDREN.

O seguinte fragmento de código deve ser colocado no procedimento de subclasse a caixa de grupo. Este código apaga o fundo da caixa 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.
    }
				

Propriedades

Artigo: 79982 - Última revisão: 11 de fevereiro de 2005 - Revisão: 1.1
A informação contida neste artigo aplica-se a:
  • Microsoft Windows Software Development Kit 3.1
Palavras-chave: 
kbmt kb16bitonly kbbutton kbctrl kbprb KB79982 KbMtpt
Tradução automática
IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine translation ou MT), não tendo sido portanto revisto ou traduzido por humanos. A Microsoft tem artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais. O objectivo é simples: oferecer em Português a totalidade dos artigos existentes na base de dados do suporte. Sabemos no entanto que a tradução automática não é sempre perfeita. Esta pode conter erros de vocabulário, sintaxe ou gramática? erros semelhantes aos que um estrangeiro realiza ao falar em Português. A Microsoft não é responsável por incoerências, erros ou estragos realizados na sequência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza actualizações frequentes ao software de tradução automática (MT). Obrigado.
Clique aqui para ver a versão em Inglês deste artigo: 79982
Exclusão de Responsabilidade para Conteúdo sem Suporte na KB
Este artigo foi escrito sobre produtos para os quais a Microsoft já não fornece suporte. Por conseguinte, este artigo é oferecido "tal como está" e deixará de ser actualizado.

Submeter comentários

 

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