0

使用来自http://msdn.microsoft.com/en-us/library/cc309030.aspx的命名

当我将 CPaneDialog 与另一个 CDockablePane 对接时,选项卡式窗格位置始终位于停靠区底部,如何将选项卡式窗格位置设置为停靠区顶部,就像普通选项卡式控件一样?

4

2 回答 2

1

好的,我已经想通了,所以我会回答我自己的问题:)

当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 对接,选项卡位置将位于底部,这是默认设置。

于 2010-08-16T18:21:14.943 回答
0

我通过修改得到了满意的结果CTabbedPane::m_bTabsAlwaysTop

于 2013-03-17T22:50:51.960 回答