MFC控件使用-CTabCtrl

  使用过属性表和属性页控件的人,使用感觉方便的同时,又感觉困惑。能不能改变属性页标签的位置,比如放在窗体的左侧,能不能制作出漂亮的界面。这些问题完全可以由CTabCtrl解决。

  网上详细讲解这个控件文章很少,大多讲的比较基础。最近做一个项目要用到,因此就好好学习了,写了来供交流。引用请注明出处:

1、CTabCtrl控件概观

CTabCtrl类是MFC类CWnd类的子类。类的层次结构如图1所示。

 

CObject
 └CCmdTarget
    └CWnd
       └CTabCtrl

 

使用CTabCtrl可以做成像属性页(CProperPage)一样的标签页(停靠卡),而且他的位置可以放在界面的左侧。我的项目中做出来的效果如图2所示。

                                             图2 CTabCtrl控件效果

2、CTabCtrl控件成员变量和成员函数介绍

一个“标签控件”类似于一个笔记本中的分隔器,或一个文件柜上的标签。通过使用标签控件,应用程序可以将一个窗口或对话框的相同区域定义为多个页面。每一页包含了一套信息或一组控件,当用户选择了相应的标签时应用程序就会显示相应的信息或控件。一种特殊类型的标签控件把标签显示得像按钮一样。点击一个按钮将立即执行一条命令而不是显示一个页。
CTabCtrl类提供了Windows通用标签控件的性能。这个控件(也就是CTabCtrl类)只对运行在Windows 95和Windows NT 3.51或更新版本下的程序来说是可用的。
有关使用CTabCtrl的更多信息,参见“Visual C++程序员指南”中的“控件主题”和“使用CTabCtrl”。

1、构建CTabCtrl对象

上面是MSDN中的说明。构建一个CTabCtrl对象,我们可以在工具栏中直接添加,然后添加控件变量,也可以使用Create或者CreateEx动态创建或者附加一个CTabCtrl控件。

2、CTabCtrl控件操作

构建好一个空间后,我们开始使用它的成员函数,进行一些操作和控制。成员函数如下:

分一下类,比较常用的主要实现一下三种功能。

 

功能成员函数
操作属性(获得窗口属性,设置窗口属性,设置图像)GetExtendedStyle获取扩展样式
GetImageList 获取图像
GetItemRect获取控件大小
GetToolTips获取工具提示
SetExtendedStyle设置扩展样式
SetImageList设置图像
SetItemSize设置选项卡大小
SetMinTabWidth设置最小选项卡宽度
SetPadding设置选项卡之间间隔
SetToolTips设置工具提示
HighlightItem高亮显示
RemoveImage取出图像
停靠卡对象操作InsertItem插入元素
GetItem获得元素
GetItemCount获得元素书目
GetItemState获得元素状态
GetRowCount获得行数
SetItem设置元素
SetItemExtra
SetItemState设置元素状态
DeleteAllItems删除所有元素
DeleteItem删除元素
DeselectAll重置所有元素

 

 

3、常用操作

1、做出放左侧的选项卡

效果如图所示

步骤:

1、添加一个对话框程序,在主界面中添加一个TabCtrl控件,并添加一个变量m_LC_TabCtrl

2、添加三个空对话框,ID分别为IDD_LC_DiALOG1,IDD_LC_DiALOG2,IDD_LC_DiALOG3,并关联三个对话框的类,类名分别为CLCDlg1,CLCDlg2,CLCDlg3

分别删除对话框中的确定和取消按钮并加上不同的静态文字

3、在主对话框的头文件中添加三个对话框变量,并加上头文件。

CLCDlg1 m_lc_dlg1;CLCDlg2 m_lc_dlg2;CLCDlg3 m_lc_dlg3;

#include "LCDlg1.h"
#include "LCDlg2.h"
#include "LCDlg3.h"

4、重写主对话框的OnInitDialog函数。

代码如下

 

