CMDIFrameWndEx

扩展 Windows 多文档界面 (MDI) 框架窗口 CMDIFrameWnd 的功能。

语法

class CMDIFrameWndEx : public CMDIFrameWnd

成员

公共方法

名称 描述
CMDIFrameWndEx::ActiveItemRecalcLayout 重新计算活动项的布局。
CMDIFrameWndEx::AddDockSite 不使用此方法。
CMDIFrameWndEx::AddPane 向停靠管理器注册窗格。
CMDIFrameWndEx::AdjustClientArea 减少工作区以留出边框。
CMDIFrameWndEx::AdjustDockingLayout 重新计算所有停靠的窗格的布局。
CMDIFrameWndEx::AreMDITabs 确定是否启用了 MDI 的“选项卡”功能或 MDI 的“制表符分隔的组”功能。
CMDIFrameWndEx::CanConvertControlBarToMDIChild 由框架调用,以确定框架窗口是否可将停靠窗格转换为选项卡式文档。
CMDIFrameWndEx::ControlBarToTabbedDocument 将指定的停靠窗格转换为选项卡式文档。
CMDIFrameWndEx::CreateDocumentWindow 创建子文档窗口。
CMDIFrameWndEx::CreateNewWindow 由框架调用来创建新窗口。
CMDIFrameWndEx::CreateObject 由框架用于创建此类类型的动态实例。
CMDIFrameWndEx::DockPane 将指定的窗格停靠到框架窗口。
CMDIFrameWndEx::DockPaneLeftOf 将一个窗格停靠到另一个窗格的左侧。
CMDIFrameWndEx::EnableAutoHidePanes 当窗格停靠在主框架窗口的指定侧时,启用窗格的自动隐藏模式。
CMDIFrameWndEx::EnableDocking 启用属于 MDI 框架窗口的窗格的停靠。
CMDIFrameWndEx::EnableFullScreenMainMenu 在全屏模式下显示或隐藏主菜单。
CMDIFrameWndEx::EnableFullScreenMode 为框架窗口启用全屏模式。
CMDIFrameWndEx::EnableLoadDockState 启用或禁用停靠状态加载。
CMDIFrameWndEx::EnableMDITabbedGroups 启用或禁用 MDI“制表符分隔的组”功能。
CMDIFrameWndEx::EnableMDITabs 启用或禁用 MDI 选项卡功能。 启用后,框架窗口显示每个 MDI 子窗口的选项卡。
CMDIFrameWndEx::EnableMDITabsLastActiveActivation 指定用户关闭当前选项卡时,是否应激活最后一个活动的选项卡。
CMDIFrameWndEx::EnablePaneMenu 启用或禁用弹出窗格菜单的自动创建和管理,该菜单显示一个应用程序窗格列表。
CMDIFrameWndEx::EnableWindowsDialog 插入命令 ID 调用 CMFCWindowsManagerDialog 对话框的菜单项。
CMDIFrameWndEx::GetActivePopup 返回一个指向当前显示的弹出菜单的指针。
CMDIFrameWndEx::GetPane 返回一个指向具有指定控件 ID 的窗格的指针。
CMDIFrameWndEx::GetDefaultResId 返回 MDI 框架窗口的共享资源的 ID。
CMDIFrameWndEx::GetMDITabGroups 返回 MDI 选项卡式窗口的列表。
CMDIFrameWndEx::GetMDITabs 返回对带下划线的选项卡式窗口的引用。
CMDIFrameWndEx::GetMDITabsContextMenuAllowedItems 返回标志的组合,该组合确定启用 MDI“制表符分隔的组”功能时哪些上下文菜单项有效。
CMDIFrameWndEx::GetMenuBar 返回一个指向附加到框架窗口的菜单栏对象的指针。
CMDIFrameWndEx::GetRibbonBar 检索框架的功能区栏控件。
CMDIFrameWndEx::GetTearOffBars 返回处于拖曳状态的 CPane 派生对象的列表。
CMDIFrameWndEx::GetThisClass 由框架调用,以获取指向与此类类型关联的 CRuntimeClass 对象的指针。
CMDIFrameWndEx::GetToolbarButtonToolTipText 当应用程序显示工具栏按钮的工具提示时由框架调用。
CMDIFrameWndEx::InsertPane 向停靠管理器注册指定的窗格。
CMDIFrameWndEx::IsFullScreen 确定框架窗口是否处于全屏模式。
CMDIFrameWndEx::IsMDITabbedGroup 确定是否启用了 MDI“制表符分隔的组”功能。
CMDIFrameWndEx::IsMemberOfMDITabGroup 确定指定的选项卡式窗口是否在 MDI 制表符分隔的组中的窗口列表中。
CMDIFrameWndEx::IsMenuBarAvailable 确定框架窗口是否有菜单栏。
CMDIFrameWndEx::IsPointNearDockSite 确定指定点是否位于停靠站点附近。
CMDIFrameWndEx::IsPrintPreview 确定框架窗口是否处于打印预览模式。
CMDIFrameWndEx::LoadFrame 从资源信息创建框架窗口。 (替代 CMDIFrameWnd::LoadFrame。)
CMDIFrameWndEx::LoadMDIState 加载 MDI 制表符分隔的组的指定布局和以前打开的文档的列表。
CMDIFrameWndEx::MDITabMoveToNextGroup 将当前活动的选项卡式窗口中的活动选项卡移动到下一个或上一个制表符分隔的组。
CMDIFrameWndEx::MDITabNewGroup 创建具有一个窗口的新的制表符分隔的组。
CMDIFrameWndEx::NegotiateBorderSpace 在 OLE 就地激活期间协商框架窗口中的边框空间。
CMDIFrameWndEx::OnCloseDockingPane 用户单击可停靠的窗格上的“关闭”按钮时由框架调用
CMDIFrameWndEx::OnCloseMiniFrame 当用户单击浮动微型框窗口上的“关闭”按钮时由框架调用
CMDIFrameWndEx::OnClosePopupMenu 当活动弹出菜单处理 WM_DESTROY 消息时由框架调用。
CMDIFrameWndEx::OnCmdMsg 由框架调用以路由和调度命令消息并更新命令用户界面对象。
CMDIFrameWndEx::OnDrawMenuImage 当绘制与菜单项关联的图像时由框架调用。
CMDIFrameWndEx::OnDrawMenuLogo CMFCPopupMenu 处理 WM_PAINT 消息时由框架调用。
CMDIFrameWndEx::OnEraseMDIClientBackground 当 MDI 框架窗口处理 WM_ERASEBKGND 消息时由框架调用。
CMDIFrameWndEx::OnMenuButtonToolHitTest CMFCToolBarButton 对象处理 WM_NCHITTEST 消息时由框架调用。
CMDIFrameWndEx::OnMoveMiniFrame 由框架调用以移动微型框窗口。
CMDIFrameWndEx::OnSetPreviewMode 设置应用程序的主框架窗口的打印预览模式。 (替代 CFrameWnd::OnSetPreviewMode。)
CMDIFrameWndEx::OnShowCustomizePane 激活了“快速自定义”窗格时由框架调用。
CMDIFrameWndEx::OnShowMDITabContextMenu 应在某个选项卡上显示上下文菜单时,由框架调用。 (仅对 MDI 制表符分隔的组有效。)
CMDIFrameWndEx::OnShowPanes 由框架调用以显示或隐藏窗格。
CMDIFrameWndEx::OnShowPopupMenu 当激活弹出菜单时由框架调用。
CMDIFrameWndEx::OnSizeMDIClient 客户端 MDI 窗口的大小发生更改时,由框架调用。
CMDIFrameWndEx::OnTearOffMenu 当激活带有拖曳栏的菜单时由框架调用。
CMDIFrameWndEx::OnUpdateFrameMenu 由框架调用以更新框架菜单。 (替代 CMDIFrameWnd::OnUpdateFrameMenu。)
CMDIFrameWndEx::PaneFromPoint 返回包含指定点的停靠窗格。
CMDIFrameWndEx::PreTranslateMessage CWinApp 类用于在将窗口消息调度到 TranslateMessageDispatchMessage Windows 函数之前对其进行转换。 (替代 CMDIFrameWnd::PreTranslateMessage。)
CMDIFrameWndEx::RecalcLayout 由框架调用以重新计算框架窗口的布局。 (替代 CFrameWnd::RecalcLayout。)
CMDIFrameWndEx::RemovePaneFromDockManager 取消注册窗格,并将其从停靠管理器中移除。
CMDIFrameWndEx::SaveMDIState 保存 MDI 制表符分隔的组的当前布局和以前打开的文档的列表。
CMDIFrameWndEx::SetPrintPreviewFrame 设置打印预览框架窗口。
CMDIFrameWndEx::SetupToolbarMenu 通过搜索虚拟项并将其替换为指定的用户定义项修改工具栏对象。
CMDIFrameWndEx::ShowFullScreen 将主框架从常规模式切换到全屏模式。
CMDIFrameWndEx::ShowPane 显示或隐藏指定的窗格。
CMDIFrameWndEx::ShowWindowsDialog 创建一个 CMFCWindowsManagerDialog 框并打开它。
CMDIFrameWndEx::TabbedDocumentToControlBar 将指定的选项卡式文档转换为停靠窗格。
CMDIFrameWndEx::UpdateCaption 由框架调用以更新窗口框架标题栏。
CMDIFrameWndEx::UpdateMDITabbedBarsIcons 设置每个 MDI 选项卡式窗格的图标。
CMDIFrameWndEx::WinHelp 由框架调用以启动 WinHelp 应用程序或上下文帮助。 (替代 CWnd::WinHelp。)

