OutlookTabCtrl - 另一种 Tab






4.92/5 (49投票s)
此控件是另一种选项卡。选项卡显示为水平条纹,并且可以折叠成按钮。每个选项卡都分配有自己的窗口,单击选项卡时会显示该窗口。
引言
此控件是另一种选项卡。选项卡显示为水平条纹,并且可以折叠成位于单独区域中的按钮。每个选项卡都分配有自己的窗口,单击选项卡时会显示该窗口。可以在按钮区域中显示一个附加按钮。您可以使用它来显示菜单等。
该控件派生自 CWnd
,并且是基于 MFC 的公共控件。可以将其放置在任何窗口上:主框架、对话框等。
Using the Code
要创建控件并向其添加元素,您可以执行以下步骤
#include "OutlookTabCtrl.h"
OutlookTabCtrlEx<OutlookTabCtrlCustom1> m_TabCtrl;
CListCtrl m_List1, m_List2;
...
if( !m_TabCtrl.Create(this, WS_CHILD | WS_VISIBLE,CRect(10,10,100,200), ID_OutlookTabCtrl) )
return -1; // error.
// Create an ImageList with icons for tabs displayed as stripes.
m_TabCtrl.CreateStripeImage(NULL,IDB_STRIPE_NORMAL,IDB_STRIPE_DISABLE,true,24);
// Create an ImageList with icons for tabs displayed as buttons.
m_TabCtrl.CreateButtonImage(NULL,IDB_BUTTON_NORMAL,IDB_BUTTON_DISABLE,true,16);
// Create child controls.
if( !m_List1.Create(WS_CLIPCHILDREN | LVS_REPORT, CRect(0,0,0,0), &m_TabCtrl,ID_List1) ||
!m_List2.Create(WS_CLIPCHILDREN | LVS_REPORT, CRect(0,0,0,0), &m_TabCtrl,ID_List2) )
return -1; // error.
m_List1.InsertColumn(0,"Mail",LVCFMT_LEFT,100);
m_List2.InsertColumn(0,"Calendar",LVCFMT_LEFT,100);
// Add child items in the m_TabCtrl.
if( !m_TabCtrl.AddItem(&m_List1,"Mail",0,0) ||
!m_TabCtrl.AddItem(&m_List2,"Calendar",1,1) )
return -1; // error.
// Load state from registry.
if( !m_TabCtrl.LoadState(AfxGetApp(),"OutlookTabCtrl","State") )
m_TabCtrl.PushVisibleItem(); // create default state.
m_TabCtrl.Update();
OutlookTabCtrl
类不绘制自身。为此,请从 OutlookTabCtrl::Draw
类继承并实现其函数。必须通过调用 SetDrawManager
函数将指向 OutlookTabCtrl::Draw
的指针传递给控件。类 OutlookTabCtrlCustom1
...OutlookTabCtrlCustom4
是 OutlookTabCtrl::Draw
类的现成实现。 它们各自以自己的风格渲染 OutlookTabCtrl
。 OutlookTabCtrlEx
类可帮助您将 OutlookTabCtrl
与渲染类结合使用。例如,像这样:OutlookTabCtrlEx<OutlookTabCtrlCustom2> ctrl;
。
OutlookTabCtrl::IRecalc
接口设置控件中区域的大小。 OutlookTabCtrl
类有自己的 OutlookTabCtrl::IRecalc
实现。 但是,您也可以自己实现 OutlookTabCtrl::IRecalc
接口,并使用 SetRecalcManager
函数将指向它的指针传递到控件中。
还有三个附加类:Ability
、Notify
和 ToolTip
。 Ability
类允许用户选择任何选项卡。 Notify
通知某些事件的发生。 ToolTip
管理按钮状态下选项卡的工具提示的创建。 指向每个类的实现的指针也必须传递给 OutlookTabCtrl
。
所有新添加项的窗口应具有唯一的标识符。项目可以处于条纹或按钮状态。默认情况下,项目添加为条纹。用户应调用 Update
函数以显示由函数 DeleteItem
、SetItemWindow
、SelectItem
等设置的结果。您可以隐藏项目 (ShowItem
) 或阻止它 (DisableItem
)。 也可以获得所有可见项目 (GetVisibleIndexByHandle
) 或控件中所有项目 (GetIndexByHandle
) 中项目的索引。 控件可以从注册表或其他来源(LoadState
/SaveState
)保存和加载其元素的位置及其可见性。 这只是可能性的一部分。 要了解更多信息,请查看 OutlookTabCtrl
类的 public
接口。
祝您好运!
历史
- 2007 年 10 月 4 日 - 发布原始版本
- 2007 年 10 月 11 日 - 修复了添加
Dialog
作为子控件的问题; 添加了函数SetLayout
和SetButtonsAlign
以确定控件区域的位置 - 2008 年 12 月 17 日 - 只是纠正了一些小错误
- 2021 年 3 月 16 日 - 改进了文章的来源和文本