CMFCOutlookBar 类

在 Microsoft Outlook 2000 或 Outlook 2003 中具有 “导航窗格” 可视外观的选项卡式窗格。 CMFCOutlookBar 对象包含一个 CMFCOutlookBarTabCtrl 类对象和一系列选项卡。 选项卡可以是 CMFCOutlookBarPane 类 对象或 CWnd 派生对象。 对于用户,Outlook 栏显示为一系列按钮和一个显示区域。 用户单击按钮时,将显示相应控件或按钮窗格。

语法

class CMFCOutlookBar : public CBaseTabbedPane

成员

公共构造函数

名称 描述
CMFCOutlookBar::CMFCOutlookBar 默认构造函数。
CMFCOutlookBar::~CMFCOutlookBar 析构函数。

公共方法

名称 描述
CMFCOutlookBar::AllowDestroyEmptyTabbedPane 指定是否可以销毁空的选项卡式窗格。 (重写 CBaseTabbedPane::AllowDestroyEmptyTabbedPane。)
CMFCOutlookBar::CanAcceptPane 确定是否可以将另一个窗格停靠到 Outlook 栏窗格。 (重写 CDockablePane::CanAcceptPane。)
CMFCOutlookBar::CanSetCaptionTextToTabName 确定选项卡式窗格的标题是否显示与活动选项卡相同的文本。(重写 CBaseTabbedPane::CanSetCaptionTextToTabName。)
CMFCOutlookBar::Create 创建 Outlook 栏控件。
CMFCOutlookBar::CreateCustomPage 创建自定义 Outlook 栏选项卡。
CMFCOutlookBar::CreateObject 由框架用于创建此类类型的动态实例。
CMFCOutlookBar::DoesAllowDynInsertBefore 确定用户是否可以将控件栏停靠在 Outlook 栏的外部边缘。
CMFCOutlookBar::FloatTab 仅当窗格中当前驻留在拆离的选项卡中时浮动窗格。(替代 CBaseTabbedPane::FloatTab。)
CMFCOutlookBar::GetButtonsFont 返回 Outlook 栏按钮上文本的字体。
CMFCOutlookBar::GetTabArea 返回 Outlook 栏上的选项卡区域的大小和位置。 (Overrides CBaseTabbedPane::GetTabArea.)
CMFCOutlookBar::GetThisClass 由框架用于获取指向与此类类型关联的 CRuntimeClass 对象的指针。
CMFCOutlookBar::IsMode2003 确定 Outlook 栏的行为是否模仿 Microsoft Office Outlook 2003 的行为(请参阅备注)。
CMFCOutlookBar::OnAfterAnimation 使用动画设置活动选项卡后由 CMFCOutlookBarTabCtrl::SetActiveTab 调用。
CMFCOutlookBar::OnBeforeAnimation 在使用动画效果将标签页设置为活动标签之前由 CMFCOutlookBarTabCtrl::SetActiveTab 调用。
CMFCOutlookBar::OnScroll 如果 Outlook 栏向上或向下滚动,则由框架调用。
CMFCOutlookBar::RemoveCustomPage 删除自定义 Outlook 栏选项卡。
CMFCOutlookBar::SetButtonsFont 设置 Outlook 栏按钮上文本的字体。
CMFCOutlookBar::SetMode2003 指定 Outlook 栏的行为是否模仿 Outlook 2003 的行为(请参阅备注)。

注解

有关 Outlook 栏的示例,请参阅 OutlookDemo 示例:MFC OutlookDemo 应用程序

实现 Outlook 栏

