这是做毕设时,界面设计用到的,再次记录一下。
由于时间较长,图片上的有的有五个属性页有的有三个属性页,本应该只有三个属性页的。请看过的人体谅。
1、VS2010中建立一个MFC工程。步骤是文件à新建à项目àMFC应用程序à输入项目名字和目录(如图)à选择基于对话框程序(如图)其他直接下一页.最后生成一个初始项目(如图).
2、工具箱(如图)àTab Control,拉到大小合适的位置(如图).
然后画CTabCtrl控件,类向导中关联变量名为m_tab.选中选项卡à右键à添加变量(如图)
出现添加变量页(如图左),则在类Cmfcxxk1Dlg中出现变量(如图右)
3、新建三个对话框。
资源视图中插入三个Dialog对话框。
属性设为Style设为Child可作为子页;Border设置为None,为无边框。
主对话框中,右键(如图左)—>类向导(ClassWizard)(如图右)à添加类。
添加类界面如图:其中基类选择为CDialogEx,新建三个类的类名分别为Cpage1,Cpage2,Cpage3,ID号分别选为为IDD_DIALOG1,IDD_DIALOG2,IDD_DIALOG3(如图左)。在资源管理器中可以看到生成了三个类对应的头文件和源文件(如图右)。
在主对话框头文件mfcxxk1Dlg.h加入三个变量,Cpage1 page1;Cpage2 page2;Cpage3 page3。如图。
别忘了在主对话框的头文件中即mfcxxk1Dlg.h中要加入#include "Cpage1.h",#include "Cpage2.h",#include "Cpage3.h" ,如图。
4、在主对话框源文件mfcxxk1Dlg.cpp的BOOL Cmfcxxk1Dlg::OnInitDialog()内初始化 : 如图
// TODO:在此添加额外的初始化代码
///////////////////////////////////初始化代码
//初始化m_tab控件
m_tab.InsertItem(1,L"预处理 ");//在字符串前加’L‘来转变类型
m_tab.InsertItem(2,L"检测 ");//int InsertItem( int nItem,LPCTSTR lpszItem );其中,nItem是控件中行的索引、lpszItem是控件头的名字
m_tab.InsertItem(3,L"识别 ");
//建立属性页各页
page1.Create(IDD_DIALOG1,GetDlgItem(IDC_TAB1));
page2.Create(IDD_DIALOG2,GetDlgItem(IDC_TAB1));
page3.Create(IDD_DIALOG3,GetDlgItem(IDC_TAB1));
//设置页面的位置在m_tab控件范围内
CRect rect;
m_tab.GetClientRect(&rect);//获取父对话框的区域坐标
rect.top+=25; //子对话框的上坐标,原始为0
rect.bottom-=4; //子对话框的下坐标,原始为区域的高
rect.left+=4; //子对话框的左坐标,原始为0
rect.right-=4; //子对话框的右坐标,原始为区域的宽
page1.MoveWindow(&rect);
page2.MoveWindow(&rect);
page3.MoveWindow(&rect);
page1.ShowWindow(TRUE);
m_tab.SetCurSel(0); //当前选项(第几个选项卡,共三个0--2),int SetCurSel( int nSelect );nSelect指定要选中的字符串的下标
///////////////////////////////////
5、m_tab选项卡控件属性页设置,即选择不同时时显示不同页: 双击主对话框视图文件中的选项卡(如图左),则会在主对话框的cpp文件中生成空的事件处理函数(如图右)。
在m_tab选项卡的事件处理函数中加入如下代码,位置如图
voidCmfcxxk1Dlg::OnTcnSelchangeTab1(NMHDR *pNMHDR, LRESULT *pResult)
{
// TODO:在此添加控件通知处理程序代码
int CurSel;
CurSel=m_tab.GetCurSel();
switch(CurSel)
{
case 0:
page1.ShowWindow(TRUE);
page2.ShowWindow(FALSE);
page3.ShowWindow(FALSE);
break;
case 1:
page1.ShowWindow(FALSE);
page2.ShowWindow(TRUE);
page3.ShowWindow(FALSE);
break;
case 2:
page1.ShowWindow(FALSE);
page2.ShowWindow(FALSE);
page3.ShowWindow(TRUE);
break;
default: ;
}
*pResult = 0;
}
编译运行,效果如图: