http://msdn.microsoft.com/en-us/library/cc309030.aspxからの命名を使用します
CPaneDialogを別のCDockablePaneにドッキングすると、タブ付きペインの位置は常にドック領域の下部になります。通常のタブ付きコントロールのように、タブ付きペインの位置をドック領域の上部に設定するにはどうすればよいですか?
http://msdn.microsoft.com/en-us/library/cc309030.aspxからの命名を使用します
CPaneDialogを別のCDockablePaneにドッキングすると、タブ付きペインの位置は常にドック領域の下部になります。通常のタブ付きコントロールのように、タブ付きペインの位置をドック領域の上部に設定するにはどうすればよいですか?
わかりました、私はそれを理解したので、私は自分の質問に答えます:)
CDockablePane が互いにドッキングすると、MFC は CBaseTabbedPane を作成して CDockablePanes を保持します。タブの位置をデフォルトで下 (Visual Studio のように) から上 (通常のタブのように) に変更するには、CDockablePane 派生クラスでこのメソッドをオーバーライドする必要があります。
void CDockablePane::OnAfterDock(CBasePane* /*pBar*/, LPCRECT /*lpRect*/, AFX_DOCK_METHOD /*dockMethod*/);
このコードで:
CBaseTabbedPane* tabbedPane = GetParentTabbedPane();
if (!tabbedPane) return;
CMFCBaseTabCtrl* tabCtrl = tabbedPane->GetUnderlyingWindow();
if (!tabCtrl) return;
tabCtrl->SetLocation(CMFCBaseTabCtrl::LOCATION_TOP);
また
HWND hWndTab = NULL;
CMFCBaseTabCtrl* parent = GetParentTabWnd(hWndTab);
if (parent)
{
parent->SetLocation(CMFCBaseTabCtrl::LOCATION_TOP);
}
すべての CDockablePane 派生クラスでこのメソッドをオーバーライドして、正しく機能させる必要があります。そうしないと、タブの位置は、他のペインをドッキングするためにドラッグするペインに依存します。
例:PaneAにはタブ位置を上に設定するコードがありますが、PaneBにはありません。
PaneA をドラッグして PaneB とドッキングすると、タブの位置が上になります。
PaneB をドラッグして PaneA とドッキングすると、タブの位置はデフォルトで一番下になります。
を修正することで満足のいく結果が得られましたCTabbedPane::m_bTabsAlwaysTop
。