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函数。

代码如下

 

        CSize size;
	size.cx=10;size.cy=10;
	m_LC_TabCtrl.SetPadding(size);

        m_LC_TabCtrl.InsertItem(0,_T("文件/文件夹"));
	m_LC_TabCtrl.InsertItem(1,_T("快捷方式"));
	m_LC_TabCtrl.InsertItem(2,_T("快捷安装"));
	m_LC_TabCtrl.HighlightItem(0,TRUE);
	m_LC_TabCtrl.HighlightItem(1,TRUE);
	m_LC_TabCtrl.HighlightItem(2,TRUE);
	CRect rect; rect.left=50;rect.right=500;rect.top=20;rect.bottom=50;
	m_LC_TabCtrl.AdjustRect(TRUE,rect);
    
	m_lc_dlg1.Create(IDD_LC_DIALOG1,GetDlgItem(IDD_LC_DIALOG1));
	m_lc_dlg2.Create(IDD_LC_DIALOG2,GetDlgItem(IDD_LC_DIALOG2));
	m_lc_dlg3.Create(IDD_LC_DIALOG3,GetDlgItem(IDD_LC_DIALOG3));

	m_LC_TabCtrl.GetClientRect(&rect);
	rect.top+=100; 
	//rect.bottom-=4; 
	rect.left+=100; 
	rect.right-=8; 
	m_lc_dlg1.MoveWindow(&rect);
	m_lc_dlg2.MoveWindow(&rect);
	m_lc_dlg3.MoveWindow(&rect);

	m_lc_dlg1.ShowWindow(TRUE);
	m_LC_TabCtrl.SetCurSel(1);


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

 

 

void CLocalSpeedyPPage::OnSelchangeLcTab1(NMHDR *pNMHDR, LRESULT *pResult)
{
	// TODO: 在此添加控件通知处理程序代码
	int curSel=m_LC_TabCtrl.GetCurSel();
	switch(curSel)
	{
	     case 0:
			 m_lc_dlg1.ShowWindow(TRUE);
			 m_lc_dlg2.ShowWindow(FALSE);
			 m_lc_dlg3.ShowWindow(FALSE);
			 break;
		 case 1:
			 m_lc_dlg1.ShowWindow(FALSE);
			 m_lc_dlg2.ShowWindow(TRUE);
			 m_lc_dlg3.ShowWindow(FALSE);
			 break;
		 case 2:
			 m_lc_dlg1.ShowWindow(FALSE);
			 m_lc_dlg2.ShowWindow(FALSE);
			 m_lc_dlg3.ShowWindow(TRUE);
			 break;
	}
	*pResult = 0;
}


至此 漂亮的界面就做出来了

什么是架构设计?架构设计看这篇文章就够了

Redis为什么这么快?

重磅:解读2020年最新JVM生态报告

BIO,NIO,AIO 总结

JDK8的新特性,你知道多少?

回复“资料”,免费获取 一份独家呕心整理的技术资料! image

 

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

非典型理科男

1毛钱打赏,让作者更有动力噢

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

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

打赏作者

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

抵扣说明:

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

余额充值