CMDIChildWndEx 类
CMDIChildWndEx
类提供 Windows 多文档界面 (MDI) 子窗口的功能。 它扩展了 CMDIChildWnd 类的功能。 当 MDI 应用程序使用特定 MFC 类时,框架需要此类。
有关详细信息,请参阅所安装的 Visual Studio 的 C\atlmfc\src\mfc 文件夹中的源代码。
语法
class CMDIChildWndEx : public CMDIChildWnd
成员
公共方法
注解
若要在 MDI 应用程序中利用扩展停靠功能,请从 CMDIChildWndEx
(而不是 CMDIChildWnd)派生应用程序的 MDI 子窗口类。
示例
以下示例从 CMDIChildWndEx
派生一个类。 此代码片段摘自 VisualStudioDemo 示例:MFC Visual Studio 应用程序。
class CChildFrame : public CMDIChildWndEx
{
DECLARE_DYNCREATE(CChildFrame)
public:
CChildFrame();
// Overrides
public:
virtual BOOL PreCreateWindow(CREATESTRUCT &cs);
virtual void ActivateFrame(int nCmdShow = -1);
virtual BOOL IsReadOnly();
virtual LPCTSTR GetDocumentName(CObject **pObj);
// Implementation
public:
virtual ~CChildFrame();
#ifdef _DEBUG
virtual void AssertValid() const;
virtual void Dump(CDumpContext &dc) const;
#endif
protected:
afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
DECLARE_MESSAGE_MAP()
};
继承层次结构
要求
标头:afxMDIChildWndEx.h
CMDIChildWndEx::AddPane
添加窗格。
BOOL AddPane(
CBasePane* pControlBar,
BOOL bTail = TRUE);
参数
pControlBar
[in] 指向窗格的指针。
bTail
[in] 如果为 TRUE,则将窗格添加到停靠管理器窗格列表的末尾;否则为 FALSE。
返回值
如果已成功向停靠管理器注册窗格,则为 TRUE;否则为 FALSE。
CMDIChildWndEx::AddTabbedPane
添加选项卡式窗格。
void AddTabbedPane(CDockablePane* pControlBar);
参数
pControlBar
[in] 指向窗格的指针。
CMDIChildWndEx::AdjustDockingLayout
调整停靠布局。
virtual void AdjustDockingLayout(HDWP hdwp = NULL);
参数
hdwp
[in] 延迟窗口位置结构的句柄。
CMDIChildWndEx::CanShowOnMDITabs
virtual BOOL CanShowOnMDITabs();
返回值
注解
CMDIChildWndEx::CanShowOnWindowsList
指定 MDI 子窗口名称是否可以显示在 CMFCWindowsManagerDialog 类对话框中。
virtual BOOL CanShowOnWindowsList();
返回值
如果窗口可以显示在 Windows 对话框中,则返回 TRUE;否则返回 FALSE。
备注
如果窗口不应显示在 Windows 对话框中,请在派生类中重写此方法并返回 FALSE。 从 CMFCWindowsManagerDialog
调用此函数。
CMDIChildWndEx::DockPane
停靠窗格。
void DockPane(
CBasePane* pBar,
UINT nDockBarID = 0,
LPCRECT lpRect = NULL);
参数
pBar
[in] 指向窗格的指针。
nDockBarID
[in] 窗格的 ID。
lpRect
[in] 指向矩形的指针。
注解
未使用 lpRect 参数。
CMDIChildWndEx::DockPaneLeftOf
将一个窗格停靠到另一个窗格的左侧。
BOOL DockPaneLeftOf(
CPane* pBar,
CPane* pLeftOf);
参数
pBar
指向要停靠的窗格的指针。
pLeftOf
指向用作参照点的窗格的指针。
返回值
如果成功,则返回 TRUE;如果失败,则返回 FALSE。
备注
此方法采用 pBar 指定的窗格,并将其停靠在 pLeftOf 指定的窗格的左侧。
如果你想要以预定义的顺序停靠多个窗格,请调用此方法。
CMDIChildWndEx::EnableAutoHidePanes
当窗格停靠在窗口的指定侧时,启用窗格的自动隐藏模式。
BOOL EnableAutoHidePanes(DWORD dwDockStyle);
参数
dwDockStyle
[in] 指定启用的主框架窗口的边侧。 使用以下一个或多个标志。
CBRS_ALIGN_LEFT
CBRS_ALIGN_RIGHT
CBRS_ALIGN_TOP
CBRS_ALIGN_BOTTOM
返回值
如果该方法成功,则返回 TRUE;否则返回 FALSE。
CMDIChildWndEx::EnableDocking
启用子窗口到主框架的停靠。
BOOL EnableDocking(DWORD dwDockStyle);
参数
dwDockStyle
[in] 指定要启用的停靠对齐方式。
返回值
如果该方法成功,则返回 TRUE;否则返回 FALSE。
备注
调用此方法以启用与主框架的停靠对齐。 可以传递 CBRS_ALIGN_ 标志的组合(有关详细信息,请参阅 CControlBar::EnableDocking)。
CMDIChildWndEx::GetDockingManager
CDockingManager* GetDockingManager();
返回值
注解
CMDIChildWndEx::GetDocumentName
返回显示在 MDI 子窗口中的文档的名称。
virtual LPCTSTR GetDocumentName(CObject** pObj);
返回值
指向包含文档名称的字符串的指针。
备注
文档是 MDI 子窗口显示的内容。 一般情况下,窗口会显示从文件加载的或保存到文件的数据。 因此,文档的名称就是该文件的名称。 GetDocumentName
的默认实现返回从 CDocument::GetPathName
获取的字符串。
如果窗口显示的文档不是从文件加载的,请在派生类中重写此方法并返回唯一的文档标识符。
GetDocumentName
由框架在保存所有已打开文档的状态时调用。 返回的字符串将写入注册表。
当框架稍后还原状态时,会从注册表中读取文档名称并将其传递给 CMDIFrameWndEx::CreateDocumentWindow。 在 CMDIFrameWndEx 派生类中重写此方法,创建或打开具有此名称的文档,并读取具有此名称的文件。 如果文档不是基于文件,则基于文档标识符本身创建文档。 请仅在你要保存和还原文档时才执行上述操作。
示例
下面的示例演示 GetDocumentName
方法的用法。 此代码片段摘自 VisualStudioDemo 示例:MFC Visual Studio 应用程序。
LPCTSTR CChildFrame::GetDocumentName(CObject **pObj)
{
if (DYNAMIC_DOWNCAST(CStartView, GetActiveView()) != NULL)
{
return g_strStartViewName;
}
return CMDIChildWndEx::GetDocumentName(pObj);
}
CMDIChildWndEx::GetFrameIcon
由框架调用以检索 MDI 子窗口的图标。
virtual HICON GetFrameIcon() const;
返回值
窗口图标的句柄。
注解
此方法由框架调用,以确定要在包含 MDI 子框架窗口的 MDI 选项卡上显示哪个图标。
此方法默认返回窗口图标。 重写 CMDIChildWndEx
派生类中的 GetFrameIcon
可自定义此行为。
CMDIChildWndEx::GetFrameText
由框架调用以检索 MDI 子窗口的文本。
virtual CString GetFrameText() const;
返回值
包含框架窗口文本的字符串。
备注
此方法由框架调用,以确定要在包含 MDI 子框架窗口的 MDI 选项卡上显示哪些文本。
此方法默认返回窗口文本。 重写 CMDIChildWndEx
派生类中的 GetFrameText
可自定义此行为。
CMDIChildWndEx::GetPane
按指定的控件 ID 查找窗格。
CBasePane* GetPane(UINT nID);
参数
nID
[in] 要查找的窗格的控件 ID。
返回值
如果已找到,则返回指向该窗格的指针;否则返回 NULL。
CMDIChildWndEx::GetRelatedTabGroup
CMFCTabCtrl* GetRelatedTabGroup();
返回值
注解
CMDIChildWndEx::GetTabbedPane
返回指向停靠窗格的指针,该窗格是一组 MDI 选项卡式文档的一部分。
CDockablePane* GetTabbedPane() const;
返回值
指向停靠窗格的指针,该窗格是一组 MDI 选项卡式文档的一部分。
CMDIChildWndEx::GetToolbarButtonToolTipText
由框架调用以检索工具栏按钮的工具提示。
virtual BOOL GetToolbarButtonToolTipText(
CMFCToolBarButton*,
CString&);
返回值
如果已显示工具提示,则返回 TRUE。 默认实现返回 FALSE。
备注
如果你想要显示工具栏按钮的自定义工具提示,请重写此方法。
CMDIChildWndEx::InsertPane
向停靠管理器注册指定的窗格。
BOOL InsertPane(
CBasePane* pControlBar,
CBasePane* pTarget,
BOOL bAfter = TRUE);
参数
pControlBar
[in] 指向要插入的窗格的指针。
pTarget
[in] 指向相邻窗格的指针。
bAfter
[in] 如果为 TRUE,则在 pTarget 之后插入 pControlBar。 如果为 FALSE,则在 pTarget 之前插入 pControlBar。
返回值
如果方法成功,则为 TRUE,否则为 FALSE。
CMDIChildWndEx::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 像素。
CMDIChildWndEx::IsReadOnly
指定子窗口中显示的文档是否为只读。
virtual BOOL IsReadOnly();
返回值
如果文档为只读,则返回 TRUE;否则返回 FALSE。
备注
此函数用于防止保存只读的文档。
示例
以下示例演示如何重写 IsReadOnly
方法。 此代码片段摘自 VisualStudioDemo 示例:MFC Visual Studio 应用程序。
BOOL CChildFrame::IsReadOnly()
{
return DYNAMIC_DOWNCAST(CStartView, GetActiveView()) != NULL;
}
CMDIChildWndEx::IsTabbedPane
指定 MDI 子窗口是否包含停靠窗格。
BOOL IsTabbedPane() const;
返回值
如果 MDI 子窗口包含已转换为选项卡式文档的停靠窗格,则返回 TRUE;否则返回 FALSE。
CMDIChildWndEx::OnMoveMiniFrame
由框架调用以移动微型框窗口。
virtual BOOL OnMoveMiniFrame(CWnd* pFrame);
参数
pFrame
[in] 指向微型框窗口的指针。
返回值
如果该方法成功,则返回 TRUE,否则返回 FALSE。
CMDIChildWndEx::OnSetPreviewMode
由框架调用以进入或退出打印预览模式。
virtual void OnSetPreviewMode(
BOOL bPreview,
CPrintPreviewState* pState);
参数
bPreview
[in] 如果为 TRUE,则进入打印预览模式。 如果为 FALSE,则退出打印预览模式。
pState
[in] 指向打印预览状态结构的指针。
CMDIChildWndEx::OnUpdateFrameTitle
由框架调用以更新框架标题。
virtual void OnUpdateFrameTitle(BOOL bAddToTitle);
参数
bAddToTitle
如果为 TRUE,则将文档名称添加到标题。
CMDIChildWndEx::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 参数;否则为 FALSE。
pRTCBarType
[in] 如果不为 NULL,则该方法仅搜索指定类型的窗格。
dwAlignment
[in] 如果在指定点找到窗格,则此参数包含最靠近指定点的窗格的一侧。 有关详细信息,请参阅“备注”部分。
返回值
返回指向包含给定点的 CBasePane
派生对象的指针;如果未找到窗格,则返回 NULL。
注解
调用此方法可以根据指定的条件(例如运行时类和可见性)确定窗格是否包含指定的点。
当函数返回并且找到窗格时,dwAlignment 包含指定点的对齐方式。 例如,如果该点最靠近窗格顶部,则 dwAlignment 设置为 CBRS_ALIGN_TOP。
CMDIChildWndEx::RecalcLayout
重新计算窗口的布局。
virtual void RecalcLayout(BOOL bNotify = TRUE);
参数
bNotify
[in] 如果为 TRUE,则窗口的活动就地项会收到布局更改通知。
CMDIChildWndEx::RemovePaneFromDockManager
从停靠管理器中删除一个窗格。
void RemovePaneFromDockManager(
CBasePane* pControlBar,
BOOL bDestroy,
BOOL bAdjustLayout,
BOOL bAutoHide,
CBasePane* pBarReplacement);
参数
pControlBar
[in] 指向要删除的窗格的指针。
bDestroy
[in] 如果为 TRUE,则销毁已删除的窗格。
bAdjustLayout
[in] 如果为 TRUE,则立即调整停靠布局。
bAutoHide
[in] 如果为 TRUE,则停靠布局与自动隐藏控件条列表相关。 如果为 FALSE,则停靠布局与常规窗格列表相关。
pBarReplacement
[in] 指向替换已移除窗格的窗格的指针。
CMDIChildWndEx::SetRelatedTabGroup
void SetRelatedTabGroup(CMFCTabCtrl* p);
参数
[in] p
注解
CMDIChildWndEx::ShowPane
void ShowPane(
CBasePane* pBar,
BOOL bShow,
BOOL bDelay,
BOOL bActivate);
参数
[in] pBar
[in] bShow
[in] bDelay
[in] bActivate
注解
CMDIChildWndEx::UpdateTaskbarTabIcon
更新 Windows 7 任务栏选项卡图标。
virtual void UpdateTaskbarTabIcon(HICON hIcon);
参数
hIcon
要在 Windows 7 任务栏选项卡上显示的图标的句柄。
注解
CMDIChildWndEx::UnregisterTaskbarTab
从 Windows 7 任务栏选项卡中删除 MDI 子项。
void UnregisterTaskbarTab(BOOL bCheckRegisteredMDIChildCount = TRUE);
参数
bCheckRegisteredMDIChildCount
指定此函数是否需要检查已注册到 MDI 选项卡的 MDI 子项数。 如果此数字为 0,则此函数将从应用程序的任务栏缩略图中删除剪裁矩形。
注解
CMDIChildWndEx::SetTaskbarThumbnailClipRect
由框架调用,以设置剪裁矩形来选择窗口工作区的一部分,该部分将在任务栏中显示为该窗口的缩略图。
virtual BOOL SetTaskbarThumbnailClipRect(CRect rect);
参数
rect
指定新的剪裁矩形。 如果矩形为空或为 null,则删除剪裁部分。
返回值
若成功,则为 TRUE;否则为 FALSE。
备注
CMDIChildWndEx::SetTaskbarTabProperties
设置 Windows 7 任务栏选项卡的属性。
void SetTaskbarTabProperties(DWORD dwFlags);
参数
dwFlags
STPFLAG 值的组合。 有关详细信息,请参阅 ITaskbarList4::SetTabProperties。
备注
CMDIChildWndEx::SetTaskbarTabOrder
在 Windows 7 任务栏选项卡上的指定窗口之前插入 MDI 子项。
void SetTaskbarTabOrder(CMDIChildWndEx* pWndBefore = NULL);
参数
pWndBefore
指向其左侧插入了缩略图的 MDI 子窗口的指针。 此窗口必须已通过 RegisterTaskbarTab
注册。 如果此值为 NULL,则将新缩略图添加到列表的末尾。
备注
CMDIChildWndEx::SetTaskbarTabActive
激活相应的 Windows 7 任务栏选项卡。
void SetTaskbarTabActive();
注解
CMDIChildWndEx::RegisterTaskbarTab
将 MDI 子项注册到 Windows 7 任务栏选项卡。
virtual void RegisterTaskbarTab(CMDIChildWndEx* pWndBefore = NULL);
参数
pWndBefore
指向其左侧插入了缩略图的 MDI 子窗口的指针。 此窗口必须已通过 RegisterTaskbarTab
注册。 如果此值为 NULL,则将新缩略图添加到列表的末尾。
备注
CMDIChildWndEx::OnTaskbarTabThumbnailStretch
当框架需要拉伸 MDI 子项的 Windows 7 任务栏选项卡缩略图预览位图时由框架调用。
virtual BOOL OnTaskbarTabThumbnailStretch(
HBITMAP hBmpDst,
const CRect& rectDst,
HBITMAP hBmpSrc,
const CRect& rectSrc);
参数
hBmpDst
目标位图的句柄。
rectDst
指定目标矩形。
hBmpSrc
源位图的句柄。
rectSrc
指定源矩形。
备注
要求:afxmdichildwndex.h
CMDIChildWndEx::OnTaskbarTabThumbnailMouseActivate
当任务栏选项卡缩略图应处理 WM_MOUSEACTIVATE 消息时由框架调用。
virtual int OnTaskbarTabThumbnailMouseActivate(
CWnd* pDesktopWnd,
UINT nHitTest,
UINT message);
参数
pDesktopWnd
指定一个指向所要激活的窗口的顶级父窗口的指针。 该指针可以是暂时性指针,不应存储它。
nHitTest
指定命中测试区域代码。 命中测试是一项确定光标位置的测试。
message
指定鼠标消息编号。
注解
默认实现会激活相关的 MDI 子框架。
CMDIChildWndEx::OnTaskbarTabThumbnailActivate
当任务栏选项卡缩略图应处理 WM_ACTIVATE 消息时由框架调用。
virtual void OnTaskbarTabThumbnailActivate(
UINT nState,
CWnd* pWndOther,
BOOL bMinimized);
参数
nState
指定是正在激活还是停用 CWnd
。
pWndOther
指向正在激活或停用的 CWnd
的指针。 该指针可为 NULL,也可以是暂时性指针。
bMinimized
指定正在激活或停用的 CWnd
的最小化状态。 TRUE 值表示窗口已最小化。
备注
默认实现会激活相关的 MDI 子框架。
CMDIChildWndEx::OnPressTaskbarThmbnailCloseButton
当用户按下任务栏选项卡缩略图上的关闭按钮时由框架调用。
virtual void OnPressTaskbarThmbnailCloseButton();
备注
CMDIChildWndEx::OnGetIconicThumbnail
当框架需要获取 MDI 子项的图标缩略图位图时由框架调用。
virtual HBITMAP OnGetIconicThumbnail(
int nWidth,
int nHeight);
参数
nWidth
指定所需位图的宽度。
nHeight
指定所需位图的高度。
注解
CMDIChildWndEx::OnGetIconicLivePreviewBitmap
当框架需要获取 MDI 子项的实时预览位图时由框架调用。
virtual HBITMAP OnGetIconicLivePreviewBitmap(
BOOL bIsMDIChildActive,
CPoint& ptLocation);
参数
bIsMDIChildActive
如果为当前处于活动状态的 MDI 子请求了位图并且主窗口未最小化,则此参数为 TRUE。 在这种情况下,默认处理会拍摄主窗口的快照。
ptLocation
指定位图在主(顶级)窗口客户端坐标中的位置。 该点应由被调用方提供。
返回值
如果已处理,则返回有效 32bpp 位图的句柄,否则返回 NULL。
备注
在派生类中重写此方法,并返回 MDI 子项实时预览的有效 32bpp 位图。 仅当 MDI 子项显示在 Windows 7 任务栏选项卡上时才调用此方法。 如果返回 NULL,则 MFC 将调用默认处理程序并使用 PrintClient
或 PrintWindow
获取位图。
CMDIChildWndEx::m_dwDefaultTaskbarTabPropertyFlags
一个标志组合,将某个选项卡(MDI 子项)注册到 Windows 7 任务栏选项卡时,框架会将该组合传递给 SetTaskbarTabProperties
方法。
AFX_IMPORT_DATA static DWORD m_dwDefaultTaskbarTabPropertyFlags;
备注
默认组合为 STPF_USEAPPTHUMBNAILWHENACTIVE | STPF_USEAPPPEEKWHENACTIVE
。
CMDIChildWndEx::IsTaskbarThumbnailClipRectEnabled
告知是否已启用或禁用自动选择窗口工作区的一部分,使之在任务栏中显示为该窗口的缩略图。
BOOL IsTaskbarThumbnailClipRectEnabled() const;
返回值
如果启用了自动选择要显示的窗口工作区的一部分,则返回 TRUE;否则返回 FALSE。
备注
CMDIChildWndEx::IsTaskbarTabsSupportEnabled
告知 MDI 子项是否可以显示在 Windows 7 任务栏选项卡上。
BOOL IsTaskbarTabsSupportEnabled();
返回值
如果 MDI 子项可以显示在 Windows 7 任务栏选项卡上,则返回 TRUE;如果 MDI 子项无法显示在 Windows 7 任务栏选项卡上,则返回 FALSE。
备注
CMDIChildWndEx::IsRegisteredWithTaskbarTabs
如果 MDI 子项已成功注册到 Windows 7 任务栏选项卡,则返回 TRUE。
BOOL IsRegisteredWithTaskbarTabs();
返回值
如果 MDI 子项已注册到 Windows 7 任务栏选项卡,则返回 TRUE;否则返回 FALSE。
备注
CMDIChildWndEx::InvalidateIconicBitmaps
使 MDI 子项的图标位图表示形式失效。
BOOL InvalidateIconicBitmaps();
返回值
如果已禁用 Windows 7 任务栏支持或 MDI 子项未注册到 Windows 7 任务栏选项卡,则返回 FALSE;否则返回 TRUE。
备注
当 MDI 子项的实时内容或大小已更改时应调用。
CMDIChildWndEx::GetTaskbarThumbnailClipRect
当框架需要选择窗口工作区的一部分以在任务栏中显示为该窗口的缩略图时,由框架调用。
virtual CRect GetTaskbarThumbnailClipRect() const;
返回值
窗口坐标中的矩形。 此矩形映射到顶级框架的工作区。 该矩形应为空以清除剪裁矩形。
备注
CMDIChildWndEx::GetTaskbarPreviewWnd
当框架需要获取要显示在 Windows 7 任务栏选项卡缩略图上的子窗口(通常是视图或拆分器窗口)时调用。
virtual CWnd* GetTaskbarPreviewWnd();
返回值
应返回指向 CWnd
对象的有效指针,该对象的预览应显示在与此 MDI 子项相关的 Windows 7 任务栏选项卡上。 默认实现会返回此 MDI 子项的子窗口,该窗口的控件 ID 为 AFX_IDW_PANE_FIRST(通常是一个 CView
派生类)。
注解
CMDIChildWndEx::GetTabProxyWnd
返回已注册到 Windows 7 任务栏选项卡的选项卡代理窗口。
CMDITabProxyWnd* GetTabProxyWnd();
返回值
指向 CMDITabProxyWnd
对象的指针,该对象已注册到 Windows 7 任务栏选项卡。
备注
CMDIChildWndEx::EnableTaskbarThumbnailClipRect
启用或禁用自动选择窗口工作区的一部分,使之在任务栏中显示为该窗口的缩略图。
void EnableTaskbarThumbnailClipRect(BOOL bEnable = TRUE);
参数
bEnable
指定是启用 (TRUE) 还是禁用 (FALSE) 自动选择要显示的窗口工作区的一部分。
注解
CMDIChildWndEx::CanShowOnTaskBarTabs
告知框架此 MDI 子项是否可以显示在 Windows 7 任务栏选项卡上。
virtual BOOL CanShowOnTaskBarTabs();
返回值
如果 MDI 子项的内容可以显示在 Windows 7 任务栏缩略图上,则返回 TRUE。
备注
在派生类中重写此方法,并返回 FALSE 以禁用在 Windows 7 任务栏选项卡上显示此 MDI 子项。
CMDIChildWndEx::ActivateTopLevelFrame
从任务栏选项卡激活应用程序时由框架调用以激活顶级框架。
virtual void ActivateTopLevelFrame();
备注
另请参阅
层次结构图
类
CMDIChildWnd 类
CMFCWindowsManagerDialog 类
CMDIFrameWndEx 类