本篇部分内容信息来自网络及孙鑫教程,恕不详述。
TabCtrl和PropertySheet都是MFC实现 选项卡页面 的类,区别在于前者非模态,后者模态。
TabCtrl的使用
I
.建立一个MFC的Dialog,然后在ResoucreView界面的工具箱里面把TabCtrl控件放到对话框中的合适位置上。 右键点开其ClassWizard,给其关联一个CTabCtrl变量,如m_tab。
注:如果不使用ClassWizard的话也可以手动添加控件TabCtrl和类成员变量(或类外变量)CTabCtrl m_tab,为使其能与Dialog中的TabCtrll控件交互,要在Dialog的DoDataExchange中加入DDX_Control(pDX,IDC_TAB1, m_tab);
II.再在ResourceView中添加两个新的Dialog,用来当做TabCtrl控件的两个子页面,注意将它们Style改为Child(不然会出问题,可以试试看),Border改为None。
使用ClassWizard为这两个对话框建立两个类,比如CPage1和CPage2,相应地在要使用它们的Dialog源文件中,声明这两个对话框对象的头文件(ClassWizard会自动在Dialog的头文件中包含Page1.h和Page2.h),同时增加一个变量int m_CurSelTab,用以表明是哪个Page即将被切换,最后再定义个CDialog* pDialog[2]用于方便操作子页面的显示。
这样一来要使用到的变量有:
CTabCtrl m_tab;
int m_CurSelTab;
CPage1 m_page1;
CPage2 m_page2;
CDialog* pDialog[2];
CPage1 m_page1;
CPage2 m_page2;
CDialog* pDialog[2];
III.在Dialog的Init函数中添加下面的代码。
IV.在ClassWizard中为IDC_TAB1添加SELCHANGE消息处理函数,于其中添加下面的代码。
更多数目子页面的TabCtrl可以仿此过程构造。
PropertySheet的使用
I.建立一个MFC的Dialog,在ResoucreView界面右键点击树型菜单,插入...,新建2个Dialog子项中的IDD_PROPPAGE_XXX(大中小视需求而定),并为其建立对应的新类,如CProp1和CProp2,注间它们的BaseClass选CPropertyPage,如果还是选的CDialog的话,虽然初始化时可以用(CPropertyPage*)骗过编译器,但运行不了。
II.用ClassWizard新建一个基于CPropertySheet的新类,比如CPropSheet,在这个类中分别新建CProp1和CProp2的对象如m_prop1、m_prop2,并在类的第二个构造函数CPropSheet::CPropSheet(LPCTSTR pszCaption, CWnd* pParentWnd, UINT iSelectPage)中初始化两个子页面CProp1和CProp2。
III.在要使用PropertySheet的地方使用Menu或Button,在响应函数中新建CPropSheet实例并赋名,如m_propsheet;,最后生成模态对话框将完整的PropertySheet显示出来。
更多数目子页面的PropertySheet可以仿此过程构造。