使用MFC Feature Pack 1在VS2008中停靠选项卡式窗格位置

时间:2010-07-30 10:55:35

标签: visual-studio-2008 mfc-feature-pack docking

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

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

2 个答案:

答案 0 :(得分: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);

OR

HWND hWndTab = NULL;
CMFCBaseTabCtrl* parent = GetParentTabWnd(hWndTab);
if (parent)
{
    parent->SetLocation(CMFCBaseTabCtrl::LOCATION_TOP);
}

您需要在所有CDockablePane派生类中重写此方法才能正常工作,否则选项卡位置将取决于您拖动以停靠其他窗格的窗格。

例如:PaneA有代码将标签位置设置为顶部,但PaneB没有。

如果您将PaneA拖动到与PaneB对接,则标签位置将位于顶部。

如果您将PaneB拖动到与PaneA停靠,则标签位置将位于底部,这是默认设置。

答案 1 :(得分:0)

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