TabControl控件用法图解[转载]
1.创建一个基于对话框的MFC工程,名称设置为“My”。
2.在自动生成的对话框模板中,删除“TODO: Place dialog controls here.”静态文本框、“OK”按钮和“Cancel”按钮。
在对话框资源上从工具箱中添加上一个TabControl控件;
3. 根据需要修改一下属性,然后右击控件,为这个控件添加一个变量,将此控件跟一个CTabCtrl类变量绑定在一起,这里设为m_tabctrl
4. 创建两个新的对话框其属性作如下修改:
Border:none //边界为空,这样它就没了标题栏
Style :Child // 这样这个模板就可以当作另一个窗口的子窗口了。
Title Bar:False
在上面加一些控件什么的,具体操作跟普通对话框没有区别。
完成后从这两个对话框模板生成新的对话框类CDlg1,CDlg2。
5. 在主对话框头文件CMydlg.h中 #include "Dlg1.h"、#include "Dlg2.h",
并为新添加进来的2个类增加2个变量:
CDlg1 page1;
CDlg2 page2;
6. 在主对话框的OnInitDialog()函数中添加如下类似的代码:
1 // TODO: 在此添加额外的初始化代码 2 TCITEM item; 3 4 item.mask = TCIF_TEXT; 5 item.pszText =_T( "第一页"); 6 m_tabctrl.InsertItem (0,&item); // 插入第一个标签 7 8 item.pszText =_T("第二页"); 9 m_tabctrl.InsertItem (1,&item); // 插入第二个标签 10 11 page1.Create (IDD_DIALOG1,&m_tabctrl); // 创建第一个标签 12 page2.Create (IDD_DIALOG2,&m_tabctrl); // 创建第二个标签 13 14 CRect rect; 15 m_tabctrl.GetClientRect(&rect); // 获取标签控件客户区Rect 16 // 调整tabRect,使其覆盖范围适合放置标签页 17 rect.top+=20; 18 rect.bottom-=4; 19 rect.left+=4; 20 rect.right-=4; 21 22 page1.MoveWindow(&rect); 23 page2.MoveWindow(&rect); 24 page1.ShowWindow(TRUE); 25 m_tabctrl.SetCurSel(0); 26 27 return TRUE; // 除非将焦点设置到控件,否则返回 TRUE
7. 在主对话中为标签控件添加一个标签选择改变(TCN_SELCHANGE)的控件通知消息,以便在用户选择标签时通知主对话框。在主对话框的编辑界面右击标签控件,选择添加一个事件处理程序,选择可以完成这个操作。
8.在事件处理中添加如下代码,如下例:
1 void CMyDlg::OnTcnSelchangeTab1(NMHDR *pNMHDR, LRESULT *pResult) 2 { 3 // TODO: Add your control notification handler code here 4 int CurSel; 5 CurSel = m_tabctrl.GetCurSel(); //获得选中的页签 6 switch(CurSel) 7 { 8 case 0: 9 { 10 /// 如果选中第一个页签时,显示第一页,隐藏第二页 11 page1.ShowWindow(TRUE); 12 page2.ShowWindow(FALSE); 13 } 14 break; 15 case 1: 16 { 17 /// 如果选中第二个页签时,显示第二页,隐藏第一页 18 page1.ShowWindow(FALSE); 19 page2.ShowWindow(TRUE); 20 } 21 break; 22 } 23 *pResult = 0; 24 }
注意: 为了不使显示的子对话框覆盖标签控件的显示,所以要获得标签控件的尺寸然后设置各页面的尺寸。