Rebar コントロールでのダイアログ バーの使い方
Rebar コントロールおよび、割に既に説明したように、各バンドには 1 種類の子ウィンドウことができます (またはコントロールのみ)が含まれます。これは、バンド 1 人の複数の子ウィンドウが使用するには制限がある場合があります。便利な代替手段は、ダイアログ バーのリソースを複数のコントロールを作成し、 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 のメッセージを親ウィンドウにコピーし、再描画が強制することによって、ダイアログ バー オブジェクトが移動するたびにダイアログ バーの透過性をシミュレートします。