对 Rebar 控件使用对话栏

Rebar 和带区控件所述,每个带区只能包含一个子窗口 (或控件)。 如果希望多带区,每一子窗口可能是有限的。 方便工作区是创建具有多个控件的对话栏位资源比添加 rebar 带区 (包含) 到对话栏 rebar 控件。

通常,如果需要,对话栏显示带透明,将对话栏对象的 WS_EX_TRANSPARENT 扩展样式。 但是,WS_EX_TRANSPARENT 与适当对话栏,因为绘制背景的某些问题,您需要完成额外的工作有获得预期效果。

以下过程详细说明的必要步骤实现透明,而无需使用 WS_EX_TRANSPARENT 扩展样式。

若要实现在 rebar 的一个透明对话栏中结合

  1. 使用 添加类"对话框中,添加一个新类 (例如,CMyDlgBar) 实现对话栏对象。

  2. WM_ERASEBKGND 消息的处理程序。

  3. 在新的处理程序,请修改现有代码以匹配以下示例:

    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;
    }
    
  4. WM_MOVE 消息的处理程序。

  5. 在新的处理程序,请修改现有代码以匹配以下示例:

    void CMyDlgBar::OnMove(int x, int y)
    {
       UNREFERENCED_PARAMETER(x);
       UNREFERENCED_PARAMETER(y);
    
       Invalidate();
    }
    

新处理程序转发 WM_ERASEBKGND 消息到父窗口并强制重新绘制数据对话栏的透明度,在对话栏对象移动时间。

请参见

参考

使用 CReBarCtrl

概念

控件 (MFC)