CMFCOutlookBar 类
在 Microsoft Outlook 2000 或 Outlook 2003 中具有 “导航窗格” 可视外观的选项卡式窗格。 CMFCOutlookBar
对象包含一个 CMFCOutlookBarTabCtrl 类对象和一系列选项卡。 选项卡可以是 CMFCOutlookBarPane 类 对象或 CWnd
派生对象。 对于用户,Outlook 栏显示为一系列按钮和一个显示区域。 用户单击按钮时,将显示相应控件或按钮窗格。
语法
class CMFCOutlookBar : public CBaseTabbedPane
成员
公共构造函数
名称 | 描述 |
---|---|
CMFCOutlookBar::CMFCOutlookBar |
默认构造函数。 |
CMFCOutlookBar::~CMFCOutlookBar |
析构函数。 |
公共方法
注解
有关 Outlook 栏的示例,请参阅 OutlookDemo 示例:MFC OutlookDemo 应用程序。
实现 Outlook 栏
若要在应用程序中使用 CMFCOutlookBar
控件,请执行以下步骤:
将
CMFCOutlookBar
对象嵌入主框架窗口类。class CMainFrame : public CMDIFrameWnd { // ... CMFCOutlookBar m_wndOutlookBar; CMFCOutlookBarPane m_wndOutlookPane; // ... };
在主框架中处理 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);
使用 CBaseTabbedPane::GetUnderlyingWindow 获取指向基础
CMFCOutlookBarTabCtrl
的指针。CMFCOutlookBarTabCtrl* pOutlookBar = (CMFCOutlookBarTabCtrl*) m_wndOutlookBar.GetUnderlyingWindow ();
为每个包含按钮的选项卡创建 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);
调用 CMFCOutlookBarTabCtrl::AddTab 以添加每个新标签。将 bDetachable 参数设置为 FALSE,使页面不可拆分。 或者,使用 CMFCOutlookBarTabCtrl::AddControl 添加可拆离的页面。
pOutlookBar->AddTab (&m_wndOutlookPane, "General", (UINT) -1, TRUE);
若要将
CWnd
派生控件(例如,CMFCShellTreeCtrl 类)添加为选项卡,请创建控件并调用 CMFCOutlookBarTabCtrl::AddTab,将其添加到 Outlook 栏。
注意
应为每个 CMFCOutlookBarPane 类对象和每个 CWnd
派生对象使用唯一控件 ID。
若要在运行时动态添加或删除新页面,请使用 CMFCOutlookBar::CreateCustomPage 和 CMFCOutlookBar::RemoveCustomPage。
Outlook 2003 模式
在 Outlook 2003 模式下,选项卡按钮位于 Outlook 栏窗格的底部。 当没有足够的空间来显示按钮时,它们会在窗格底部类似工具栏的区域中以图表形式进行显示。
使用 CMFCOutlookBar::SetMode2003 启用 Outlook 2003 模式。 使用 CMFCOutlookBarTabCtrl::SetToolbarImageList 设置包含显示在 Outlook 栏底部的图标的位图。 位图中的图标必须按选项卡索引进行排序。
继承层次结构
要求
标头: 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 类