SDIアプリで垂直および水平の定規バーを作成するための最良の方法は何ですか?フレームまたはビューの一部にしますか?CControlBarから派生しますか、それともより良い方法がありますか?
垂直定規も、フレームではなくペインにドッキングする必要があります。
私が何を求めているかをもう少し明確にするために、Visual Studioのダイアログエディター(MFCのみ)の垂直定規を想像してみてください。ツリービューのサイズが変更されるたびに再配置されます。
SDIアプリで垂直および水平の定規バーを作成するための最良の方法は何ですか?フレームまたはビューの一部にしますか?CControlBarから派生しますか、それともより良い方法がありますか?
垂直定規も、フレームではなくペインにドッキングする必要があります。
私が何を求めているかをもう少し明確にするために、Visual Studioのダイアログエディター(MFCのみ)の垂直定規を想像してみてください。ツリービューのサイズが変更されるたびに再配置されます。
コントロールバーは使いません。ドッキングツールバー以外の何かが必要な場合、(IMOHO)がやりたいことを実行するのが難しい場合以外に正当な理由はありません。
GDI 呼び出しを使用して、ビュー ウィンドウに直接描画します。
各ルーラーを独自のウィンドウにして、ルーラーを独自のウィンドウに描画することを考えるかもしれません。次に、これら 2 つの CWnd 派生クラスをビューに作成し、子ウィンドウとして配置します。これは、これらの定規でマウスを操作したい場合に適しています (定規のメッセージを簡単に整理できます)。
あなたが提案したように、CWndからルーラーを派生させ、コントロールバーのルートをスキップしました。このコードはどちらの場合でも機能します。
m_wndSplitter.CreateStatic(this, 1, 3);
m_wndLeftPane.Create(&m_wndSplitter,WS_CHILD|WS_VISIBLE,m_wndSplitter.IdFromRowCol(0, 0));
m_ruler.Create(&m_wndSplitter,WS_CHILD|WS_VISIBLE,m_wndSplitter.IdFromRowCol(0, 1));
m_wndSplitter.CreateView(0, 2, pContext->m_pNewViewClass, CSize(300, 0), pContext);
SetActiveView((CScrollView*)m_wndSplitter.GetDlgItem(m_wndSplitter.IdFromRowCol(0, 2)));