mfc tab控件标签切换,mfc button control
1.创建一个新的MFC项目,将其命名为MyTab,选择Dialog based,然后单击Finish。
2.删除对话框上默认添加的三个控件。添加一个选项卡控件控件,并在Property属性中将其ID设置为IDC_TABTEST。在更多样式中勾选底部。调整大小,使其遍布整个对话框。我的选项卡控件的大小最终是164X203。在ClassWizard中添加一个名为m_tab的变量。类型为CTabCtrl。
3.在对话框的初始化函数OnInitDialog中添加以下代码:
M_tab。InsertItem(0,“参数一”);//添加一个选项卡参数
M_tab。InsertItem(1,“参数二”);//添加参数2页签
M_tab。InsertItem(2,“结果”);//添加结果选项卡
4.在对话框资源中添加三个对话框资源,它们的id分别命名为IDD _ para1、IDD _ para2和IDD _ result。字体为宋体,字号为9,样式为子,边框为无,宽度调整为161。然后基于CDialog类添加相应的C para1、C para2和C result。
5.在CMyTabDlg类中添加三个成员变量M _ para1、M _ para2和M _ result,它们是三个子对话框的例子。代码如下:
CResult m _ result
cpara 2m _ para 2;
cpara 1m _ para 1;
6.在IDD_PARA1对话框上添加一个内容为 parameter one 的静态文本控件,然后在后面插入一个文本框控件,使用ClassWizard将其关联到一个名为m_nPara1的int变量中;
在IDD_PARA2对话框中,添加一个内容为 parameter 2 的静态文本控件,然后在后面插入一个文本框控件,通过ClassWizard将其与一个名为m _ npar2的int变量关联起来。
在IDD_result对话框上添加一个内容为 RESULT 的静态文本控件,然后在后面插入一个文本框控件,使用ClassWizard将其关联到一个名为m _ nResult的int变量中。
7.为CPara1类添加成员函数int GetParaValue()代码,如下所示:
int CPara1:GetParaValue()
.{
返回m _ nPara1
}
为CPara2类添加成员函数int GetParaValue()代码,如下所示:
int CPara2:GetParaValue()
.{
返回m _ nPara2
}
为CResult类添加成员函数void SetResultValue(int nResult)代码,如下所示:
void c result:set result value(int n result)
.{
m _ nResult=nResult
}
8.在IDD_MYTAB_DIALOG对话框的初始化函数OnInitDialog中添加以下代码:
//关联对话框,设置IDC_TABTEST控件为父窗口。
m_para1。Create(IDD_PARA1,GetDlgItem(IDC _ tab test));
m_para2。Create(IDD_PARA2,GetDlgItem(IDC _ tab test));
m _结果。Create(IDD_RESULT,GetDlgItem(IDC _ tab test));
//获取IDC_TABTEST客户区大小
CRect rs
m_tab。GetClientRect(RS);
//调整子对话框在父窗口中的位置
RS . top=1;
RS . bottom-=60;
RS . left=1;
RS . right-=2;
//设置子对话框大小并将其移动到指定位置
m_para1。移动窗口(RS);
m_para2。移动窗口(RS);
m _结果。移动窗口(RS);
//分别设置隐藏和显示
m_para1。show window(true);
m_para2。show window(false);
m _结果。show window(false);
//设置默认选项卡
m_tab。SetCurSel(0);
9.在选项卡控件的onselChangeTabTest(nm HDR * pnm HDR,LRESULT * PRESULT)上添加TCN_SELCHANGE事件响应函数。函数体代码如下:
int CurSel=m_tab。GetCurSel();
开关(光标)
.{
案例0:
m_para1。show window(true);
m_para2。show window(false);
m _结果。show window(false);
打破;
案例1:
m_para1。show window(false);
m_para2。show window(true);
m _结果。show window(false);
打破;
案例二:
m_para1。show window(false);
m_para2。show window(false);
m _结果。show window(true);
打破;
默认值:
;
}
* pResult=0;
10.在IDD_MYTAB_DIALOG对话框下添加一个标题为 Calculate 的按钮,为其添加一个事件响应函数。代码如下:
m_para1。update data(true);
m_para2。update data(true);
m _结果。SetResultValue(m_para1。GetParaValue() m_para2。GetParaValue());
m _结果。update data(false);
11.最终演示结果如下:
12.这个小程序很简单,但是解释了Tab控件的基本用法。
2用法
VC中CTabCtrl的用法与VB和Delphi中tab控件的用法有很大不同。每个属性页都是由一个“窗口”(对话框)实现的,所以构建类、关联和初始化每个属性页对话框要麻烦得多。但是CTabCtrl的复用性比ActiveX tab控件要好,因为一个属性页可以被很多不同的tab对话框调用,就像MFC中很多属性页都有“General”这个选项页,可以被多个控件的属性页调用。作为一个“通用”,它符合现代软件工程的可复用性要求。
下面是最简单的代码,使用CTabCtrl控件实现属性页功能。
1.建立基于对话框的应用程序;
2.绘制CTabCtrl控件。ClassWizard中的关联变量名为m_tab,三个新创建的对话框的属性都设置为Child,None none。使用ClassWizard生成新类。基类为Cdialog,分别为Cpage0、Cpage1、Cpage2,ID号分别为IDD_DIALOG0、IDD_DIALOG1、IDD_DIALOG2。在主对话框中添加三个变量,CPAGE0PAGE 0Cpage1第1页;第二页.不要忘记在主对话框的头文件中包含# include page0.h 、# include page1.h 和# include page2.h 。
3.在主对话框的OnInitDialog()中初始化:
//TODO:在此添加额外的初始化
//初始化m_tab控件
M_tab。InsertItem(0,呵呵,茅野工作室);
M_tab。InsertItem(1,嘻嘻);
M_tab。InsertItem(2,哈哈,www . Mao yeah . com );
//创建属性页的每一页
第0页Create(IDD_DIALOG0,GetDlgItem(IDC _ tab 1));
第1页。Create(IDD_DIALOG1,GetDlgItem(IDC _ tab 1));
第2页。Create(IDD_DIALOG2,GetDlgItem(IDC _ tab 1));
//设置页面在m_tab控件范围内的位置
CRect rect
m_tab。GetClientRect(rect);
rect.top=20
rect . bottom-=5;
rect . left=5;
rect . right-=5;
第0页move window(rect);
第1页。move window(rect);
第2页。move window(rect);
第1页。show window(TRUE);
m_tab。SetCurSel(1);
4.当选择m_tab控件的属性页时,将显示每一页:
void cmy 3dlg:onselchangetab 1(nmh dr * pNMHDR,LRESULT* pResult)
{
//TODO:在此添加控件通知处理程序代码
int CurSel
CurSel=m_tab。GetCurSel();
开关(光标)
{
案例0:
第0页show window(TRUE);
第1页。show window(FALSE);
第2页。show window(FALSE);
打破;
案例1:
第0页show window(FALSE);
第1页。show window(TRUE);
第2页。show window(FALSE);
打破;
案例二:
第0页show window(FALSE);
第1页。show window(FALSE);
第2页。show window(TRUE);
打破;
默认值:
}
* pResult=0;
}