若要在应用程序中使用 CMFCOutlookBar 控件,请执行以下步骤:

  1. CMFCOutlookBar 对象嵌入主框架窗口类。

    class CMainFrame : public CMDIFrameWnd
    {
        // ...
        CMFCOutlookBar m_wndOutlookBar;
        CMFCOutlookBarPane m_wndOutlookPane;
        // ...
    };
    
  2. 在主框架中处理 WM_CREATE 消息时,调用 CMFCOutlookBar::Create 方法创建 Outlook 栏选项卡控件。

    m_wndOutlookBar.Create (_T("Shortcuts"),
        this,
        CRect (0, 0, 100, 100),
        ID_VIEW_OUTLOOKBAR,
        WS_CHILD | WS_VISIBLE | CBRS_LEFT);
    
  3. 使用 CBaseTabbedPane::GetUnderlyingWindow 获取指向基础 CMFCOutlookBarTabCtrl 的指针。

    CMFCOutlookBarTabCtrl* pOutlookBar = (CMFCOutlookBarTabCtrl*) m_wndOutlookBar.GetUnderlyingWindow ();
    
  4. 为每个包含按钮的选项卡创建 CMFCOutlookBarPane 类对象。

    m_wndOutlookPane.Create(&m_wndOutlookBar,
        AFX_DEFAULT_TOOLBAR_STYLE,
        ID_OUTLOOK_PANE_GENERAL,
        AFX_CBRS_FLOAT | AFX_CBRS_RESIZE);
    
    // make the Outlook pane detachable (enable docking)
    m_wndOutlookPane.EnableDocking(CBRS_ALIGN_ANY);
    
    // add buttons
    m_wndOutlookPane.AddButton(theApp.LoadIcon (IDR_MAINFRAME),
        "About",
        ID_APP_ABOUT);
    
    m_wndOutlookPane.AddButton (theApp.LoadIcon (IDR_CUSTOM_OPEN_ICON),
        "Open",
        ID_FILE_OPEN);
    
  5. 调用 CMFCOutlookBarTabCtrl::AddTab 以添加每个新标签。将 bDetachable 参数设置为 FALSE,使页面不可拆分。 或者,使用 CMFCOutlookBarTabCtrl::AddControl 添加可拆离的页面。

    pOutlookBar->AddTab (&m_wndOutlookPane, "General", (UINT) -1, TRUE);
    
  6. 若要将 CWnd 派生控件(例如,CMFCShellTreeCtrl 类)添加为选项卡,请创建控件并调用 CMFCOutlookBarTabCtrl::AddTab,将其添加到 Outlook 栏。

注意

应为每个 CMFCOutlookBarPane 类对象和每个 CWnd 派生对象使用唯一控件 ID。

若要在运行时动态添加或删除新页面,请使用 CMFCOutlookBar::CreateCustomPageCMFCOutlookBar::RemoveCustomPage

Outlook 2003 模式

在 Outlook 2003 模式下,选项卡按钮位于 Outlook 栏窗格的底部。 当没有足够的空间来显示按钮时,它们会在窗格底部类似工具栏的区域中以图表形式进行显示。

使用 CMFCOutlookBar::SetMode2003 启用 Outlook 2003 模式。 使用 CMFCOutlookBarTabCtrl::SetToolbarImageList 设置包含显示在 Outlook 栏底部的图标的位图。 位图中的图标必须按选项卡索引进行排序。

继承层次结构

CObject

CCmdTarget

CWnd

CBasePane

CPane

CDockablePane

CBaseTabbedPane

CMFCOutlookBar

要求

标头: afxoutlookbar.h

CMFCOutlookBar::AllowDestroyEmptyTabbedPane

指定是否可以销毁空的选项卡式窗格。

virtual BOOL AllowDestroyEmptyTabbedPane() const;

返回值

如果可以销毁空的选项卡式窗格,则为 TRUE;否则为 FALSE。 默认实现始终返回 TRUE。

备注

如果无法销毁空制表位窗格,则框架会将其隐藏。

CMFCOutlookBar::CanAcceptPane

确定是否可以将另一个窗格停靠到 Outlook 栏窗格。

virtual BOOL CanAcceptPane(const CBasePane* pBar) const;

参数

pBar
[in] 指向停靠在此窗格的另一个窗格的指针。

返回值

如果另一个窗格可以停靠到 Outlook 栏窗格,则为 TRUE;否则为 FALSE。

备注

如果 Outlook 栏处于 Outlook 2003 模式,则不支持停靠,因此返回值为 FALSE。

如果 pBar 参数为 NULL,则此方法返回 FALSE

否则,此方法的行为与基方法 CBasePane::CanAcceptPane 相同,除了一点:即使未启用停靠,Outlook 栏仍可以使另一个 Outlook 栏停靠在其上。

CMFCOutlookBar::CanSetCaptionTextToTabName

确定选项卡式窗格的标题是否显示与活动选项卡相同的文本。

virtual BOOL CanSetCaptionTextToTabName() const;

返回值

如果 Outlook 栏窗口标题自动设置为活动选项卡的文本,则为 TRUE;否则为 FALSE。

注解

使用 CBaseTabbedPane::EnableSetCaptionTextToTabName 启用或禁用此功能。

在 Outlook 2003 模式下,始终启用此设置。

CMFCOutlookBar::Create

创建 Outlook 栏控件。

virtual BOOL Create(
    LPCTSTR lpszCaption,
    CWnd* pParentWnd,
    const RECT& rect,
    UINT nID,
    DWORD dwStyle,
    DWORD dwControlBarStyle=AFX_CBRS_RESIZE,
    CCreateContext* pContext=NULL);

参数

lpszCaption
[in] 指定窗口标题。

pParentWnd
[in] 指定指向父窗口的指针。 不得为 NULL。

rect
[in] 指定 Outlook 栏大小和位置(以像素为单位)。

nID
[in] 指定控件 ID。 必须与应用程序中使用的其他控件 ID 不同。

