PROBLEMA: Estilo BS_GROUPBOX janela filho plano de fundo pintura incorreto

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 traduzido ou revisto por pessoas. A Microsoft possui artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais, com o objetivo de oferecer em português a totalidade dos artigos existentes na base de dados de suporte. No entanto, a tradução automática não é sempre perfeita, podendo conter erros de vocabulário, sintaxe ou gramática. A Microsoft não é responsável por incoerências, erros ou prejuízos ocorridos em decorrência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza atualizações freqüentes ao software de tradução automática (MT). Obrigado.

Clique aqui para ver a versão em Inglês deste artigo: 79982
Este artigo foi arquivado. É oferecido "como está" e não será mais atualizado.
3,00 3.10 WINDOWS kbprg kbprb kbcode
Sintomas
Quando uma janela de estilo BS_GROUPBOX é criada, seu plano de fundo não apaga corretamente.
Causa
A janela pai da janela do estilo BS_GROUPBOX tem o estilo WS_CLIPCHILDREN, que impede que a janela pai de apagar plano de fundo da caixa de grupo.
Resolução
A janela de caixa de grupo para processar a mensagem WM_ERASEBKGND por apagar seu plano de fundo da subclasse. Abaixo é um fragmento de código para demonstrar esse procedimento.
Situação
Esse comportamento é por design.
Mais Informações
O estilo WS_CLIPCHILDREN faz com que uma janela excluir as áreas ocupadas por janelas filho quando a janela pinta sua área cliente. No entanto, uma janela de estilo BS_GROUPBOX é um controle estático que nunca apaga seu plano de fundo. Apagar o plano de fundo remove quaisquer controles ou botões que aparecem na caixa de grupo.

Portanto, quando outra janela filho é descartada em uma caixa de grupo e subseqüentemente arrastada para fora, partes da janela filho permanecem visíveis no plano de fundo da caixa de grupo. Esse problema não ocorre quando a janela pai não tem o estilo WS_CLIPCHILDREN.

O fragmento de código a seguir deve ser colocado no procedimento de subclasse da caixa de grupo. Esse código apaga o plano de 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.    }				
3.10 3.00

Aviso: este artigo foi traduzido automaticamente

Propriedades

ID do Artigo: 79982 - Última Revisão: 12/04/2015 09:11:12 - Revisão: 1.1

Microsoft Windows Software Development Kit 3.1

  • kbnosurvey kbarchive kbmt kb16bitonly kbbutton kbctrl kbprb KB79982 KbMtpt
Comentários