当前位置:网站首页>MFC高级控件之Tab控件( CTabCtrl )
MFC高级控件之Tab控件( CTabCtrl )
2022-07-27 16:45:00 【Bill66】
标签控件提供了一组标签按钮以及与按钮对应的显示页面,用户可以单击标签按钮选择不同的显示页面,这个不同的页面实际上是不同的对话框。要使用标签控件需包含的头文件为afxcmn.h,可以在头文件中加入一下代码:
#include <afxcmn.h>
CTabCtrl 类的成员函数如下(摘自MSDN Library):
构造
| CTabCtrl | 构造一个CTabCtrl对象 |
| Create | 创建一个标签控件并将它与一个CTabCtrl对象连接 |
属性
| GetImageList | 获取与一个标签控件相关的图像列表 |
| SetImageList | 将一个图像列表分配给一个标签控件 |
| GetItemCount | 获取此标签控件中的标签的数目 |
| GetItem | 获取此标签控件中的某一个标签的信息 |
| SetItemExtra | 设置一个标签控件中的每一个标签为应用程序定义的数据所保留的字节数 |
| GetItemRect | 获取一个标签控件中的一个标签的边界矩形 |
| GetCurSel | 确定在一个标签控件中当前选择的标签 |
| SetCurSel | 在一个标签控件中选择一个标签 |
| SetCurFocus | 将焦点设置到一个标签控件中的指定标签上 |
| SetItemSize | 设置某个项的宽度和高度 |
| SetPadding | 设置一个标签控件中的每一个标签的图标和标签周围的空间(填料) |
| GetRowCount | 获取一个标签控件中的标签的当前行数 |
| GetToolTips | 获取与一个标签控件相关联的工具提示控件的句柄 |
| SetToolTips | 将一个工具提示控件赋给一个标签控件 |
| GetCurFocus | 获取一个标签控件的具有当前焦点的标签 |
| SetMinTabWidth | 设置一个标签控件中的项的最小宽度 |
| GetExtendedStyle | 获取标签控件当前使用的扩展风格 |
| SetExTendedStyle | 设置一个标签控件的扩展风格 |
| GetItemState | 获取指定标签控件项的状态 |
| SetItemState | 设置指定标签控件项的状态 |
操作
| InsertItem | 在一个标签控件中插入一个新的标签 |
| DeleteItem | 从一个标签控件中删除一项 |
| DeleteAllItems | 从一个标签控件中删除所有的项 |
| AdjustRect | 根据一个给定的窗口矩形来估算一个标签控件的的显示区域,或根据一个给定的显示区域来估算与之对应的窗口矩形 |
| RemoveImage | 从一个标签控件的图像列表中删除一个图像 |
| HitTest | 确定哪一个标签(如果有的话)位于指定的屏幕位置 |
| DeselectAll | 重新设置一个标签控件中的项,清除任何被按下的项 |
| HighlightItem | 设置一个标签项的加亮状态 |
可重载函数
| DrawItem | 绘制一个标签控件的指定项 |
下面以实例来演示CTabCtrl控件的创建,常用成员函数的应用。
1.新建MFC对话框项目。在对话框中添加一个CTabCtrl控件,如下:

2.为该控价关联一个一个变量,如下:

3. 为让运行后的程序界面更好看一些,在对话框中添加一个GroupBox控件,并将先前添加的CTabCtrl控件拖到GroupBox控件中,并添加一个按钮,如下图示:

上面有显示顺序,如果 GroupBox控件的顺序为1,CTabCtrl控件会被GroupBox控件覆盖而显示不出来。
4. 插入内容 在对话框的OnInitDialog()函数中添加如下代码:

完整的 OnInitDialog()函数代码如下:
BOOL CCTabCtrlTestDlg::OnInitDialog()
{
CDialogEx::OnInitDialog();
// 将“关于...”菜单项添加到系统菜单中。
// IDM_ABOUTBOX 必须在系统命令范围内。
ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX < 0xF000);
CMenu* pSysMenu = GetSystemMenu(FALSE);
if (pSysMenu != nullptr)
{
BOOL bNameValid;
CString strAboutMenu;
bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX);
ASSERT(bNameValid);
if (!strAboutMenu.IsEmpty())
{
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
}
}
// 设置此对话框的图标。 当应用程序主窗口不是对话框时,框架将自动
// 执行此操作
SetIcon(m_hIcon, TRUE); // 设置大图标
SetIcon(m_hIcon, FALSE); // 设置小图标
// TODO: 在此添加额外的初始化代码
m_TabCtrl.InsertItem(0,_T("产品设计"));
m_TabCtrl.InsertItem(1, _T("模具设计与制造"));
m_TabCtrl.InsertItem(2, _T("治具及配套专机设计与制造"));
m_TabCtrl.InsertItem(3, _T("样品制作与确认"));
m_TabCtrl.InsertItem(4, _T("量试及移交量产"));
m_TabCtrl, ShowWindow(SW_SHOW);
return TRUE; // 除非将焦点设置到控件,否则返回 TRUE
}开始执行不调试,结果如下:

