现在的位置: 首页 > 综合 > 正文

MFC控件使用-CTabCtrl

2018年02月09日 ⁄ 综合 ⁄ 共 2952字 ⁄ 字号 评论关闭

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

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


抱歉!评论已关闭.