在 WTL 中禁用 CTabCtrl 选项卡项 - 使用自绘方法






4.80/5 (4投票s)
2002年7月18日
1分钟阅读

94426

3177
Paul Dilascia 的 MFC CTabCtrlWithDisable 移植到 WTL。
引言
我需要一个选项卡控件,能够启用和禁用某些选项卡项。我搜索后发现了 Paul Dilascia 的 CTabCtrlWithDisable
文章。这正是我需要的,只是它是用 MFC 编写的。这篇文章基本上是将他的代码转换为 WTL。
有关 Paul Dilascia 原始文章的更多信息,请参阅 此处
要求
您需要 WTL 库,可以从 Microsoft 网站下载。网上有很多文章介绍如何操作,所以我就不赘述了。
如何在你的 WTL 应用中使用该控件
- 将头文件 atlTabCtrlWithDisable.h 添加到将使用该控件的对话框源代码中。控件类名为
CTabCtrlWithDisable。
您还需要在 stdafx.h 文件中添加 atlmisc.h。 - 您需要重写基类
CTabCtrlWithDisable
并设置纯虚函数IsTabEnabled
,例如: - 在
OnInitDialog
函数中实例化类并对控件进行子类化,例如: - 调用
InitTabStatus
方法。请注意对InitTabStatus
的调用,此函数在插入选项卡项后调用,它基本上会对选项卡项的状态进行检查,以查看是否有任何选项卡项需要禁用。 - 将
REFLECT_NOTIFICATIONS()
添加到调用类的消息映射的末尾。
class CMyTabCtrlWithDisable : public CTabCtrlWithDisable
{
public:
BOOL IsTabEnabled(int nTab)
{
return (nTab !=2);
}
};
注意 - isTabEnabled
函数确定哪个选项卡将被禁用
有关此类的设计的更多信息 - 请参阅原始文章
CString sBuff;
m_ctlTab.SubclassDlgItem(IDC_TAB1, *this);
TCITEM item = { 0 };
item.mask = TCIF_TEXT;
sBuff = _T("Tab 1");
item.pszText = sBuff.GetBuffer(sBuff.GetLength());
sBuff.ReleaseBuffer(sBuff.GetLength());
m_ctlTab.InsertItem(0, &item);
sBuff = _T("Tab 2");
item.pszText = sBuff.GetBuffer(sBuff.GetLength());
sBuff.ReleaseBuffer(sBuff.GetLength());
m_ctlTab.InsertItem(1, &item);
sBuff = _T("Tab 3");
item.pszText = sBuff.GetBuffer(sBuff.GetLength());
sBuff.ReleaseBuffer(sBuff.GetLength());
m_ctlTab.InsertItem(2, &item);
sBuff = _T("Tab 4");
item.pszText = sBuff.GetBuffer(sBuff.GetLength());
sBuff.ReleaseBuffer(sBuff.GetLength());
m_ctlTab.InsertItem(2, &item);
sBuff = _T("Tab 5");
item.pszText = sBuff.GetBuffer(sBuff.GetLength());
sBuff.ReleaseBuffer(sBuff.GetLength());
m_ctlTab.InsertItem(2, &item);
m_ctlTab.InitTabStatus();
完成了!!!
演示应用程序演示了如何在 WTL 对话框类中使用该控件。