多文档标签界面






4.69/5 (11投票s)
2000年1月30日

253123

7094
MDI 的一种变体,可在选项卡控件中显示打开的子窗口。

我们为基于 MDI(多文档界面)的应用程序引入了一个新的界面扩展 - MDI 选项卡式界面或 MTI。此类是 Ultimate Toolbox 类库的一部分,可免费使用。
我们在主框架窗口(MDIFrame 窗口)与其子窗口(MDIChild 窗口)之间的关系上没有做任何更改。我们添加了在开发 MDI 应用程序时通常会被忽略的功能。
位于 MDIFrame 窗口客户区域的 MDIClient 窗口管理 MDIChild 窗口。我们不仅显示 MDIClient 窗口,还显示一个标准的选项卡控件(因此称为选项卡式 MDI),我们在其中为每个 MDIChild 窗口创建一个项目。窗口图标和文本将与相应的选项卡项目关联。
使用选项卡控件,您只需单击选项卡项目即可在 MDIChild 窗口之间快速切换。如果双击选项卡项目,相应的 MDIChild 窗口将被最大化/还原。最后,当使用标准的 OLE 拖放功能将任何对象拖放到选项卡控件项目上时,将激活相应的 MDIChild 窗口。
我们使用标准的选项卡控件,因此您可以使用一套相关的标准函数自定义其外观(有关 CTabCtrl 的描述,请参阅 MFC 文档)。
为了提供上述描述的功能,我们开发了三个类。
COXTabWorkspaceDropTarget | COleDropTarget 派生类,用于支持在将任何对象拖放到选项卡控件项目上时更改活动的 MDIChild(这是一个内部类)。 |
COXTabWorkspace | CTabCtrl 派生类。覆盖 MDIClient 区域。对于每个 MDIChild 窗口,将有一个选项卡项目,它将使用窗口文本和图标作为项目文本和图标。每当单击该项目时,相应的子窗口将被激活。每当双击该项目时,相应的 MDIChild 窗口将被最大化/还原。 |
COXTabClientWnd | CWnd 派生类。子类化 MDIClient 窗口。管理 MDIClient 和选项卡控件之间的相对位置。 |
这些类的几乎所有逻辑都是在内部实现的,并且只有少数公共成员。有关可用于自定义选项卡控件外观的函数列表,请参阅 COXTabWorkspace 参考。
COXTabClientWnd 类有一些公共函数(有关详细信息,请参阅 COXTabClientWnd 参考),但您主要会对以下函数感兴趣:
Attach()
Detach()
以下是应该在 MDI 应用程序中实现选项卡式 MDI 界面所采取的两个步骤。
- 在您的 CMainFrame 类中,声明一个
COXTabClientWnd
类的变量。COXTabClientWnd m_MTIClientWnd;
- 在您的
CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
函数实现中,添加以下代码行:m_MTIClientWnd.Attach(this);
就是这样。
示例
Samples 目录中包含的 TabbedMDI 项目展示了该类的实际应用。在那里,您将看到如何自定义选项卡式 MDI 界面的外观。
COXTabWorkspace
SetOffset |
|
GetOffset |
|
AcceptDraggedObject |
|
IsAcceptingDraggedObject
|
|
void SetOffset(const DWORD dwOffset)
参数
dwOffset |
|
备注
设置选项卡控件与 MDIFrame 客户区域边框的偏移量。
DWORD GetOffset() const
返回值
MDIFrame 窗口客户区域到选项卡控件显示位置的偏移量(以点为单位)。
备注
检索选项卡控件与 MDIFrame 边框的偏移量。
void AcceptDraggedObject(const BOOL bAccept=TRUE)
参数
bAccept | 如果为 TRUE,则当任何对象拖放到选项卡项目上时,将激活相应的 MDIChild 窗口。 |
备注
为选项卡控件设置/移除拖放对象支持。
BOOL IsAcceptingDraggedObject() const
参数
bAccept |
如果为 TRUE,则当任何对象拖放到选项卡项目上时,将激活相应的 MDIChild 窗口。 |
返回值
如果当任何对象拖放到选项卡项目上时将激活相应的 MDIChild 窗口,则返回 TRUE。
COXTabClientWnd
Attach |
|
Detach |
|
IsAttached |
|
GetTabCtrl |
|
GetParentFrame |
|
BOOL Attach(const CMDIFrameWnd* pParentFrame, DWORD dwTabCtrlStyle=DEFAULT_TABCTRLSTYLE)
参数
pParentFrame | 指向应用程序的 MDIFrame 窗口的指针。 | |
dwTabCtrlStyle | 创建选项卡控件时将使用的选项卡控件样式。有关所有可用样式的列表,请参阅 Windows SDK 文档。默认使用以下样式: | |
TCS_MULTILINE TCS_BOTTOM TCS_HOTTRACK TCS_SCROLLOPPOSITE TCS_RIGHTJUSTIFY |
返回值
如果成功,则为 TRUE;否则为 FALSE。
备注
用增强的选项卡式 MDI 替换标准的 MDI 界面。
BOOL Detach()
返回值
如果成功,则为 TRUE;否则为 FALSE。
备注
恢复标准的 MDI 界面。
BOOL IsAttached() const
返回值
如果选项卡式 MDI 界面处于活动状态,则返回 TRUE。
备注
检索一个标志,该标志指定标准 MDI 界面是否已被增强的选项卡式 MDI 替换。
COXTabWorkspace* GetTabCtrl()
返回值
指向选项卡控件的指针。
备注
检索指向选项卡控件的指针。
CMDIFrameWnd* GetParentFrame()
返回值
指向父 MDIFrame 窗口的指针,如果未附加任何内容,则为 NULL。
备注
检索指向父 MDIFrame 窗口的指针。