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

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

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.80/5 (4投票s)

2002年7月18日

1分钟阅读

viewsIcon

94426

downloadIcon

3177

Paul Dilascia 的 MFC CTabCtrlWithDisable 移植到 WTL。

Sample Image - atldisabledtabctrl.jpg

引言

我需要一个选项卡控件,能够启用和禁用某些选项卡项。我搜索后发现了 Paul Dilascia 的 CTabCtrlWithDisable 文章。这正是我需要的,只是它是用 MFC 编写的。这篇文章基本上是将他的代码转换为 WTL。

有关 Paul Dilascia 原始文章的更多信息,请参阅 此处

要求

您需要 WTL 库,可以从 Microsoft 网站下载。网上有很多文章介绍如何操作,所以我就不赘述了。

如何在你的 WTL 应用中使用该控件

  1. 将头文件 atlTabCtrlWithDisable.h 添加到将使用该控件的对话框源代码中。控件类名为 CTabCtrlWithDisable。 您还需要在 stdafx.h 文件中添加 atlmisc.h
  2. 您需要重写基类 CTabCtrlWithDisable 并设置纯虚函数 IsTabEnabled ,例如:
  3. class CMyTabCtrlWithDisable : public CTabCtrlWithDisable 
    { 
    public: 
       BOOL IsTabEnabled(int nTab) 
       { 
          return (nTab !=2);
       }
    };
    

    注意 - isTabEnabled 函数确定哪个选项卡将被禁用

    有关此类的设计的更多信息 - 请参阅原始文章

  4. OnInitDialog 函数中实例化类并对控件进行子类化,例如:
  5.        
    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();       
  6. 调用 InitTabStatus 方法。请注意对 InitTabStatus 的调用,此函数在插入选项卡项后调用,它基本上会对选项卡项的状态进行检查,以查看是否有任何选项卡项需要禁用。
  7. REFLECT_NOTIFICATIONS() 添加到调用类的消息映射的末尾。

完成了!!!

演示应用程序演示了如何在 WTL 对话框类中使用该控件。

© . All rights reserved.