dwStyle
[in] 指定所需的控件条样式。 有关可能的值,请参阅窗口样式

dwControlBarStyle
[in] 指定特殊库定义的样式。

pContext
[in] 创建上下文。

返回值

如果此方法成功,返回值为非零;否则返回值是 0。

注解

请分两步构造 CMFCOutlookBar 对象。 首先调用构造函数,然后调用 Create,这将创建 Outlook 栏控件并将其附加到 CMFCOutlookBar 对象。

有关将由 dwControlBarStyle 指定的可用的库定义的样式的列表,请参阅 CBasePane::CreateEx

示例

下面的示例演示如何使用 CMFCOutlookBar 类的 Create 方法。 此代码片段是 Outlook 多视图示例的一部分。

CMFCOutlookBar m_wndShortcutsBar;
// int nInitialWidth
// CString strCaption
if (!m_wndShortcutsBar.Create(strCaption, this,
                              CRect(0, 0, nInitialWidth, nInitialWidth),
                              ID_VIEW_OUTLOOKBAR, WS_CHILD | WS_VISIBLE | CBRS_LEFT))
{
   TRACE0("Failed to create outlook bar\n");
   return FALSE; // fail to create
}

CMFCOutlookBar::CreateCustomPage

创建自定义 Outlook 栏选项卡。

CMFCOutlookBarPane* CreateCustomPage(
    LPCTSTR lpszPageName,
    BOOL bActivatePage=TRUE,
    DWORD dwEnabledDocking=CBRS_ALIGN_ANY,
    BOOL bEnableTextLabels=TRUE);

参数

lpszPageName
[in] 页面标签。

bActivatePage
[in] 如果为 TRUE,则页面在创建时变为活动状态。

dwEnabledDocking
[in] CBRS_ALIGN_标志的组合,指定在拆离页面时启用的停靠端。

bEnableTextLabels
[in] 如果为 TRUE,则为页面上的按钮启用文本标签。

返回值

指向新建页面的指针,如果创建失败,则为 NULL。

备注

用户可以通过此方法创建自定义 Outlook 栏页。 每个应用程序最多可以创建 100 个页面。 页面控件 ID 从 0xF000 开始。 如果自定义 Outlook 栏页面总数超过 100,则创建失败。

使用 CMFCOutlookBar::RemoveCustomPage 删除自定义页面。

CMFCOutlookBar::DoesAllowDynInsertBefore

指定用户是否可以将窗格停靠在 Outlook 栏的外部边缘。

DECLARE_MESSAGE_MAP virtual BOOL DoesAllowDynInsertBefore() const;

返回值

默认实现返回 FALSE。

注解

框架在查找停靠动态窗格的位置时调用 DoesAllowDynInsertBefore 方法。 如果函数返回 FALSE,则框架不允许在窗格外部边缘停靠任何动态窗格。

通常,将 Outlook 栏创建为静态非浮动控件。 可以在派生类中重写此函数,并返回 TRUE 以更改此行为。

注意

由于动态窗格在停靠时会检查停靠的静态窗格的状态,因此应尽可能将动态窗格停靠在静态窗格之后。

CMFCOutlookBar::FloatTab

使窗格浮动。

virtual BOOL FloatTab(
    CWnd* pBar,
    int nTabID,
    AFX_DOCK_METHOD dockMethod,
    BOOL bHide);

参数

pBar
[in] 指向要浮动的窗格的指针。

nTabID
[in] 要浮动的选项卡的从零开始的索引。

dockMethod
[in] 指定用于使窗格浮动的方法。 有关详细信息,请参阅 CBaseTabbedPane::FloatTab

bHide
[in] 如果在窗格浮动之前进行隐藏,则为 TRUE;否则为 FALSE。 不同于此方法的基类版本,此参数没有默认值。

返回值

如果窗格已浮动,则为 TRUE;否则为 FALSE。

备注

此方法类似于 CBaseTabbedPane::FloatTab,但不会使 Outlook 栏控件上的最后一个剩余选项卡浮动。

CMFCOutlookBar::GetButtonsFont

返回 Outlook 栏的页面按钮选项卡上文本的字体。

CFont* GetButtonsFont() const;

返回值

指向用于在 Outlook 栏页面按钮选项卡上显示文本的字体对象的指针。

注解

使用此函数检索用于显示 Outlook 页面按钮选项卡上文本的字体。 可以通过调用 CMFCOutlookBar::SetButtonsFont 来设置字体。

CMFCOutlookBar::GetTabArea

确定 Outlook 栏上的选项卡区域的大小和位置。

virtual void GetTabArea(
    CRect& rectTabAreaTop,
    CRect& rectTabAreaBottom) const;

参数