[html]  view plain  copy
 
 
  1.        CSize size;  
  2. size.cx=10;size.cy=10;  
  3. m_LC_TabCtrl.SetPadding(size);  
  4.   
  5.        m_LC_TabCtrl.InsertItem(0,_T("文件/文件夹"));  
  6. m_LC_TabCtrl.InsertItem(1,_T("快捷方式"));  
  7. m_LC_TabCtrl.InsertItem(2,_T("快捷安装"));  
  8. m_LC_TabCtrl.HighlightItem(0,TRUE);  
  9. m_LC_TabCtrl.HighlightItem(1,TRUE);  
  10. m_LC_TabCtrl.HighlightItem(2,TRUE);  
  11. CRect rect; rect.left=50;rect.right=500;rect.top=20;rect.bottom=50;  
  12. m_LC_TabCtrl.AdjustRect(TRUE,rect);  
  13.      
  14. m_lc_dlg1.Create(IDD_LC_DIALOG1,GetDlgItem(IDD_LC_DIALOG1));  
  15. m_lc_dlg2.Create(IDD_LC_DIALOG2,GetDlgItem(IDD_LC_DIALOG2));  
  16. m_lc_dlg3.Create(IDD_LC_DIALOG3,GetDlgItem(IDD_LC_DIALOG3));  
  17.   
  18. m_LC_TabCtrl.GetClientRect(&rect);  
  19. rect.top+=100;   
  20. //rect.bottom-=4;   
  21. rect.left+=100;   
  22. rect.right-=8;   
  23. m_lc_dlg1.MoveWindow(&rect);  
  24. m_lc_dlg2.MoveWindow(&rect);  
  25. m_lc_dlg3.MoveWindow(&rect);  
  26.   
  27. m_lc_dlg1.ShowWindow(TRUE);  
  28. m_LC_TabCtrl.SetCurSel(1);  


5、为TabCtrl控件添加OnSelect()消息

 

 

[html]  view plain  copy
 
 
  1. void CLocalSpeedyPPage::OnSelchangeLcTab1(NMHDR *pNMHDR, LRESULT *pResult)  
  2. {  
  3.     // TODO: 在此添加控件通知处理程序代码  
  4.     int curSel=m_LC_TabCtrl.GetCurSel();  
  5.     switch(curSel)  
  6.     {  
  7.          case 0:  
  8.              m_lc_dlg1.ShowWindow(TRUE);  
  9.              m_lc_dlg2.ShowWindow(FALSE);  
  10.              m_lc_dlg3.ShowWindow(FALSE);  
  11.              break;  
  12.          case 1:  
  13.              m_lc_dlg1.ShowWindow(FALSE);  
  14.              m_lc_dlg2.ShowWindow(TRUE);  
  15.              m_lc_dlg3.ShowWindow(FALSE);  
  16.              break;  
  17.          case 2:  
  18.              m_lc_dlg1.ShowWindow(FALSE);  
  19.              m_lc_dlg2.ShowWindow(FALSE);  
  20.              m_lc_dlg3.ShowWindow(TRUE);  
  21.              break;  
  22.     }  
  23.     *pResult = 0;  
  24. }  

 

 

 

单选按钮通常成组使用,每个单选按钮都代表一组相互排斥的选项中的一个。当为第一个单选按钮设置了Group属性后,随后的几个单选按钮就和这个按钮属于同一组了,直到遇到下一个(按照TAB顺序)具有Group属性的控件为止。

 

1、设置RadioA的Group属性,关联int型变量m_RadioA。

此时6个单选按钮属于同组。依次点击RadioA至RadioF,m_RadioA的值由0变为5。

 

2、设置RadioE的Group属性,关联int型变量m_RadioE。

此时RadioA至RadioD同组,RadioE和RadioF同组。依次点击RadioA至RadioD,m_RadioA的值由0变为3。依次点击RadioE至RadioF,m_RadioE的值由0变为1。

 
备注:

(1)对一组单选按钮来说,需要设置该组第一个单选按钮Group属性,然后才能在类向导里看到单选按钮的ID并为其关联变量。

(2)初始化时可设置关联变量的值选择默认选中按钮。-1表示未选中任何按钮。

 

(3)资源视图下,格式->Tab键顺序,依次点击控件可改变Tab键顺序。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值