使用與 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)