rectTabAreaTop
[out] 包含函数返回时顶部选项卡区域的大小和位置(在客户端坐标中)。

rectTabAreaBottom
[out] 包含函数返回时底部选项卡区域的大小和位置(在客户端坐标中)。

注解

框架调用此方法来确定目标窗格的停靠类型。 当框架确定用户将要停靠的窗格拖放到目标窗格的选项卡区域上时,它会尝试将第一个窗格添加为目标窗格的新选项卡。 否则,它会尝试将第一个窗格停靠在目标窗格的相应一侧。 框架会创建一个包含滑块的新容器,以容纳其他停靠窗格。

如果 Outlook 栏是静态的(也就是说,如果 Outlook 栏无法浮动),则 GetTabArea 的默认实现返回 Outlook 栏的整个工作区。 否则,它将返回页面按钮在 Outlook 栏控件顶部和底部所位于的区域。

CMFCOutlookBar 派生类中重写此方法以更改此行为。

CMFCOutlookBar::IsMode2003

指定 Outlook 栏的行为是否模仿 Microsoft Office Outlook 2003 的行为。

BOOL IsMode2003() const;

返回值

如果 Outlook 栏在 Microsoft Office 2003 模式下运行,则返回值为非零;否则为 0。

备注

可以使用 CMFCOutlookBar::SetMode2003 启用此模式。

CMFCOutlookBar::OnAfterAnimation

使用动画设置活动选项卡后由 CMFCOutlookBarTabCtrl::SetActiveTab 调用。

virtual void OnAfterAnimation(int nPage);

参数

nPage
[in] 已处于活动状态的选项卡页的从零开始的索引。

备注

设置活动选项卡的视觉效果取决于是否启用了动画。 有关详细信息,请参阅 CMFCOutlookBarTabCtrl::EnableAnimation

CMFCOutlookBar::OnBeforeAnimation

在使用动画效果将标签页设置为活动标签之前由 CMFCOutlookBarTabCtrl::SetActiveTab 调用。

virtual BOOL OnBeforeAnimation(int nPage);

参数

nPage
[in] 即将设置为活动状态的选项卡页的从零开始的索引。

返回值

如果在设置新活动选项卡时应使用动画,则返回 TRUE;如果应禁用动画,则返回 FALSE。

备注

CMFCOutlookBar::OnScroll

如果 Outlook 栏向上或向下滚动,则由框架调用。

virtual void OnScroll(BOOL bDown);

参数

bDown
[in] 如果 Outlook 栏向下滚动,则为 TRUE;如果 Outlook 栏向上滚动,则为 FALSE。

备注

CMFCOutlookBar::RemoveCustomPage

删除自定义 Outlook 栏选项卡页。

BOOL RemoveCustomPage(
    UINT uiPage,
    CMFCOutlookBarTabCtrl* pTargetWnd);

参数

uiPage
[in] 父 Outlook 窗口中页面的从零开始的索引。

pTargetWnd
[in] 指向父 Outlook 窗口的指针。

返回值

如果已成功删除自定义页面,则返回值为非零;否则为 0。

备注

调用此函数以删除自定义页面。 删除页面后,其控件 ID 将返回到可用 ID 池。

必须提供指向要删除的页面当前所在的 CMFCOutlookBarTabCtrl 类对象的指针。 请注意,用户可以在不同 Outlook 栏之间移动可拆离页面,但有关自定义页面的信息驻留在为其调用 CMFCOutlookBar::CreateCustomPage 的 Outlook 栏对象中。

使用 CBaseTabbedPane::GetUnderlyingWindow 获取指向 Outlook 窗口的指针。

CMFCOutlookBar::SetButtonsFont

设置 Outlook 栏按钮上文本的字体。

void SetButtonsFont(
    CFont* pFont,
    BOOL bRedraw=TRUE);

参数

pFont
[in] 指定新字体。

bRedraw
[in] 如果为 TRUE,则将重绘 Outlook 栏。

备注

使用此方法为 Outlook 选项卡页按钮上显示的文本设置字体。

CMFCOutlookBar::SetMode2003

指定 Outlook 栏的行为是否模仿 Outlook 2003 的行为。

void SetMode2003(BOOL bMode2003=TRUE);

参数

bMode2003
[in] 如果为 TRUE,则启用 Office 2003 模式。

备注

使用此函数启用或禁用 Office 2003 模式。 在此模式下,Outlook 栏具有带有自定义按钮的其他工具栏。 Outlook 栏的行为符合 Microsoft Office 2003 中 Outlook 栏的行为。

默认情况下,该模式被禁用。

注意

必须在 CMFCOutlookBar::Create 之前调用此函数。

另请参阅

层次结构图

CBaseTabbedPane 类
CMFCOutlookBarTabCtrl 类
CMFCOutlookBarPane 类