TabControl的用法总结
因为程序需要,有好长的时间自己都在研究VC的TabControl控件的用法,虽然逢人就问,见网就查,可是一直都没搞明白怎么回事.就在昨天,就在昨天,…突然醒悟,呵呵,因为这,晚上还加班到九点,突然觉得爱死VC了,哈哈…..
我发现网上很多有关TabControl的用法文章写的都不透彻,可能是我比较笨的缘故吧,哈哈…
下面我自己总结总结:
TabControl的使用原理:窗口上添加TabControl控件之后,通过建立一个关联的CTabCtrl类型的变量来操作控件,然后第一页面的具体实现细节,通过类来实现.
TabControl具体的使用方法:
第一步:
通过向导建立一个mfc的基于对话框应用程序项目.
然后在窗口中添加TabControl控件如图:
第二步,通过classwizard为TabControl控件添加关联的CTabControl成员变量m_tabctrl,如图:
第三步:通添加两个Dialog对话框,注意这个添加的Dialog一定不要选择什么proppage等的类型,就添加普通的Dialog就行(这里我因为添加的是proppage类型的Dialog,所以在这里困了很久,当页面显示的时候总是页面里的控件得不到焦点).通过右击下图中的Dialog文件夹,然后选择insertDialog.
这里选择两个Dialog的目的是想做成一个具体两个页面的页表控件.如下图
第四步,能过classwizard为两个Dialog添加关联的类Cprop1,Cprop2..添加完成之后的类列表如下图:
第五步:在上图的 这个类中添加两个Cprop1和Cprop2类型的成员变量,再添加一个CDialog* 类型的数组 pDialog[2] 如下图
在CPageTest3Dlg的OnInitDialog()成员函数中添加如下代码:
TCITEM item;
item.mask = TCIF_TEXT;
item.pszText = "第一页";
m_tabctrl.InsertItem (0,&item);
item.pszText = "第二页";
m_tabctrl.InsertItem (1,&item);
m_prop1.Create(IDD_DIALOG1,&m_tabctrl);
m_prop2.Create(IDD_DIALOG2,&m_tabctrl);
CRect rc;
m_tabctrl.GetClientRect(rc);
rc.top += 40;
rc.bottom -= 10;
rc.left += 10;
rc.right -= 10;
m_prop1.MoveWindow(&rc);
m_prop2.MoveWindow(&rc);
//用数组把对话框对象指针保存起来
pDialog[0] = &m_prop1;
pDialog[1] = &m_prop2;
//显示初始页面
pDialog[0]->ShowWindow(SW_SHOW);
pDialog[1]->ShowWindow(SW_HIDE);
第六步:为TabControl控件添加TCN_SELCHANGE消息映射函数OnSelchangeTab1(),然后在函数中加入下面的代码:
int CurSel = m_tabctrl.GetCurSel();
switch(CurSel)
{
case 0:
m_prop1.ShowWindow(true);
m_prop2.ShowWindow(false);
//m_result.ShowWindow(false);
break;
case 1:
m_prop1.ShowWindow(false);
m_prop2.ShowWindow(true);
//m_result.ShowWindow(false);
break;
case 2:
m_prop1.ShowWindow(false);
m_prop2.ShowWindow(false);
//m_result.ShowWindow(true);
break;
default:
;
}
这段代码的作用是,当选择某页时,使得当前页显示,其它的页隐藏.
如果想设计自己风格的程序,就可以利用类Cprop1和对话框IDD_DIALOG1, 类Cprop2和对话框IDD_DIALOG2来实现了.