65.9K
CodeProject 正在变化。 阅读更多。
Home

多文档标签界面

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.69/5 (11投票s)

2000年1月30日

viewsIcon

253123

downloadIcon

7094

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

  • 下载演示项目 - 30 Kb
  • 下载源代码文件 - 11 Kb
  • 下载自解压安装程序 - 363 Kb

    Sample Image - TabbedMDI.gif

    我们为基于 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 界面所采取的两个步骤。

    1. 在您的 CMainFrame 类中,声明一个 COXTabClientWnd 类的变量。
      COXTabClientWnd m_MTIClientWnd;
              
    2. 在您的 CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) 函数实现中,添加以下代码行:
      m_MTIClientWnd.Attach(this);

    就是这样。

    示例

    Samples 目录中包含的 TabbedMDI 项目展示了该类的实际应用。在那里,您将看到如何自定义选项卡式 MDI 界面的外观。


    COXTabWorkspace

    SetOffset

    设置选项卡控件与 MDIFrame 客户区域边框之间的边距。

    GetOffset

    检索选项卡控件与 MDIFrame 客户区域边框之间的边距。

    AcceptDraggedObject

    设置/移除选项卡控件的拖放对象支持。

    IsAcceptingDraggedObject

    检索一个标志,该标志指定当对象拖放到选项卡控件项目上时,控件是否激活相应的 MDIChild 窗口。

    void SetOffset(const DWORD dwOffset)

    参数

    dwOffset

    MDIFrame 窗口客户区域到选项卡控件显示位置的偏移量(以点为单位)。

    备注

    设置选项卡控件与 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

    用选项卡式 MDI 替换标准的 MDI 界面。

    Detach

    恢复标准的 MDI 界面。

    IsAttached

    检索一个标志,该标志指定标准 MDI 界面是否已被增强的选项卡式 MDI 替换。

    GetTabCtrl

    获取关联的选项卡控件。

    GetParentFrame

    获取父 MDIFrame。

    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 窗口的指针。

  • © . All rights reserved.