5. 设计标签对话框 分别设计对应的对话框,将新设计的对话框的Style设置为child,并为对话框添加相应的类。如下:



6. 在CTabCtrlTestDlg.h中包含新建对话框响应类的头文件,如下:
#include "CPTest.h"
#include "CSample.h"
#include "CMoldDesignAndManufacture.h"
#include "CTMDesignAndManufacture.h"
#include "CDialog_PDesign.h"
7. 在CTabCtrlTestDlg.h中声明变量,如下:
CDialog_PDesign* pCDialog_PDesign;
CPTest* pCPTest;
CSample* pCSample;
CMoldDesignAndManufacture* pCMoldDesignAndManufacture;
CTMDesignAndManufacture* pCTMDesignAndManufacture;
8. CTabCtrlTestDlg.cpp的OnInitDialog()中添加如下代码:

添加代码后的OnInitDialog()如下:
BOOL CCTabCtrlTestDlg::OnInitDialog()
{
CDialogEx::OnInitDialog();
// 将“关于...”菜单项添加到系统菜单中。
// IDM_ABOUTBOX 必须在系统命令范围内。
ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX < 0xF000);
CMenu* pSysMenu = GetSystemMenu(FALSE);
if (pSysMenu != nullptr)
{
BOOL bNameValid;
CString strAboutMenu;
bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX);
ASSERT(bNameValid);
if (!strAboutMenu.IsEmpty())
{
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
}
}
// 设置此对话框的图标。 当应用程序主窗口不是对话框时,框架将自动
// 执行此操作
SetIcon(m_hIcon, TRUE); // 设置大图标
SetIcon(m_hIcon, FALSE); // 设置小图标
// TODO: 在此添加额外的初始化代码
m_TabCtrl.InsertItem(0,_T("产品设计"));
m_TabCtrl.InsertItem(1, _T("模具设计与制造"));
m_TabCtrl.InsertItem(2, _T("治具及配套专机设计与制造"));
m_TabCtrl.InsertItem(3, _T("样品制作与确认"));
m_TabCtrl.InsertItem(4, _T("量试及移交量产"));
pCDialog_PDesign = new CDialog_PDesign();
pCDialog_PDesign->Create(IDD_DIALOG_PDESIGN,&m_TabCtrl);
pCPTest = new CPTest();
pCPTest->Create(IDD_DIALOG_PTEST, &m_TabCtrl);
pCSample = new CSample();
pCSample->Create(IDD_DIALOG_SAMPLING, &m_TabCtrl);
pCMoldDesignAndManufacture = new CMoldDesignAndManufacture();
pCMoldDesignAndManufacture->Create(IDD_DIALOG_MOLDDM, &m_TabCtrl);
pCTMDesignAndManufacture = new CTMDesignAndManufacture();
pCTMDesignAndManufacture->Create(IDD_DIALOG_TMDM, &m_TabCtrl);
pCDialog_PDesign->CenterWindow();
pCDialog_PDesign->ShowWindow(SW_SHOW);
return TRUE; // 除非将焦点设置到控件,否则返回 TRUE
}9.为对话中的CTabCtrl控件添加OnTcnSelchange消息处理函数,如下:
void CCTabCtrlTestDlg::OnTcnSelchangeTab1(NMHDR *pNMHDR, LRESULT *pResult)
{
// TODO: 在此添加控件通知处理程序代码
int mSel = m_TabCtrl.GetCurSel();
switch (mSel)
{
case 0:
pCDialog_PDesign->CenterWindow();
pCDialog_PDesign->ShowWindow(SW_SHOW);
pCPTest-> ShowWindow(SW_HIDE);
pCSample-> ShowWindow(SW_HIDE);
pCMoldDesignAndManufacture-> ShowWindow(SW_HIDE);
pCTMDesignAndManufacture-> ShowWindow(SW_HIDE);
break;
case 1:
pCDialog_PDesign->ShowWindow(SW_HIDE);
pCPTest->ShowWindow(SW_HIDE);
pCSample->ShowWindow(SW_HIDE);
pCMoldDesignAndManufacture->CenterWindow();
pCMoldDesignAndManufacture->ShowWindow(SW_SHOW);
pCTMDesignAndManufacture->ShowWindow(SW_HIDE);
break;
case 2:
pCDialog_PDesign->ShowWindow(SW_HIDE);
pCPTest->ShowWindow(SW_HIDE);
pCSample->ShowWindow(SW_HIDE);
pCMoldDesignAndManufacture->ShowWindow(SW_HIDE);
pCTMDesignAndManufacture->CenterWindow();
pCTMDesignAndManufacture->ShowWindow(SW_SHOW);
break;
case 3:
pCDialog_PDesign->ShowWindow(SW_HIDE);
pCPTest->ShowWindow(SW_HIDE);
pCSample->CenterWindow();
pCSample->ShowWindow(SW_SHOW);
pCMoldDesignAndManufacture->ShowWindow(SW_HIDE);
pCTMDesignAndManufacture->ShowWindow(SW_HIDE);
break;
case 4:
pCDialog_PDesign->ShowWindow(SW_HIDE);
pCPTest->CenterWindow();
pCPTest->ShowWindow(SW_SHOW);
pCSample->ShowWindow(SW_HIDE);
pCMoldDesignAndManufacture->ShowWindow(SW_HIDE);
pCTMDesignAndManufacture->ShowWindow(SW_HIDE);
break;
default:
pCDialog_PDesign->CenterWindow();
pCDialog_PDesign->ShowWindow(SW_SHOW);
pCPTest->ShowWindow(SW_HIDE);
pCSample->ShowWindow(SW_HIDE);
pCMoldDesignAndManufacture->ShowWindow(SW_HIDE);
pCTMDesignAndManufacture->ShowWindow(SW_HIDE);
break;
}
*pResult = 0;
}执行程序(不调试),结果如下:

