使用與 Rebar 控制項的對話方塊列
如所述 Rebar 控制項和功能帶,每個群組列可以包含只有一個子視窗 (或控制項)。 如果您想要有一個以上的子視窗,每一個團隊,這可能是一項限制。 方便的解決方法是使用多個控制項建立對話方塊列資源,然後將一個 rebar 團隊 (包含對話方塊列) 新增到這個 rebar 控制項。
一般情況下,如果您要以透明方式出現的對話方塊列條紋,您會設定 WS_EX_TRANSPARENT 延伸對話方塊列物件的樣式。 不過,因為 WS_EX_TRANSPARENT 已正確地繪製背景對話方塊列的一些問題,您必須進行一些額外的事,以達到所要的效果。
下列程序詳細說明了達成透明,而不需使用的必要步驟 WS_EX_TRANSPARENT 延伸樣式。
若要在 rebar 群組列中實作透明對話方塊列
使用加入類別對話方塊,加入新的類別 (例如, CMyDlgBar) 實作您的對話方塊列物件。
加入處理常式的WM_ERASEBKGND訊息。
在新的處理常式中,修改現有的程式碼,使其符合下列的範例:
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; }
加入處理常式的WM_MOVE訊息。
在新的處理常式中,修改現有的程式碼,使其符合下列的範例:
void CMyDlgBar::OnMove(int x, int y) { UNREFERENCED_PARAMETER(x); UNREFERENCED_PARAMETER(y); Invalidate(); }
新的處理常式以便模擬透明對話方塊列的轉寄的WM_ERASEBKGND訊息給父視窗,並在每次對話方塊列移動時強迫進行重新繪製。