在VC中使用TabCtrl(TAB控件)

在VC中使用TabCtrl无疑是一件相当令人头疼的事情,而偏偏网上的相关资料又比较稀少,一些现成解决方案也多少存在一些问题,于是参考一些现成的TabCtrl类经过糅合修改成以下的一个类:CTabSheet
该类以vckbase的一篇文章《 在对话框中加入属性页》中提到的“方案五”的CTabSheet类为模板,并参考 CodeProject的CXTabCtrl、XPTabCtrl以及网上的一些其它资料修改而成。
该类具有以下特点:每个标签页都使用一个对话框以设计该页界面,可以随意设置禁用某页,可以设置隐藏TAB控件(用各页的对话框遮盖),可以随意设置选项卡的位置(顶部、底部、左边、右边),可以自由的添加或删除某页,可以为某个选项卡添加图标。

使用方法:
添加对话框资源,并且各个子对话框资源的属性应设置为:Style为Child,Border为None。为这些对话框建立类(直接从CDialog继承)如CPage1、CPage2……
在主对话框的类中添加成员变量:CPage1 m_Page1;、CPage2 m_Page2;……
在主对话框资源中,加入一个Tab Control,并且适当调整位置和大小。利用ClassWizard来为这个Tab Control创建一个CTabSheet的控件变量m_TabSheet。
在主对话框的OnInitDialog()加入:
m_TabSheet.AddPage("tab1", &m_page1, IDD_DIALOG1);
m_TabSheet.AddPage("tab2", &m_page2, IDD_DIALOG2);
……
如果要给标签加上图标,在AddPage之前设置好ImageList:
    //为TabCtrl控件添加图标
    m_imageList.Create(16, 16, ILC_COLOR32, 1, 1);
    CBitmap bitmap1,bitmap2;
    bitmap1.LoadBitmap(IDB_BITMAP1);
    bitmap2.LoadBitmap(IDB_BITMAP2);
    m_imageList.Add(&bitmap1, RGB(0,0,0));
    m_imageList.Add(&bitmap2, RGB(0,0,0));
    m_TabSheet.SetImageList(&m_imageList);
   
    //给TabCtrl添加页
    m_TabSheet.AddPage(_T("Page1"), &m_Page1, m_Page1.IDD, 0);
    m_TabSheet.AddPage(_T("第二页"), &m_Page2, m_Page2.IDD, 1);
很不可思议的是,我在测试中,如果在工程中没有把TabCtrl的标签设置成左边或右边的话,那么在运行时修改标签的位置为左边或右边时会出现问题,但是只要曾经设置过TabCtrl的标签为左边或右边后,以后运行不管工程中的TabCtrl的标签是怎样设置的,在运行时都可以正确的修改其标签的位置。
示例工程文件见我的网络硬盘:http://wooddoor.ys168.com/
以下是该CTabSheet类的源码:
//------------------------------TabSheet.h---------------------------------------///
  1. #if !defined(AFX_TABSHEET_H__42EE262D_D15F_46D5_8F26_28FD049E99F4__INCLUDED_)
  2. #define AFX_TABSHEET_H__42EE262D_D15F_46D5_8F26_28FD049E99F4__INCLUDED_
  3. #if _MSC_VER > 1000
  4. #pragma once
  5. #endif // _MSC_VER > 1000
  6. // TabSheet.h : header file
  7. //
  8. /
  9. // CTabSheet window
  10. class CTabSheet : public CTabCtrl
  11. {
  12. // Construction
  13. public:
  14.     CTabSheet();
  15.     virtual ~CTabSheet();
  16. // Attributes
  17. public:
  18. // Operations
  19. public:
  20. // Overrides
  21.     // ClassWizard generated virtual function overrides
  22.     //{ {AFX_VIRTUAL(CTabSheet)
  23. protected:
  24.     virtual  void DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct);
  25.     // override to draw text only; eg, colored text or different font
  26.     virtual  void OnDrawText(CDC& dc, CRect rc, CString sText, BOOL bDisabled, UINT format);
  27.     virtual void PreSubclassWindow();
  28.     //}}AFX_VIRTUAL
  29. // Implementation
  30. public:
  31.     int GetCurSel();
  32.     int SetCurSel(int nItem);
  33.     //void Show();
  34.     BOOL AddPage(LPCTSTR title, CDialog *pDialog, UINT ID, int nImage=-1);
  35.     void EnableTab(int iIndex, BOOL bEnable = TRUE);//Index从0开始计数
  36.     void EnableAllTabs(BOOL bEnable = TRUE);
  37.     void DeleteAllTabs();
  38.     void DeleteTab(int iIndex);
  39.     virtual BOOL IsTabEnabled(int iIndex);
  40.     BOOL HideTab(BOOL bHide = FALSE);
  41.     BOOL IsTabHided();
  42.     enum ITEMPOS{TOP,BOTTOM,LEFT,RIGHT};//设置选项卡的位置:顶、底、左、右
  43.     void SetItemPos(ITEMPOS nItemPos);//设置选项卡的位置:顶、底、左、右
阅读终点,创作起航,您可以撰写心得或摘录文章要点写篇博文。去创作
  • 1
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
MFC(Microsoft Foundation Classes)提供了Tab Control类来实现选项卡件。Tab Control是一种常见的界面布局,可以在一个窗口切换显示不同的内容。 要在MFC应用程序使用Tab Control,可以按照以下步骤进行操作: 1. 在资源编辑器将一个Tab Control件添加到你的对话框或窗口。可以在工具栏上找到Tab Control件,并将其拖放到对话框或窗口的位置。 2. 在类视图找到对应的对话框类,并添加一个成员变量来Tab Control件。右键单击对话框类,在上下文菜单选择"Add Variable"。在对话框变量向导,选择Tab Control件,并为其添加一个成员变量。 3. 在对话框的OnInitDialog()函数使用Tab Control件的成员变量来设置选项卡的标签和关联的对话框或窗口。可以使用TabCtrl_InsertItem()函数添加选项卡,使用TabCtrl_SetCurSel()函数设置当前选的选项卡。 4.为每个选项卡关联一个对话框或窗口,以便在切换选项卡时显示相应的内容。可以使用Create()函数创建对应的对话框或窗口,并使用ShowWindow()函数显示或隐藏对话框或窗口。 5. 可以在选项卡切换时处理相应的消息,以便在切换选项卡时执行一些操作。可以在对话框类的OnSelChange()函数处理WM_NOTIFY消息,使用TabCtrl_GetCurSel()函数获取当前选的选项卡索引,并根据需要执行相应的操作。 以上是使用MFC Tab Control的基本步骤,你可以根据自己的需求进行进一步的定制和扩展。希望对你有所帮助!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

gnuljf

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值