数据成员

名称 描述
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;
};

继承层次结构

CObject

CCmdTarget

CWnd

CFrameWnd

CMDIFrameWnd

CMDIFrameWndEx

要求

标头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::EnableDockingCMDIFrameWndEx::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

如果 bTabCustomTooltipsTRUE,系统将向主框架窗口发送 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_LEFTCBRS_ALIGN_RIGHTCBRS_ALIGN_TOPCBRS_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::ReloadWindowPlacementpMainFrame->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 = 1
  • borderRequest = 2
  • borderSet = 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 结构的 pTargetpmf 成员,而不是调度命令。

返回值

如果消息已处理,则为非零值;否则为 0。

CMDIFrameWndEx::OnDrawMenuImage

当绘制与菜单项关联的图像时由框架调用。

virtual BOOL OnDrawMenuImage(
    CDC* pDC,
    const CMFCToolBarMenuButton* pMenuButton,
    const CRect& rectImage);

参数

pDC
[in] 指向设备上下文的指针。

pMenuButton
[in] 指向菜单按钮的指针。

rectImage
[in] 图像的边框。

返回值

如果方法绘制图像,返回 TRUE。 默认实现返回 FALSE

注解

如果要为属于 CMDIFrameWndEx 派生对象拥有的菜单栏的菜单项自定义图像呈现,请重写此方法。 默认实现不执行任何操作。

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。 例如,如果窗格处于隐藏状态并且 bShowFALSE,则返回值为 FALSE

备注

默认实现从顶级框架窗口中删除工具栏。

如果 CDockingManager::m_bHideDockingBarsInContainerModeTRUE(默认值),系统将隐藏所有停靠窗格。

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::AddPaneCMDIFrameWndEx::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

另请参阅

层次结构图

CMDIFrameWnd
CMDIChildWndEx