Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Como mencionado em Controles e bandas de vergalhão, cada banda pode conter apenas uma janela filha (ou controlo). Isso pode ser uma limitação se você quiser ter mais de uma janela filho por banda. Uma solução conveniente é criar um recurso de barra de diálogo com múltiplos controles e, em seguida, adicionar uma banda de rebar (contendo a barra de diálogo) ao controlo de rebar.
Normalmente, se você quisesse que a banda da barra de diálogo parecesse transparente, definiria o estilo WS_EX_TRANSPARENT estendido para o objeto da barra de diálogo. No entanto, como WS_EX_TRANSPARENT tem alguns problemas com a pintura correta do fundo de uma barra de diálogo, você precisará fazer um pouco de trabalho extra para alcançar o efeito desejado.
O procedimento a seguir detalha as etapas necessárias para alcançar a transparência sem usar o estilo WS_EX_TRANSPARENT estendido.
Para implementar uma barra de ferramentas transparente em uma banda de rebar
Usando a caixa de diálogo Adicionar classe, adicione uma nova classe (por exemplo,
CMyDlgBar) que implemente o objeto da barra de diálogo.Adicione um manipulador para a mensagem WM_ERASEBKGND.
No novo manipulador, modifique o código existente para corresponder ao exemplo a seguir:
BOOL CMyDlgBar::OnEraseBkgnd(CDC *pDC) { CWnd *pParent = GetParent(); ASSERT_VALID(pParent); CPoint pt(0, 0); MapWindowPoints(pParent, &pt, 1); pt = pDC->OffsetWindowOrg(pt.x, pt.y); LRESULT lResult = pParent->SendMessage(WM_ERASEBKGND, (WPARAM)pDC->m_hDC, 0L); pDC->SetWindowOrg(pt.x, pt.y); return (BOOL)lResult; }Adicione um manipulador para a mensagem WM_MOVE.
No novo manipulador, modifique o código existente para corresponder ao exemplo a seguir:
void CMyDlgBar::OnMove(int x, int y) { UNREFERENCED_PARAMETER(x); UNREFERENCED_PARAMETER(y); Invalidate(); }
Os novos manipuladores simulam a transparência da barra de diálogo encaminhando a mensagem de WM_ERASEBKGND para a janela mãe e forçando a repintura toda vez que o objeto da barra de diálogo é movido.