点击“模具设计与制造”,结果如下:

这里已完整演示了CTabCtrl(标签)控件的创建过程,对话框中的实现就不去完成了。
边栏推荐
- 5W奖金池/面向高校,2022法律科技创新大赛报名火热进行中
- Self control principle learning notes - system stability analysis (2) - loop analysis and Nyquist bode criterion
- An article allows you to master threads and thread pools, and also solves thread safety problems. Are you sure you want to take a look?
- SSM project uses filter to realize login monitoring
- 【云图说】 第250期 初识华为云微服务引擎CSE
- Nacos cluster deployment - high availability guarantee
- kettle switch / case 控件实现分类处理
- Programming jump
- JS common utils encapsulation
- ES6 learning notes (1) - quick start
猜你喜欢

5W奖金池/面向高校,2022法律科技创新大赛报名火热进行中

"Testing novice encyclopedia" 5-minute quick start pytest automated testing framework

sql 字段类型转换

I'm afraid I won't use the JMeter interface testing tool if I accept this practical case

Basic use of Nacos (1) - getting started

阿里云对象存储OSS的开通和使用

SQL field type conversion

Unity shows Kinect captured shots

JMeter interface automation - how to solve the content type conflict of request headers

Idea optimization strategy
随机推荐
[cloud picture theory] the first time to know Huawei cloud micro service engine CSE in issue 250
Role authorization --- complete the addition and deletion of secondary menus by adding and deleting primary menus
转行软测&跳槽到新公司,工作怎样快速上手?
Useful resources for ns2
Summary of "performance test" of special test
kettle入门级操作第一篇(读取excel、输出excel)
MySQL学习笔记(2)——存储过程与存储函数
SSM project uses filter to realize login monitoring
Introduction to assembly language (1)
Basic network faults and troubleshooting
200 lines of code quick start document database monogodb
There is another example of repeater
Down sampling - signal phase and aliasing
go-zero单体服务使用泛型简化注册Handler路由
Memory management A4
Subscription and use of Alibaba cloud video on demand service
101. (cesium chapter) cesium particle system - snow
WSN journal indexed by SCI
SQL time processing (SQL server\oracle)
SQL server top 关键字使用