多语言展示
当前在线:1004今日阅读:179今日分享:36

VS2010/MFC之加法计算器(四)添加属性页

属性页对话框想必大家并不陌生,windows系统中桌面右键点属性,弹出的就是属性页对话框,它通过标签切换各个页面。另外,我们在创建MFC工程时使用的向导对话框也属于属性页对话框,它通过点击“下一步”等按钮来切换页面。
创建和配置对话框
1

创建属性页对话框资源在“Resource View”的Dialog”节点上点右键,然后在右键菜单中选择“Insert Dialog”创建三个对话框模板,分别对应被加数,加数,和。删除对话框里面的“OK”和“Cancel”按钮。

2

被加数,加数,和框的ID设置为IDD_SUMMAND_PAGE 、 IDD_ADDEND_PAGE 、 IDD_ADD_PAGE ,对应Caption为“被加数页”“加数”“计算页”。Style属性在下拉列表中都选择“Child”,Border属性在下拉列表中都选择“Thin”。

3

在IDD_SUMMAND_PAGE对话框模板上点右键,在右键菜单中选择“Add Class”,弹出类向导对话框,在“Class name”编辑框中输入类名“CSummandPage”,与之前不同的是,因为属性页类都应继承于CPropertyPage类,所以要修改下面“Base class”的选项,在下拉列表中选择“CPropertyPage”。

4

在“Class View”中找到“CSummandPage”节点,然后VS2010右侧面板上的属性列表,属性列表的工具栏上有个tip信息为“Overrides”的按钮,按下它,找到“OnSetActive”,点其右侧空白列表项出现向下箭头,再“OnSetActive”

5

在OnSetActive函数体中添加如下代码实现添加“下一步”按钮的效果// 获得父窗口,即属性表CPropertySheet类CPropertySheet* psheet = (CPropertySheet*) GetParent();// 设置属性表只有“下一步”按钮psheet->SetWizardButtons(PSWIZB_NEXT);return CPropertyPage::OnSetActive();

6

CAddendPage框的属性页不需要重载OnSetActive函数。CAddPage需要重载OnSetActive函数设置“完成”按钮。重载后的OnSetActive代码如下:// 获得父窗口,即属性表CPropertySheet类CPropertySheet* psheet = (CPropertySheet*) GetParent();//设置属性表只有“完成”按钮psheet->SetFinishText(_T('完成'));return CPropertyPage::OnSetActive();

创建属性表类
1

在Solution Explorer视图中的根节点“Addition”上点右键,在右键菜单中选择Add->Class,弹出“Add Class”对话框,然后在中间区域中选择“MFC Class”,点“Add”按钮,弹出另一个类向导对话框,设置Class name为CAddSheet,Base class选择“CPropertySheet”,点“Finish”

2

在新生成的AddSheet.h中包含三个属性页类的头文件:#include 'SummandPage.h'#include 'AddendPage.h'#include 'AddPage.h'

3

在AddSheet.h中添加private变量:CSummandPage m_summandPage;CAddendPage m_addendPage;CAddPage m_addPage;

4

在AddSheet.cpp文件中修改CAddSheet的两个构造函数为:CAddSheet::CAddSheet(UINT nIDCaption, CWnd* pParentWnd, UINT iSelectPage):CPropertySheet(nIDCaption, pParentWnd, iSelectPage){// 添加三个属性页到属性表AddPage(&m_summandPage);AddPage(&m_addendPage);AddPage(&m_addPage);}

5

CAddSheet::CAddSheet(LPCTSTR pszCaption, CWnd* pParentWnd, UINT iSelectPage)49:CPropertySheet(pszCaption, pParentWnd, iSelectPage){// 添加三个属性页到属性表AddPage(&m_summandPage);AddPage(&m_addendPage);AddPage(&m_addPage);}

显示向导对话框
1

在加法计算器对话框上添加一个按钮,点击它就打开向导对话框。此按钮的ID设为IDC_INSTRUCT_BUTTON,Caption属性设为“使用说明”。

2

双击进入,在AdditionDlg.cpp文件中包含CAddSheet的头文件:#include 'AddSheet.h'

3

修改OnBnClickedInstructButton函数如下:C++代码void CAdditionDlg::OnBnClickedInstructButton(){// TODO: Add your control notification handler code here// 创建属性表对象CAddSheet sheet(_T(''));// 设置属性对话框为向导对话框sheet.SetWizardMode();// 打开模态向导对话框sheet.DoModal();}

4

最后运行

注意事项

字符串“完成”前加了个_T,这是因为本工程创建的时候用的默认的Unicode字符集,而如果“完成”前不加_T就是ASCII字符串。_T实际上是一个宏,工程的字符集选择为Unicode时字符串就转为Unicode字符串,选择为Muli-Byte时就转为ASCII字符串。我们可以在Solution Explorer的Addition根节点上点右键,在右键菜单上选择“Properties”,弹出工程的属性对话框,Configuration Properties->General右侧列表中的Character Set就显示选择的字符集。

推荐信息