mfc tab控件标签切换,mfc button control

  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;

  }

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: