CMDIFrameWndEx
类
扩展 Windows 多文档界面 (MDI) 框架窗口 CMDIFrameWnd
的功能。
语法
class CMDIFrameWndEx : public CMDIFrameWnd
成员
公共方法
数据成员
名称 | 描述 |
---|---|
CMDIFrameWndEx::m_bCanConvertControlBarToMDIChild |
确定是否可将停靠窗格转换为 MDI 子窗口。 |
CMDIFrameWndEx::m_bDisableSetRedraw |
启用或禁用 MDI 子窗口的重绘优化。 |
注解
要利用 MDI 应用程序中的扩展自定义功能,请从 CMDIFrameWndEx
(而不是 CMDIFrameWnd
)派生应用程序的 MDI 框架窗口类。
示例
以下示例从 CMDIFrameWndEx
派生一个类。 此代码片段摘自 DrawClient 示例:MFC 基于功能区的 OLE 对象绘图应用程序。
class CMainFrame : public CMDIFrameWndEx
{
DECLARE_DYNAMIC(CMainFrame)
public:
struct XStyle
{
COLORREF clrFill;
COLORREF clrLine;
};
public:
CMainFrame();
// Attributes
public:
CMFCRibbonBar *GetRibbonBar() { return &m_wndRibbonBar; }
// Operations
public:
void UpdateUI(CDrawView *pCurrView);
void UpdateContextTab(CDrawView *pCurrView);
void UpdateContextTabFromObject(CDrawObjList &list);
COLORREF GetColorFromColorButton(int nButtonID);
int GetWeightFromLineWeight(int nButtonID);
BOOL GetStyleFromStyles(XStyle &style);
void SetRibbonContextCategory(UINT uiCategoryID);
void ActivateRibbonContextCategory(UINT uiCategoryID);
// Implementation
public:
virtual ~CMainFrame();
#ifdef _DEBUG
virtual void AssertValid() const;
virtual void Dump(CDumpContext &dc) const;
#endif
protected:
// control bar embedded members
CMFCRibbonStatusBar m_wndStatusBar;
CMFCRibbonBar m_wndRibbonBar;
CMFCRibbonApplicationButton m_MainButton;
// panel images
CMFCToolBarImages m_PanelImages;
// Document colors for demo:
CList<COLORREF, COLORREF> m_lstMainColors;
CList<COLORREF, COLORREF> m_lstAdditionalColors;
CList<COLORREF, COLORREF> m_lstStandardColors;
// Generated message map functions
protected:
//{{AFX_MSG(CMainFrame)
afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
afx_msg void OnAppLook(UINT id);
afx_msg void OnUpdateAppLook(CCmdUI *pCmdUI);
afx_msg void OnWindowManager();
afx_msg void OnMdiMoveToNextGroup();
afx_msg void OnMdiMoveToPrevGroup();
afx_msg void OnMdiNewHorzTabGroup();
afx_msg void OnMdiNewVertGroup();
afx_msg void OnMdiCancel();
afx_msg LRESULT OnRibbonCustomize(WPARAM wp, LPARAM lp);
afx_msg LRESULT OnHighlightRibbonListItem(WPARAM wp, LPARAM lp);
afx_msg void OnToolsOptions();
afx_msg void OnDummy();
afx_msg void OnSysColorChange();
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
virtual BOOL OnShowMDITabContextMenu(CPoint point, DWORD dwAllowedItems, BOOL bDrop);
virtual BOOL OnShowPopupMenu(CMFCPopupMenu *pMenuPopup);
void ShowOptions(int nPage);
void CreateDocumentColors();
private:
BOOL CreateRibbonBar();
BOOL CreateStatusBar();
void InitMainButton();
void InitHomeCategory();
void InitViewCategory();
void InitTabButtons();
void AddContextTab_Format();
void AdjustObjectSubmenu(CMFCPopupMenu *pMenuPopup);
void UpdateStatusBarCountPane(int nID, CString strText, int nCount);
UINT m_nAppLook;
};
继承层次结构
要求
标头:afxMDIFrameWndEx.h
CMDIFrameWndEx::ActiveItemRecalcLayout
重新计算活动项的布局。
void ActiveItemRecalcLayout();
CMDIFrameWndEx::AddPane
向停靠管理器注册窗格。
BOOL AddPane(
CBasePane* pControlBar,
BOOL bTail=TRUE);
参数
pControlBar
[in] 指向要注册的窗格的指针。
bTail
[in] 指定是否将此窗格添加到列表的末尾。
返回值
如果成功地注册了窗格,返回非零值。 如果已向停靠管理器注册窗格,返回 0。
备注
必须先使用 CDockingManager
类注册每个窗格,然后它们才能加入停靠布局。 使用此方法通知停靠管理器你希望停靠特定的窗格。 注册该窗格后,停靠管理器根据自身维护的窗格列表中的对齐设置和位置对该窗格进行对齐。
CMDIFrameWndEx::AdjustClientArea
减少工作区以留出边框。
virtual void AdjustClientArea();
CMDIFrameWndEx::AdjustDockingLayout
重新计算所有停靠的窗格的布局。
virtual void AdjustDockingLayout(HDWP hdwp=NULL);
参数
hdwp
[in] 标识多窗口位置结构。 你可以通过调用来 BeginDeferWindowPos
获取此值。
备注
调用此成员函数来重新计算停靠到框架窗口的所有窗格的布局。
CMDIFrameWndEx::AreMDITabs
确定是否启用了 MDI 选项卡功能或 MDI 制表符分隔的组功能。
BOOL AreMDITabs(int* pnMDITabsType=NULL) const;
参数
pnMDITabsType
[out] 指向指示启用哪些功能的整数变量的指针:
- 0:启用了所有的功能。
- 1:启用了 MDI 选项卡。
- 2:启用了 MDI 制表符分隔的组。
返回值
如果启用了 MDI 选项卡或 MDI 制表符分隔的组,返回 TRUE
。
如果上述功能均未启用,返回 FALSE
。
备注
使用此函数来确定是否为框架窗口启用了 MDI 选项卡或 MDI 制表符分隔的组。 使用 CMDIFrameWndEx::EnableMDITabs
来启用或禁用 MDI 选项卡功能。
使用 CMDIFrameWndEx::EnableMDITabbedGroups
来启用或禁用 MDI 制表符分隔的组功能。
CMDIFrameWndEx::CanConvertControlBarToMDIChild
由框架调用,以确定框架窗口是否可将停靠窗格转换为选项卡式文档
virtual BOOL CanConvertControlBarToMDIChild();
返回值
如果框架窗口可将停靠窗格转换为选项卡式文档,返回 TRUE
;否则返回 FALSE
。
注解
在派生类中重写此方法并返回 TRUE
,以启用停靠窗格到选项卡式文档的转换。 或者,你可以将 CMDIFrameWndEx::m_bCanConvertControlBarToMDIChild
设置为 TRUE
。
CMDIFrameWndEx::ControlBarToTabbedDocument
将指定的停靠窗格转换为选项卡式文档。
virtual CMDIChildWndEx* ControlBarToTabbedDocument(CDockablePane* pBar);
参数
pBar
指向要转换的停靠窗格的指针。
返回值
返回指向包含停靠窗格的新 MDI 子窗口的指针。
备注
此方法将停靠窗格转换为选项卡式文档。 调用此方法时,框架创建 CMDIChildWndEx
类的对象,从停靠管理器中删除停靠窗格,并将停靠窗格添加到新的 MDI 子窗口。 MDI 子窗口重设停靠窗格的大小,使其覆盖整个工作区
CMDIFrameWndEx::CreateDocumentWindow
创建子文档窗口。
virtual CMDIChildWndEx* CreateDocumentWindow(
LPCTSTR lpcszDocName,
CObject* pObj);
参数
lpcszDocName
[in] 包含文档标识符的文本字符串。 通常为文档文件的完整路径。
pObj
[in] 指向用户定义的对象的指针。 例如,开发人员可以创建一个特定于应用程序的数据结构,该结构描述文档并说明如何在启动时初始化文档。
返回值
一个指向 CMDIChildWndEx
的指针。
注解
框架在加载以前保存在注册表中的文档的列表时,调用此方法。
重写此方法,以便在从注册表加载文档时创建文档。
示例
以下示例演示如何在 VisualStudioDemo 示例:MFC Visual Studio 应用程序中使用 CreateDocumentWindow
。
在此示例中,g_strStartViewName
可以是未从磁盘文件加载的“虚拟文档”的名称,例如“起始页”。 因此,我们需要对这种情况进行特殊处理。
CMainFrame::CMainFrame()
{
CMFCPopupMenu::SetForceShadow(TRUE);
m_bCanConvertControlBarToMDIChild = TRUE;
}
CMDIFrameWndEx::CreateNewWindow
由框架调用来创建新窗口。
virtual CMDIChildWndEx* CreateNewWindow(
LPCTSTR lpcszDocName,
CObject* pObj);
参数
lpcszDocName
[in] 文档名。
pObj
[in] 保留供将来使用。
返回值
指向新窗口的指针。
CMDIFrameWndEx::DockPane
将指定的窗格停靠到框架窗口。
void DockPane(
CBasePane* pBar,
UINT nDockBarID=0,
LPCRECT lpRect=NULL);
参数
pBar
[in] 指向要停靠的窗格的指针。
nDockBarID
[in] 指定要停靠到框架窗口的哪一侧。
lpRect
[in] 未使用。
备注
此方法将指定窗格停靠到调用 CBasePane::EnableDocking
和 CMDIFrameWndEx::EnableDocking
时指定的框架窗口的某一侧。
示例
下面的示例演示 DockPane
方法的用法。 此代码片段摘自 VisualStudioDemo 示例:MFC Visual Studio 应用程序。
DockPane(&m_wndMenuBar);
DockPane(&m_wndToolBar);
DockPane(&m_wndPropertiesBar);
DockPane(&m_wndToolbarBuild);
CMDIFrameWndEx::DockPaneLeftOf
将一个窗格停靠到另一个窗格的左侧。
BOOL DockPaneLeftOf(
CPane* pBar,
CPane* pLeftOf);
参数
pBar
[in] 指向停靠窗格的指针。
pLeftOf
[in] 指向充当停靠站点的窗格的指针。
返回值
如果操作成功,返回 TRUE
。 否则返回 FALSE
。
备注
调用此方法以预定义的顺序停靠多个窗格对象。 此方法将 pBar
指定的窗格停靠在 pLeftOf
指定的窗格的左侧。
示例
以下示例演示如何在 VisualStudioDemo 示例:MFC Visual Studio 应用程序中使用 DockPaneLeftOf
方法。
DockPane(&m_wndToolbarBuild);
DockPaneLeftOf(&m_wndToolbarEdit, &m_wndToolbarBuild);
CMDIFrameWndEx::EnableAutoHidePanes
窗格停靠在主框架窗口的指定侧时,启用窗格的自动隐藏模式。
BOOL EnableAutoHidePanes(DWORD dwDockStyle);
参数
dwDockStyle
[in] 指定将启用的主框架窗口的边侧。 使用以下一个或多个标志。
CBRS_ALIGN_LEFT
CBRS_ALIGN_RIGHT
CBRS_ALIGN_TOP
CBRS_ALIGN_BOTTOM
返回值
调用此函数,在窗格停靠在主框架窗口的指定侧时为窗格启用自动隐藏模式。
示例
以下示例演示如何在 VisualStudioDemo 示例:MFC Visual Studio 应用程序中使用 EnableAutoHidePanes
方法。
EnableAutoHidePanes(CBRS_ALIGN_ANY);
注解
CMDIFrameWndEx::EnableDocking
启用属于 MDI 框架窗口的窗格的停靠。
BOOL EnableDocking(DWORD dwDockStyle);
参数
dwDockStyle
[in] 指定要应用的停靠样式。
返回值
注解
调用此函数来启用属于 CMDIFrameWndEx
对象的窗格的停靠。
示例
以下示例演示如何在 VisualStudioDemo 示例:MFC Visual Studio 应用程序中使用 EnableDocking
方法。
EnableDocking(CBRS_ALIGN_ANY);
CMDIFrameWndEx::EnableFullScreenMainMenu
在全屏模式下显示或隐藏主菜单。
void EnableFullScreenMainMenu(BOOL bEnableMenu);
参数
bEnableMenu
[in] 如果为 TRUE
,以全屏模式显示主菜单;如果为 FALSE
,隐藏主菜单。
注解
CMDIFrameWndEx::EnableFullScreenMode
为框架窗口启用全屏模式。
void EnableFullScreenMode(UINT uiFullScreenCmd);
参数
uiFullScreenCmd
[in] 启用或禁用全屏模式的命令的 ID。
注解
在全屏模式下,所有停靠的控件条、工具栏和菜单都将隐藏,并且活动视图的大小将调整为占用全屏。 启用全屏模式时,必须指定启用或禁用全屏模式的命令的 ID。 可以从主框架的 OnCreate
函数调用 EnableFullScreenMode
。 当框架窗口切换到全屏模式时,框架将创建一个浮动工具栏,其中包含一个具有指定命令 ID 的按钮。 如果要在屏幕上保留主菜单,请调用 CMDIFrameWndEx::EnableFullScreenMainMenu
。
CMDIFrameWndEx::EnableLoadDockState
启用或禁用停靠状态加载。
void EnableLoadDockState(BOOL bEnable = TRUE);
参数
bEnable
[in] 如果为 TRUE
,则启用停靠状态加载,如果为 FALSE
,则禁用停靠状态加载。
备注
CMDIFrameWndEx::EnableMDITabbedGroups
启用或禁用框架窗口的 MDI 制表符分隔的组功能。
void EnableMDITabbedGroups(
BOOL bEnable,
const CMDITabInfo& params);
参数
bEnable
[in] 如果为 TRUE
,表示已启用 MDI 的“制表符分隔的组”功能;如果为 FALSE
,表示已禁用该功能。
params
[in] 指定框架向在 MDI 工作区中创建的子窗口应用的参数。
备注
使用此方法来启用或禁用 MDI 的“制表符分隔的组”功能。 此功能使 MDI 应用程序能够将子窗口显示为在 MDI 工作区中垂直对齐或水平对齐的选项卡式窗口。 将用拆分器分隔选项卡式窗口组。 用户可使用拆分器重设制表符分隔的组的大小。
用户可以:
- 在各组之间拖动各个选项卡。
- 将各个选项卡拖到窗口边缘以创建新组。
- 使用快捷菜单移动选项卡或创建新组。
- 应用程序可以保存选项卡式窗口的当前布局和当前打开的文档的列表。
如果在 bEnable
设置为 FALSE
的情况下调用此方法,系统会忽略 params
。
即使已启用 MDI 制表符分隔的组,你也可以再次调用此方法来修改子窗口的设置。 在 bEnable
设置为 TRUE
的情况下调用此方法,并修改 params
指定的 CMDITabInfo
对象的成员。
有关如何使用 MDI 制表符分隔的组的详细信息,请参阅 MDI 制表符分隔的组。
示例
以下示例演示如何在 VisualStudioDemo 示例:MFC Visual Studio 应用程序中使用 EnableMDITabbedGroups
。
CMDITabInfo mdiTabParams;
mdiTabParams.m_bTabCustomTooltips = TRUE;
if (bMDITabsVS2005Look)
{
mdiTabParams.m_style = CMFCTabCtrl::STYLE_3D_VS2005;
mdiTabParams.m_bDocumentMenu = TRUE;
}
else if (bOneNoteTabs)
{
mdiTabParams.m_style = CMFCTabCtrl::STYLE_3D_ONENOTE;
mdiTabParams.m_bAutoColor = bMDITabColors;
}
if (bActiveTabCloseButton)
{
mdiTabParams.m_bTabCloseButton = FALSE;
mdiTabParams.m_bActiveTabCloseButton = TRUE;
}
EnableMDITabbedGroups(TRUE, mdiTabParams);
CMDIFrameWndEx::EnableMDITabs
启用或禁用 MDI 框架窗口的 MDI 选项卡功能。 启用后,框架窗口显示每个 MDI 子窗口的选项卡。
void EnableMDITabs(
BOOL bEnable=TRUE,
BOOL bIcons=TRUE,
CMFCTabCtrl::Location tabLocation=CMFCTabCtrl::LOCATION_BOTTOM,
BOOL bTabCloseButton=FALSE,
CMFCTabCtrl::Style style=CMFCTabCtrl::STYLE_3D_SCROLLED,
BOOL bTabCustomTooltips=FALSE,
BOOL bActiveTabCloseButton=FALSE);
参数
bEnable
指定是否启用了选项卡。
bIcons
指定是否应在选项卡上显示图标。
tabLocation
指定选项卡标签的位置。
bTabCloseButton
指定是否显示选项卡的关闭按钮。
style
指定选项卡的样式。 对常规选项卡使用 STYLE_3D_SCROLLED
,对 Microsoft OneNote 选项卡使用 STYLE_3D_ONENOTE
。
bTabCustomTooltips
指定是否启用自定义工具提示。
bActiveTabCloseButton
如果为 TRUE
,将在活动选项卡上(而不是在选项卡区域的右侧角落)显示“关闭”按钮。
备注
调用此方法可启用或禁用 MDI 框架窗口的 MDI 选项卡功能。 启用后,所有子窗口均显示为选项卡。
选项卡标签可位于框架的顶部或底部,具体取决于 tabLocation
参数的设置。 你可以指定 CMFCTabCtrl::LOCATION_BOTTOM
(默认设置)或 CMFCTabCtrl::LOCATION_TOP
。
如果 bTabCustomTooltips
为 TRUE
,系统将向主框架窗口发送 AFX_WM_ON_GET_TAB_TOOLTIP
消息。 你的代码可以处理此消息,并向框架提供 MDI 选项卡的自定义工具提示。
示例
以下示例演示如何在 MDITabsDemo 示例:MFC 选项卡式 MDI 应用程序中使用 EnableMDITabs
。
void CMainFrame::UpdateMDITabs(BOOL bResetMDIChild)
{
CMDITabInfo params;
HWND hwndActive = NULL;
switch (theApp.m_Options.m_nMDITabsType)
{
case CMDITabOptions::None:
{
BOOL bCascadeMDIChild = FALSE;
if (IsMDITabbedGroup())
{
EnableMDITabbedGroups(FALSE, params);
bCascadeMDIChild = TRUE;
}
else if (AreMDITabs())
{
EnableMDITabs(FALSE);
bCascadeMDIChild = TRUE;
}
if (bCascadeMDIChild)
{
// CMDIClientAreaWnd m_wndClientArea
hwndActive = (HWND)m_wndClientArea.SendMessage(WM_MDIGETACTIVE);
m_wndClientArea.PostMessage(WM_MDICASCADE);
m_wndClientArea.UpdateTabs(false);
m_wndClientArea.SetActiveTab(hwndActive);
::BringWindowToTop(hwndActive);
}
}
break;
case CMDITabOptions::MDITabsStandard:
hwndActive = (HWND)m_wndClientArea.SendMessage(WM_MDIGETACTIVE);
m_wndClientArea.PostMessage(WM_MDIMAXIMIZE, LPARAM(hwndActive), 0L);
::BringWindowToTop(hwndActive);
EnableMDITabs(TRUE, theApp.m_Options.m_bMDITabsIcons, theApp.m_Options.m_bTabsOnTop ? CMFCTabCtrl::LOCATION_TOP : CMFCTabCtrl::LOCATION_BOTTOM, theApp.m_Options.m_nTabsStyle);
GetMDITabs().EnableAutoColor(theApp.m_Options.m_bTabsAutoColor);
GetMDITabs().EnableTabDocumentsMenu(theApp.m_Options.m_bMDITabsDocMenu);
GetMDITabs().EnableTabSwap(theApp.m_Options.m_bDragMDITabs);
GetMDITabs().SetTabBorderSize(theApp.m_Options.m_nMDITabsBorderSize);
GetMDITabs().SetFlatFrame(theApp.m_Options.m_bFlatFrame);
GetMDITabs().EnableCustomToolTips(theApp.m_Options.m_bCustomTooltips);
GetMDITabs().EnableCustomToolTips(theApp.m_Options.m_bCustomTooltips);
GetMDITabs().EnableActiveTabCloseButton(theApp.m_Options.m_bActiveTabCloseButton);
break;
CMDIFrameWndEx::EnableMDITabsLastActiveActivation
指定用户关闭当前选项卡时,是否应打开最后一个活动的选项卡。
void EnableMDITabsLastActiveActivation(BOOL bLastActiveTab=TRUE);
参数
bLastActiveTab
[in] 如果为 TRUE
,启用最后一个活动选项卡的激活。如果为 FALSE
,禁用最后一个活动选项卡的激活。
注解
活动选项卡处于关闭状态时,可通过两种方式打开选项卡:
- 激活下一个选项卡。
- 激活以前处于活动状态的选项卡。
默认实现使用第一种方式。
使用 EnableMDITabsLastActiveActivation
来启用第二种选项卡激活方式。 它模拟 Windows 打开 MDI 子窗口的方式。
CMDIFrameWndEx::EnablePaneMenu
启用或禁用弹出窗格菜单的自动创建和管理,该菜单显示一个应用程序窗格列表。
void EnablePaneMenu(
BOOL bEnable,
UINT uiCustomizeCmd,
const CString& strCustomizeLabel,
UINT uiViewToolbarsMenuEntryID,
BOOL bContextMenuShowsToolbarsOnly=FALSE,
BOOL bViewMenuShowsToolbarsOnly=FALSE);
参数
bEnable
[in] 如果为 TRUE
,表示启用了窗格菜单的自动处理;如果为 FALSE
,表示禁用了自动处理。
uiCustomizeCmd
[in] “自定义”菜单项的命令 ID。 通常是将此菜单项添加到窗格列表的末尾。
strCustomizeLabel
[in] 要为“自定义”菜单项(用于本地化)显示的文本。
uiViewToolbarsMenuEntryID
[in] 指定打开窗格菜单的工具栏菜单项的 ID。 这通常是“视图”菜单的“工具栏”子菜单。
bContextMenuShowsToolbarsOnly
[in] 如果为 TRUE
,窗格菜单仅显示工具栏列表。 如果为 FALSE
,该菜单将显示工具栏和停靠条的列表。
bViewMenuShowsToolbarsOnly
[in] 如果为 TRUE
,窗格菜单仅显示工具栏列表。 如果为 FALSE
,该菜单将显示工具栏和停靠条的列表。
备注
弹出式窗格菜单显示应用程序窗格列表,并让用户显示或隐藏各个窗格。
示例
以下示例演示如何在 VisualStudioDemo 示例:MFC Visual Studio 应用程序中使用 EnablePaneMenu
。
// Enable pane context menu(list of bars + customize command):
EnablePaneMenu(TRUE, ID_VIEW_CUSTOMIZE, _T("Customize..."), ID_VIEW_TOOLBARS, FALSE, TRUE);
CMDIFrameWndEx::EnableWindowsDialog
插入命令 ID 调用 CMFCWindowsManagerDialog
对话框的菜单项。
void EnableWindowsDialog(
UINT uiMenuId,
LPCTSTR lpszMenuText,
BOOL bShowAllways=FALSE,
BOOL bShowHelpButton=FALSE);
void EnableWindowsDialog(
UINT uiMenuId,
UINT uiMenuTextResId,
BOOL bShowAllways=FALSE,
BOOL bShowHelpButton=FALSE);
参数
uiMenuId
[in] 指定菜单的资源 ID。
lpszMenuText
[in] 指定项的文本。
bShowHelpButton
[in] 指定是否在 Windows 管理对话框中显示“帮助”按钮。
uiMenuTextResId
[in] 包含项的文本字符串的字符串资源标识符。
备注
使用此方法插入一个菜单项,该菜单项的命令调用 MDI 子窗口管理对话框(CMFCWindowsManagerDialog
类)。 新项插入到 uiMenuId
指定的菜单中。 处理 WM_CREATE
消息时调用 EnableWindowsDialog
。
示例
以下示例演示如何在 VisualStudioDemo 示例:MFC Visual Studio 应用程序中使用 EnableWindowsDialog
。
// Enable windows manager:
EnableWindowsDialog(ID_WINDOW_MANAGER, _T("Windows..."), TRUE);
CMDIFrameWndEx::GetActivePopup
返回一个指向当前显示的弹出菜单的指针。
CMFCPopupMenu* GetActivePopup() const;
返回值
指向活动的弹出菜单的指针;如果没有弹出菜单处于活动状态,则为 NULL
。
备注
使用此函数获取指向当前显示的 CMFCPopupMenu
类对象的指针。
CMDIFrameWndEx::GetDefaultResId
返回 MDI 框架窗口的共享资源的 ID。
UINT GetDefaultResId() const;
返回值
资源 ID 值。 如果框架窗口没有菜单栏,则为 0。
备注
此方法返回 CFrameWnd::LoadFrame
加载 MDI 框架窗口时指定的资源 ID。
CMDIFrameWndEx::GetMDITabGroups
返回 MDI 选项卡式窗口的列表。
const CObList& GetMDITabGroups() const;
返回值
对包含选项卡式窗口列表的 CObList
类对象的引用。 请勿存储或修改该列表。
注解
使用此方法来访问选项卡式窗口的列表。 如果要更改或查询各个选项卡式窗口的一些参数,这非常有用。
CMDIFrameWndEx::GetMDITabs
返回对带下划线的选项卡式窗口的引用。
CMFCTabCtrl& GetMDITabs();
返回值
对带下划线的选项卡式窗口的引用。
CMDIFrameWndEx::GetMDITabsContextMenuAllowedItems
返回标志的组合,该组合确定启用了 MDI“制表符分隔的组”功能时哪些操作有效。
DWORD GetMDITabsContextMenuAllowedItems();
返回值
以下标志的按位“或”(|
) 组合:
AFX_MDI_CREATE_VERT_GROUP
- 可以创建垂直的选项卡组。AFX_MDI_CREATE_HORZ_GROUP
- 可以创建水平的选项卡组。AFX_MDI_CAN_MOVE_PREV
- 可以将选项卡移到上一个选项卡组。AFX_MDI_CAN_MOVE_NEXT
- 可以将选项卡移到下一个选项卡组。
注解
启用 MDI 的“制表符分隔的组”功能后,你必须知道在特定窗口的选项卡上允许执行的操作。 此方法分析选项卡式窗口的当前布局,并返回可用于生成的标志组合,例如快捷菜单。
所有选项卡式窗口垂直对齐或只有一个选项卡式窗口时,你可以创建一个新的垂直选项卡组。
所有选项卡式窗口水平对齐或只有一个选项卡式窗口时,你可以创建一个新的水平选项卡组。
仅在选项卡式窗口中有多个选项卡时,才能将选项卡移到上一个组。
仅在选项卡式窗口中有多个选项卡时,才能将选项卡移到下一个组。
CMDIFrameWndEx::GetMenuBar
返回一个指向附加到框架窗口的菜单栏对象的指针。
const CMFCMenuBar* GetMenuBar() const;
返回值
指向菜单栏对象的指针。
CMDIFrameWndEx::GetPane
返回一个指向具有指定控件 ID 的窗格的指针。
CBasePane* GetPane(UINT nID);
参数
nID
[in] 控件 ID。
返回值
指向具有指定控件 ID 的窗格的指针(如果有这样的窗格)。 否则为 NULL
。
CMDIFrameWndEx::GetRibbonBar
检索框架的功能区栏控件。
CMFCRibbonBar* GetRibbonBar();
返回值
指向框架的 CMFCRibbonBar
类的指针。
备注
CMDIFrameWndEx::GetTearOffBars
返回可拖曳菜单的列表。
const CObList& GetTearOffBars() const;
返回值
对 CObList
类对象的引用,该对象包含指向处于拖曳状态的 CPane
派生对象的指针集合。
备注
CMDIFrameWndEx
维护可拖曳菜单的集合。 使用此方法可检索对此列表的引用。
CMDIFrameWndEx::GetToolbarButtonToolTipText
当应用程序显示工具栏按钮的工具提示时由框架调用。
virtual BOOL GetToolbarButtonToolTipText(
CMFCToolBarButton* pButton,
CString& strTTText);
参数
pButton
[in] 指向工具栏按钮的指针。
strTTText
[in] 要为按钮显示的工具提示文本。
返回值
如果已显示工具提示,则返回 TRUE
。 否则为 FALSE
。
注解
CMDIFrameWndEx::InsertPane
向停靠管理器注册指定的窗格。
BOOL InsertPane(
CBasePane* pControlBar,
CBasePane* pTarget,
BOOL bAfter=TRUE);
参数
pControlBar
[in] 指向要插入的窗格的指针。
pTarget
[in] 指向窗格的指针,在其前面或后面插入窗格。
bAfter
[in] 如果为 TRUE
,在 pTarget
后面插入 pControlBar
。 如果为 FALSE
,在 pTarget
前面插入 pControlBar
。
返回值
如果方法成功注册窗格,返回 TRUE
;如果已向停靠管理器注册了窗格,返回 FALSE
。
备注
使用此方法告诉停靠管理器由 pControlBar
指定的窗格。 停靠管理器将根据其内部列表中窗格的对齐方式和位置来对齐此窗格。
CMDIFrameWndEx::IsFullScreen
确定框架窗口是否处于全屏模式。
BOOL IsFullScreen() const;
返回值
如果框架窗口处于全屏模式,则为 TRUE
;否则为 FALSE
。
备注
可以通过调用 CMDIFrameWndEx::EnableFullScreenMode
方法来设置全屏模式。
CMDIFrameWndEx::IsMDITabbedGroup
指定是否启用了 MDI“制表符分隔的组”功能。
BOOL IsMDITabbedGroup() const;
返回值
如果启用了 MDI“制表符分隔的组”功能,返回 TRUE
;否则返回 FALSE
。
备注
要确定是否启用了常规 MDI 选项卡或 MDI“制表符分隔的组”功能,请使用 CMDIFrameWndEx::AreMDITabs
。
CMDIFrameWndEx::IsMemberOfMDITabGroup
确定指定的选项卡式窗口是否在 MDI 制表符分隔的组中的窗口列表中。
BOOL IsMemberOfMDITabGroup(CWnd* pWnd);
参数
pWnd
[in] 指向选项卡式窗口的指针。
返回值
如果指定的选项卡式窗口位于构成 MDI 制表符分隔的组的选项卡式窗口列表中,返回 TRUE
。 否则为 FALSE
。
CMDIFrameWndEx::IsMenuBarAvailable
确定框架窗口是否有菜单栏。
BOOL IsMenuBarAvailable() const;
返回值
如果指向菜单栏对象的指针不是 NULL
,返回 TRUE
;否则返回 FALSE
。
CMDIFrameWndEx::IsPointNearDockSite
确定指定点是否位于停靠站点附近。
BOOL IsPointNearDockSite(
CPoint point,
DWORD& dwBarAlignment,
BOOL& bOuterEdge) const;
参数
point
[in] 屏幕坐标中的指定点。
dwBarAlignment
[in] 指定点靠近的边缘。 可能的值为 CBRS_ALIGN_LEFT
、CBRS_ALIGN_RIGHT
、CBRS_ALIGN_TOP
和 CBRS_ALIGN_BOTTOM
bOuterEdge
[in] 如果点靠近停靠站点的外部边框,为 TRUE
;否则为 FALSE
。
返回值
如果点靠近停靠站点,为 TRUE
;否则为 FALSE
。
注解
当该点在停靠管理器中设置的敏感度范围内时,该点靠近停靠站点。 默认敏感度为 15 像素。
CMDIFrameWndEx::IsPrintPreview
确定框架窗口是否处于打印预览模式。
BOOL IsPrintPreview();
返回值
如果框架窗口处于打印预览模式,则为 TRUE
;否则为 FALSE
。
注解
CMDIFrameWndEx::LoadFrame
从资源信息创建框架窗口。
virtual BOOL LoadFrame(
UINT nIDResource,
DWORD dwDefaultStyle = WS_OVERLAPPEDWINDOW | FWS_ADDTOTITLE,
CWnd* pParentWnd = NULL,
CCreateContext* pContext = NULL);
参数
nIDResource
[in] 与框架窗口关联的共享资源的 ID。
dwDefaultStyle
[in] 框架窗口的样式。
pParentWnd
[in] 指向框架的父级的指针。
pContext
[in] 指向 CCreateContext
结构的指针。 此参数可以为 NULL
。
返回值
如果该方法成功,返回 TRUE
;否则返回 FALSE
。
CMDIFrameWndEx::LoadMDIState
加载 MDI 制表符分隔的组的指定布局和以前打开的文档的列表。
virtual BOOL LoadMDIState(LPCTSTR lpszProfileName);
参数
lpszProfileName
[in] 指定配置文件名称。
返回值
如果加载成功,返回 TRUE
;如果加载失败或没有数据要加载,返回 FALSE
。
备注
要加载或保存 MDI 选项卡和组的状态以及打开的文档的列表,请执行以下操作:
- 关闭主框架时,调用
CMDIFrameWndEx::SaveMDIState
- 创建主框架时,调用
CMDIFrameWndEx::LoadMDIState
。 建议将此调用放在首次显示主框架之前。 在调用后添加以在注册表中存储的位置显示主帧之前添加CWinAppEx::EnableLoadWindowPlacement
(pMainFrame);
(FALSE);
CWinAppEx::ReloadWindowPlacement
。pMainFrame->LoadFrame (IDR_MAINFRAME);.
LoadMDIState
- 如果应用程序显示未作为文件存储的文档,请在
CMDIChildWndEx
派生类中重写GetDocumentName
。 系统会将返回的字符串作为文档标识符保存在注册表中。CMDIChildWndEx::GetDocumentName
的基实现返回从CDocument::GetPathName
获取的值。 - 重写
CMDIFrameWndEx::CreateDocumentWindow
,以便在从注册表加载文档时正确创建文档。 第一个参数是GetDocumentName
返回的字符串。
示例
以下示例演示如何在 VisualStudioDemo 示例:MFC Visual Studio 应用程序中使用 LoadMDIState
。
// Parse command line for standard shell commands, DDE, file open
CCommandLineInfo cmdInfo;
ParseCommandLine(cmdInfo);
if (cmdInfo.m_nShellCommand == CCommandLineInfo::FileNew)
{
if (!pMainFrame->LoadMDIState(GetRegSectionPath()))
{
m_pStartDocTemplate->OpenDocumentFile(NULL);
}
}
else
{
// Dispatch commands specified on the command line
if (!ProcessShellCommand(cmdInfo))
{
return FALSE;
}
}
CMDIFrameWndEx::MDITabMoveToNextGroup
将当前活动的选项卡式窗口中的活动选项卡移动到下一个或上一个制表符分隔的组。
void MDITabMoveToNextGroup(BOOL bNext=TRUE);
参数
bNext
[in] 如果为 TRUE
,将选项卡移到下一个制表符分隔的组。 如果为 FALSE
,则将其移到上一个制表符分隔的组。
CMDIFrameWndEx::MDITabNewGroup
创建具有一个窗口的新的制表符分隔的组。
void MDITabNewGroup(BOOL bVert=TRUE);
参数
bVert
[in] 指定新组的对齐方式。 如果为 TRUE
,新组垂直对齐。 如果为 FALSE
,新组水平对齐。
注解
使用此函数创建一个新的选项卡式窗口(新的制表符分隔的组)并向它添加第一个选项卡。
示例
以下示例演示如何在 VisualStudioDemo 示例:MFC Visual Studio 应用程序中使用 MDITabNewGroup
。
void CMainFrame::OnMdiNewHorzTabGroup()
{
MDITabNewGroup(FALSE);
}
CMDIFrameWndEx::m_bCanConvertControlBarToMDIChild
指定是否可将停靠窗格转换为 MDI 子窗口。
BOOL m_bCanConvertControlBarToMDIChild;
注解
指示是否可将停靠控件条转换为 MDI 子窗口。 如果此标志为 TRUE
,框架在用户选择“选项卡式文档”命令时自动处理转换。 该标志受保护,你必须通过以下两种方式显式地启用此选项:在 CMDIFrameWndEx
派生类的构造函数中设置 m_bCanConvertControlBarToMDIChild
,或重写 CanConvertControlBarToMDIChild
。
默认值是 FALSE
。
示例
以下示例演示如何在 VisualStudioDemo 示例:MFC Visual Studio 应用程序中使用 m_bCanConvertControlBarToMDIChild
。
CMainFrame::CMainFrame()
{
CMFCPopupMenu::SetForceShadow(TRUE);
m_bCanConvertControlBarToMDIChild = TRUE;
}
CMDIFrameWndEx::m_bDisableSetRedraw
启用或禁用 MDI 子窗口的重绘优化。
AFX_IMPORT_DATA static BOOL m_bDisableSetRedraw;
注解
默认值为 TRUE
。
如果要优化 MDI 子级的重绘,请将此标志设置为 FALSE
。 在这种情况下,当应用程序正在更改活动选项卡时,框架将为主框架调用 SetRedraw (FALSE)
。
此标志可能会产生不需要的效果(例如背景应用程序变得可见)。 因此,我们建议你仅在 MDI 选项卡激活期间遇到明显的闪烁时更改默认值。
CMDIFrameWndEx::NegotiateBorderSpace
在 OLE 就地激活期间协商框架窗口中的边框空间。
virtual BOOL NegotiateBorderSpace(
UINT nBorderCmd,
LPRECT lpRectBorder);
参数
nBorderCmd
[in] 包含 CFrameWnd::BorderCmd
枚举中的以下值之一:
borderGet
= 1borderRequest
= 2borderSet
= 3
lpRectBorder
[in, out] 指向 RECT
结构或 CRect
类对象的指针,该对象指定边框坐标。
返回值
如果此方法成功,则返回非零值;否则返回 0。
备注
此方法实现 OLE 边界空间协商。
CMDIFrameWndEx::OnCloseDockingPane
用户单击可停靠的窗格上的“关闭”按钮时由框架调用。
virtual BOOL OnCloseDockingPane(CDockablePane* pWnd);
参数
pWnd
[in] 指向正在关闭的窗格的指针。
返回值
如果可以关闭停靠窗格,为 TRUE
。 否则为 FALSE
。
备注
重写此方法以处理停靠窗格的隐藏。 如果要阻止隐藏停靠窗格,返回 FALSE
。
默认实现不执行任何操作并返回 TRUE
。
CMDIFrameWndEx::OnCloseMiniFrame
当用户单击浮动微型框窗口上的“关闭”按钮时由框架调用。
virtual BOOL OnCloseMiniFrame(CPaneFrameWnd*);
参数
pWnd
[in] 指向正在关闭的微型框窗口的指针。
返回值
如果可以关闭浮动微型框窗口,为 TRUE
。 否则为 FALSE
。
备注
重写此方法以处理浮动微型框窗口的隐藏。 如果要阻止隐藏浮动微型框窗口,返回 FALSE
。
默认实现不执行任何操作并返回 TRUE
。
CMDIFrameWndEx::OnClosePopupMenu
当活动弹出菜单处理 WM_DESTROY
消息时由框架调用。
virtual void OnClosePopupMenu(CMFCPopupMenu* pMenuPopup);
参数
pMenuPopup
[in] 指向弹出菜单的指针。
备注
如果希望在属于 MDI 框架窗口的 CMFCPopupMenu
类对象处理 WM_DESTROY
消息时处理来自这些对象的通知,请重写此方法。
CMDIFrameWndEx::OnCmdMsg
由框架调用以路由和调度命令消息并更新命令用户界面对象。
virtual BOOL OnCmdMsg(
UINT nID,
int nCode,
void* pExtra,
AFX_CMDHANDLERINFO* pHandlerInfo);
参数
nID
[in] 命令 ID。
nCode
[in] 标识命令通知代码。 有关 CCmdTarget::OnCmdMsg
的值的详细信息,请参阅 nCode
。
pExtra
[in] 根据 nCode
的值使用。 有关 pExtra
的更多信息,请参见CCmdTarget::OnCmdMsg
。
pHandlerInfo
[in, out] 通常此参数应为 NULL
。 如果不为 NULL
,则 OnCmdMsg
填充 pHandlerInfo
结构的 pTarget
和 pmf
成员,而不是调度命令。
返回值
如果消息已处理,则为非零值;否则为 0。
CMDIFrameWndEx::OnDrawMenuImage
当绘制与菜单项关联的图像时由框架调用。
virtual BOOL OnDrawMenuImage(
CDC* pDC,
const CMFCToolBarMenuButton* pMenuButton,
const CRect& rectImage);
参数
pDC
[in] 指向设备上下文的指针。
pMenuButton
[in] 指向菜单按钮的指针。
rectImage
[in] 图像的边框。
返回值
如果方法绘制图像,返回 TRUE
。 默认实现返回 FALSE
。
注解
如果要为属于 CMDIFrameWndEx
派生对象拥有的菜单栏的菜单项自定义图像呈现,请重写此方法。 默认实现不执行任何操作。
CMDIFrameWndEx::OnDrawMenuLogo
当 CMFCPopupMenu
处理 WM_PAINT
消息时由框架调用。
virtual void OnDrawMenuLogo(
CDC*,
CMFCPopupMenu*,
const CRect&);
注解
重写此函数,以便在属于 CMDIFrameWndEx
派生对象拥有的菜单栏的弹出菜单上显示徽标。 默认实现不执行任何操作。
CMDIFrameWndEx::OnEraseMDIClientBackground
当 MDI 框架窗口处理 WM_ERASEBKGND
消息时由框架调用。
virtual BOOL OnEraseMDIClientBackground(CDC*);
返回值
如果应用程序处理消息并擦除背景,返回 TRUE
。
注解
如果要处理 CMDIFrameWndEx
派生类中的 WM_ERASEBKGND
消息,请重写此成员函数。
CMDIFrameWndEx::OnMenuButtonToolHitTest
当 CMFCToolBarButton
对象处理 WM_NCHITTEST
消息时由框架调用。
virtual BOOL OnMenuButtonToolHitTest(
CMFCToolBarButton* pButton,
TOOLINFO* pTI);
参数
pButton
[in] 工具栏按钮。
pTI
[out] 指向 TOOLINFO
结构的指针。
返回值
如果应用程序填充 pTI
参数,则为 TRUE
。 默认实现返回 FALSE
。
注解
如果要提供有关工具提示的特定菜单项的信息,请重写此方法。 默认实现不执行任何操作。
CMDIFrameWndEx::OnMoveMiniFrame
由框架调用以移动微型框窗口。
virtual BOOL OnMoveMiniFrame(CWnd* pFrame);
参数
pFrame
[in] 指向微型框窗口的指针。
返回值
如果该方法成功,返回 TRUE
;否则返回 FALSE
。
CMDIFrameWndEx::OnSetPreviewMode
设置应用程序的主框架窗口的打印预览模式。
virtual void OnSetPreviewMode(
BOOL bPreview,
CPrintPreviewState* pState);
参数
bPreview
[in] 如果为 TRUE
,设置打印预览模式。 如果为 FALSE
,取消预览模式。
pState
[in] 指向 CPrintPreviewState
结构的指针。
备注
此方法重写 CFrameWnd::OnSetPreviewMode
。
CMDIFrameWndEx::OnShowCustomizePane
激活了“快速自定义”窗格时由框架调用。
virtual BOOL OnShowCustomizePane(
CMFCPopupMenu* pMenuPane,
UINT uiToolbarID);
参数
pMenuPane
[in] 指向“快速自定义”窗格的指针。
uiToolbarID
[in] 要自定义的工具栏的控件 ID。
返回值
此方法始终返回 TRUE
。
备注
“快速自定义”窗格是用户单击工具栏上的“自定义”时打开的菜单。
在派生类中重写此方法,以在“快速自定义”窗格中做出更改。
CMDIFrameWndEx::OnShowMDITabContextMenu
在快捷菜单显示在某一个选项卡上之前,由框架调用。 仅对 MDI 制表符分隔的组有效。
virtual BOOL OnShowMDITabContextMenu(
CPoint point,
DWORD dwAllowedItems,
BOOL bTabDrop);
参数
point
[in] 菜单在屏幕坐标中的位置。
dwAllowedItems
[in] 标志的按位“或”(|
) 组合,指示允许当前选项卡执行的操作:
AFX_MDI_CREATE_VERT_GROUP
- 可以创建垂直的选项卡组。AFX_MDI_CREATE_HORZ_GROUP
- 可以创建水平的选项卡组。AFX_MDI_CAN_MOVE_PREV
- 可以将选项卡移到上一个选项卡组。AFX_MDI_CAN_MOVE_NEXT
- 可以将选项卡移到下一个选项卡组。AFX_MDI_CAN_BE_DOCKED
- 将选项卡式文档切换为停靠状态(仅与选项卡式文档相关)。
bTabDrop
[in] 如果是将选项卡拖到另一个制表符分隔的组后显示菜单,为 TRUE
。 如果是将菜单作为当前活动的选项卡上的快捷菜单显示,则为 FALSE
。
返回值
在 CMDIFrameWndEx
派生类中重写此方法。
备注
如果不处理 OnShowMDITabContextMenu
,则不会显示快捷菜单。 此函数是在启用 MDI“制表符分隔的组”功能时,由 MFC 应用程序向导生成的。
示例
以下示例演示如何在 VisualStudioDemo 示例:MFC Visual Studio 应用程序中使用 OnShowMDITabContextMenu
。
BOOL CMainFrame::OnShowMDITabContextMenu(CPoint point, DWORD dwAllowedItems, BOOL bDrop)
{
CMenu menu;
VERIFY(menu.LoadMenu(bDrop ? IDR_POPUP_DROP_MDITABS : IDR_POPUP_MDITABS));
CMenu* pPopup = menu.GetSubMenu(0);
ASSERT(pPopup != NULL);
if ((dwAllowedItems & AFX_MDI_CREATE_HORZ_GROUP) == 0)
{
pPopup->DeleteMenu(ID_MDI_NEW_HORZ_TAB_GROUP, MF_BYCOMMAND);
}
if ((dwAllowedItems & AFX_MDI_CREATE_VERT_GROUP) == 0)
{
pPopup->DeleteMenu(ID_MDI_NEW_VERT_GROUP, MF_BYCOMMAND);
}
if ((dwAllowedItems & AFX_MDI_CAN_MOVE_NEXT) == 0)
{
pPopup->DeleteMenu(ID_MDI_MOVE_TO_NEXT_GROUP, MF_BYCOMMAND);
}
if ((dwAllowedItems & AFX_MDI_CAN_MOVE_PREV) == 0)
{
pPopup->DeleteMenu(ID_MDI_MOVE_TO_PREV_GROUP, MF_BYCOMMAND);
}
if ((dwAllowedItems & AFX_MDI_CAN_BE_DOCKED) == 0)
{
pPopup->DeleteMenu(ID_MDI_TABBED_DOCUMENT, MF_BYCOMMAND);
}
CMFCPopupMenu* pPopupMenu = new CMFCPopupMenu;
pPopupMenu->SetAutoDestroy(FALSE);
pPopupMenu->Create(this, point.x, point.y, pPopup->GetSafeHmenu());
return TRUE;
}
CMDIFrameWndEx::OnShowPanes
由框架调用以显示或隐藏窗格。
virtual BOOL OnShowPanes(BOOL bShow);
参数
bShow
[in] 要显示窗格,为 TRUE
;要隐藏窗格,为 FALSE
。
返回值
如果窗格的状态因调用此方法更改,返回 TRUE
;如果窗格已处于 bShow
指定的状态,返回 FALSE
。 例如,如果窗格处于隐藏状态并且 bShow
为 FALSE
,则返回值为 FALSE
。
备注
默认实现从顶级框架窗口中删除工具栏。
如果 CDockingManager::m_bHideDockingBarsInContainerMode
为 TRUE
(默认值),系统将隐藏所有停靠窗格。
CMDIFrameWndEx::OnShowPopupMenu
打开弹出菜单时由框架调用。
virtual BOOL OnShowPopupMenu(CMFCPopupMenu*);
返回值
如果要显示弹出菜单,返回 TRUE
。 否则为 FALSE
。 默认实现返回 TRUE
。
备注
如果要在激活弹出菜单时实现特殊处理,请重写此方法。 例如,如果要将常规菜单项更改为颜色菜单按钮,请设置拖曳栏等。
默认实现不执行任何操作。
CMDIFrameWndEx::OnSizeMDIClient
客户端 MDI 窗口的大小发生更改时,由框架调用。
virtual void OnSizeMDIClient(
const CRect& rectOld,
const CRect& rectNew);
参数
rectOld
[in] MDI 客户端窗口的当前大小。
rectNew
[in] MDI 客户端窗口的新大小。
备注
CMDIFrameWndEx::OnTearOffMenu
当激活带有拖曳栏的菜单时由框架调用。
virtual BOOL OnTearOffMenu(
CMFCPopupMenu* pMenuPopup,
CPane* pBar);
参数
pMenuPopup
[in] 指向弹出菜单的指针。
pBar
[in] 指向拖曳栏的指针。
返回值
要使带有拖曳栏的弹出菜单可激活,返回 TRUE
;否则返回 FALSE
。 默认值为 TRUE
。
备注
如果要为拖曳栏实现特殊设置,请重写此函数。 默认实现不执行任何操作。
CMDIFrameWndEx::OnUpdateFrameMenu
由框架调用以更新框架菜单。
virtual void OnUpdateFrameMenu(HMENU hMenuAlt);
参数
hMenuAlt
[in] 菜单的句柄。
CMDIFrameWndEx::PaneFromPoint
返回包含指定点的停靠窗格。
CBasePane* PaneFromPoint(
CPoint point,
int nSensitivity,
bool bExactBar,
CRuntimeClass* pRTCBarType) const;
CBasePane* PaneFromPoint(
CPoint point,
int nSensitivity,
DWORD& dwAlignment,
CRuntimeClass* pRTCBarType) const;
参数
point
[in] 点(以屏幕坐标表示)。
nSensitivity
[in] 每个选中的窗格的窗口矩形通过此值在所有方向上放大。
bExactBar
[in] 如果为 TRUE
忽略 nSensitivity
参数。
pRTCBarType
[in] 如果不是 NULL
,该方法仅循环访问指定类型的窗格。
dwAlignment
[out] 如果找到了窗格,此参数将指定窗格的哪一侧最接近指定点。
返回值
指向停靠窗格的指针;如果没有控件包含由 point
指定的点,则为 NULL
。
注解
调用被重定向到 CDockingManager
类。 有关详细信息,请参阅 CDockingManager::ControlBarFromPoint
。
CMDIFrameWndEx::RecalcLayout
由框架调用以重新计算框架窗口的布局。
virtual void RecalcLayout(BOOL bNotify = TRUE);
参数
bNotify
[in] 确定框架窗口的活动就地项是否会收到布局更改的通知。 如果为 TRUE
,则此项会收到通知;如果为 FALSE
则不会收到。
备注
此方法重写 CFrameWnd::RecalcLayout。
CMDIFrameWndEx::RemovePaneFromDockManager
取消注册窗格,并将其从停靠管理器中移除。
void RemovePaneFromDockManager(
CBasePane* pControlBar,
BOOL bDestroy,
BOOL bAdjustLayout,
BOOL bAutoHide,
CBasePane* pBarReplacement);
参数
pControlBar
[in] 指向要移除的窗格的指针。
bDestroy
[in] 要销毁已删除的窗格,为 TRUE
。 不销毁,为 FALSE
。
bAdjustLayout
[in] 如果为 TRUE
,立即调整停靠布局。 如果为 FALSE
,将仅在因其他原因(例如,用户重设窗口大小或者拖动主框架)发生重绘事件时进行调整。
bAutoHide
[in] 如果为 TRUE
,从自动隐藏的窗格的列表中删除窗格。 如果为 FALSE
,从常规窗格的列表中删除窗格。
pBarReplacement
[in] 指向替换已移除窗格的窗格的指针。
注解
你必须向停靠管理器注册每个窗格,才能加入停靠布局。 使用 CMDIFrameWndEx::AddPane
或 CMDIFrameWndEx::InsertPane
来注册窗格。
请在窗格不再是框架窗口的停靠布局的一部分时,使用此方法。
CMDIFrameWndEx::SaveMDIState
保存 MDI 制表符分隔的组的当前布局和以前打开的文档的列表。
virtual BOOL SaveMDIState(LPCTSTR lpszProfileName);
参数
lpszProfileName
[in] 指定配置文件名称。
返回值
如果保存成功,返回 TRUE
;如果保存失败,返回 FALSE
。
备注
要加载或保存 MDI 选项卡和组的状态以及打开的文档的列表,请执行以下操作:
- 关闭主框架时,调用
SaveMDIState
- 创建主框架时,调用
CMDIFrameWndEx::LoadMDIState
。 建议将此调用放在首次显示主框架之前。 - 在
pMainFrame->LoadFrame (IDR_MAINFRAME);
之前调用CWinAppEx::EnableLoadWindowPlacement(FALSE);
- 在
LoadMDIState
之后调用CWinAppEx::ReloadWindowPlacement(pMainFrame)
,以便在注册表中所存储的位置显示主框架。 - 如果应用程序显示未作为文件存储的文档,请在
CMDIChildWndEx
派生类中重写GetDocumentName
。 系统会将返回的字符串作为文档标识符保存在注册表中。 有关详细信息,请参阅CMDIChildWndEx::GetDocumentName
。 - 重写
CMDIFrameWndEx::CreateDocumentWindow
,以便在从注册表加载文档时正确创建文档。CreateDocumentWindow
的参数是GetDocumentName
早些时候返回的字符串。
示例
以下示例演示如何在 VisualStudioDemo 示例:MFC Visual Studio 应用程序中使用 SaveMDIState
。
void CMainFrame::OnClose()
{
SaveMDIState(theApp.GetRegSectionPath());
CMDIFrameWndEx::OnClose();
}
CMDIFrameWndEx::SetPrintPreviewFrame
设置打印预览框架窗口。
void SetPrintPreviewFrame(CFrameWnd* pWnd);
参数
pWnd
[in] 指向打印预览框架窗口的指针。
注解
CMDIFrameWndEx::SetupToolbarMenu
通过将虚拟项替换为用户定义的项来修改工具栏对象。
void SetupToolbarMenu(
CMenu& menu,
const UINT uiViewUserToolbarCmdFirst,
const UINT uiViewUserToolbarCmdLast);
参数
menu
[in] 对要修改的 CMenu
类对象的引用。
uiViewUserToolbarCmdFirst
[in] 指定第一个用户定义的命令。
uiViewUserToolbarCmdLast
[in] 指定最后一个用户定义的命令。
CMDIFrameWndEx::ShowFullScreen
将主框架从常规模式切换到全屏模式。
void ShowFullScreen();
备注
CMDIFrameWndEx::ShowPane
显示或隐藏指定的窗格。
void ShowPane(
CBasePane* pBar,
BOOL bShow,
BOOL bDelay,
BOOL bActivate);
参数
pBar
[in] 指向要显示或隐藏的窗格的指针。
bShow
[in] 要显示窗格,为 TRUE
。 要隐藏窗格,为 FALSE
。
bDelay
[in] 要延迟停靠布局的重新计算,为 TRUE
。 要立即重新计算停靠布局,则为 FALSE
。
bActivate
[in] 将窗格作为活动窗格显示,则为 TRUE
。 将窗格作为非活动窗格显示,则为 FALSE
。
备注
调用此方法可显示或隐藏窗格。 请勿将 ShowWindow
用于停靠窗格。
示例
以下示例演示如何在 VisualStudioDemo 示例:MFC Visual Studio 应用程序中使用 ShowPane
。
void COutputList1::OnViewOutput()
{
CBasePane* pParentBar = DYNAMIC_DOWNCAST(CBasePane, GetOwner());
CFrameWndEx* pMainFrame = DYNAMIC_DOWNCAST(CFrameWndEx, GetTopLevelFrame());
if (pMainFrame != NULL && pParentBar != NULL)
{
pMainFrame->SetFocus();
pMainFrame->ShowPane(pParentBar, FALSE, FALSE, FALSE);
}
}
CMDIFrameWndEx::ShowWindowsDialog
创建一个 CMFCWindowsManagerDialog
框并打开它。
void ShowWindowsDialog();
示例
以下示例演示如何在 VisualStudioDemo 示例:MFC Visual Studio 应用程序中使用 ShowWindowsDialog
。
void CMainFrame::OnWindowManager()
{
ShowWindowsDialog();
}
CMDIFrameWndEx::TabbedDocumentToControlBar
将指定的选项卡式文档转换为停靠窗格。
virtual BOOL TabbedDocumentToControlBar(CMDIChildWndEx* pMDIChildWnd);
参数
pMDIChildWnd
指向包含停靠窗格的 MDI 子窗口的指针。
返回值
如果此方法成功,返回 TRUE
;如果失败,返回 FALSE
。
备注
使用此方法将选项卡式文档转换为停靠窗格。 选项卡式文档一定是使用 CMDIFrameWndEx::ControlBarToTabbedDocument
创建的。
示例
以下示例演示如何在 VisualStudioDemo 示例:MFC Visual Studio 应用程序中使用 TabbedDocumentToControlBar
。
void CMainFrame::OnMdiTabbedDocument()
{
CMDIChildWndEx* pMDIChild = DYNAMIC_DOWNCAST(CMDIChildWndEx, MDIGetActive());
if (pMDIChild == NULL)
{
ASSERT(FALSE);
return;
}
TabbedDocumentToControlBar(pMDIChild);
}
CMDIFrameWndEx::UpdateCaption
由框架调用以更新窗口框架标题栏。
void UpdateCaption();
注解
CMDIFrameWndEx::UpdateMDITabbedBarsIcons
设置每个 MDI 选项卡式窗格的图标。
void UpdateMDITabbedBarsIcons();
CMDIFrameWndEx::WinHelp
由框架调用以启动 WinHelp 应用程序或上下文帮助。
virtual void WinHelp(
DWORD dwData,
UINT nCmd = HELP_CONTEXT);
参数
dwData
[in] 根据由 nCmd
指定的帮助类型的要求指定数据。
nCmd
[in] 指定请求的帮助的类型。 有关可能的值及其如何影响 dwData
参数的详细信息,请参阅 WinHelp
。
备注
此方法重写 CWnd::WinHelp
。