搭配使用對話方塊列與 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 訊息到父視窗和強制重繪模擬對話方塊列的透明度,對話方塊列物件移動時。