十六、标签控件(Tab Control)
作用:
在同一个区域显示不同的Dialog(对话框)
消息映射函数:
- NM_CLICK :指示用户已在控件内单击了左键
- NM_RCLICK : 指示用户已在控件中单击了鼠标右键
- NM_RELEASDCHPYURE :将鼠标捕获释放通知父级
- TCN_SELCHANGE : 指示选定已从一项变为另一项
- TCN_SELCHANGING : 指示选定向即将从一项变为另一项
属性:
- TCS_BUTTON 修改标签的外观,使它们看起来像按钮一样。
- TCS_FIXEDWIDTH 使所有的标签都具有相同的宽度。(缺省的,标签控件自动调整每一个标签的尺寸使之适合于它的图标。)不能将此风格与TCS_RIGHTJUSTIFY风格要求使用。
- · TCS_FOCUNEVER 表示一个标签永远也不会接收输入焦点。
- TCS_FOCUSONBUTTONDOWN 表示当点击一个标签时它接收输入焦点。通常这个风格只与TCS_BUTTONS风格一起使用。
- TCS_FORCEICONLEFT 将图标集中在左边,但标签标签仍然在中间。(缺省的,控件将图标和标签都放在中间,图标在标签的左边。)
- TCS_FORCELABELLEFT 左对齐图标和标签。
- TCS_MULTILINT 使一个标签控件显示多行标签。因此所有的标签都可以同时显示。(缺省的,一个标签控件只显示一行标签。)
- TCS_OWNERDRAWFIXED 指定由父窗口在该控件中绘制标签。
- TCS_RIGHTJUSTIFY 向右调整标签。(缺省的,标签在每一行中是向左调整的。)
- TCS_SHAREIMAGELISTS 表示当一个标签控件被销毁时,不销毁它的图像列表。
- TCS_TOOLTIPS 表示该标签控件具有一个与之关联的工具提示控件。
- TCS_TABS 标签就显示为标签,并且在显示区域的周围绘制了边框。这个风格是缺省的。
- TCS_SINGLELINE 只显示一行标签。用户可以根据需要通过滚动来查看更多的标签。这个风格是缺省的。
- TCS_RAGGEDRIGHT 不拉伸每一行标签来使之适合控件的整个宽度。这个风格是缺省的。
另外,你还可以将下面的窗口风格应用于一个标签控件: - WS_CHILD 创建一个代表标签控件的子窗口。不能
- WS_POPUP风格一起使用。
- WS_VISIBLE 创建一个初始可见的标签控件。
- WS_DISABLED 创建一个初始无效的窗口。
- WS_GROUP 指定一组控件中的第一个控件,在这组控件中用户可以使用箭头键从一个控件移动到另一个控件。在第一个控件后面的所有用WS_GROUP风格定义的控件都属于同一组。下一个具有WS_GROUP风格的控件结束这个风格组并开始下一个组(即,一组结束的地方就是另一组开始的地方)。
- WS_TABSTOP 指定用户可以通过使用TAB键到达的控件。用户按TAB键可以到达下一个具有WS_TABSTOP风格的控件。
使用方法:
1、创建标签页的控件型变量或者使用GetDlgItem()函数获取标签页的空间的句柄
CTabCtrl m_tab;
2、初始化标签页,使用InsertItem()函数添加新的标签。
m_tab.InsertItem(0,_T("第一页"));
m_tab.InsertItem(1, _T("第二页"));
3、创建标签页要显示的窗口(注意窗口的style属性要是child属性,这样才能显示的出来)。
CTabFirst m_tabfirst; //第一个窗口对象
CTabSecond m_tabscond;//第二个窗口对象
4、使用Dialog中的Create问对话框模板资源,使其父窗口为标签控件。创建完成之后,必须使用ShowWindow(TRUE)函数显示标签页窗口,才能显示窗口。
m_tabfirst.Create(MAKEINTRESOURCE(IDD_TABFIRST), &m_tab);
m_tabscond.Create(MAKEINTRESOURCE(IDD_TABSECOND), &m_tab);
CRect rect;
m_tab.GetClientRect(rect);//获取标签页的窗口大小。
rect.top += 22;
m_tabfirst.MoveWindow(rect);//将要显示的窗口调节之需要显示的位置。
m_tabscond.MoveWindow(rect);
m_tabfirst.ShowWindow(TRUE);//使用ShowWindow(TRUE)函数显示标签页窗口
4、创建TCN_SELCHANGE消息映射函数,通过GetCurSel函数获取当前选中的项。
void CCTabCtrlDlg::OnTcnSelchangeTab(NMHDR *pNMHDR, LRESULT *pResult)
{
// TODO: 在此添加控件通知处理程序代码
switch (m_tab.GetCurSel())
{
case 0:
m_tabscond.ShowWindow(FALSE);
m_tabfirst.ShowWindow(TRUE);
break;
case 1:
m_tabfirst.ShowWindow(FALSE);
m_tabscond.ShowWindow(TRUE);
break;
default:
m_tabfirst.ShowWindow(TRUE);
break;
}
*pResult = 0;
}