MFC学习笔记之属性页与属性表单

上传人:m**** 文档编号:558442102 上传时间:2023-02-27 格式:DOC 页数:14 大小:153KB
返回 下载 相关 举报
MFC学习笔记之属性页与属性表单_第1页
第1页 / 共14页
MFC学习笔记之属性页与属性表单_第2页
第2页 / 共14页
MFC学习笔记之属性页与属性表单_第3页
第3页 / 共14页
MFC学习笔记之属性页与属性表单_第4页
第4页 / 共14页
MFC学习笔记之属性页与属性表单_第5页
第5页 / 共14页
点击查看更多>>
资源描述

《MFC学习笔记之属性页与属性表单》由会员分享,可在线阅读,更多相关《MFC学习笔记之属性页与属性表单(14页珍藏版)》请在金锄头文库上搜索。

1、属性页和属性表单在程序中应用很广,一般在安装程序或者一些设置向导中的都是属性表单,这一次在看完孙鑫老师的书后总结一下一些关于属性表单和属性页的一些基本的操作。源码下载要创建属性表单首先就要先创建属性页,属性页对应的MFC类就是 CPropertyPage类,它是从CDialog类中派生而来的,所以属性页也是一个对话框。这次的程序要创建三个属性页,首先要添加三个属性页资源,可以直接添加三个IDD_PROPPAGE_LARGE的对话框资源,当然也可以直接添加一般的对话框资源,然后在它的属性设置中设置为满足属性页的,至于什么属性才是属性页对话框的属性,大家可以自己创建一个属性页资源和一个一般对话框资

2、源然后比较一个,本程序是直接创建三个属性页资源,下面是最终的三个属性页的效果:要注意的是属性页资源默认的是英语,所以要在属性中将语言改为简体中文,不然就会出现乱码了。还有就是在第一个属性页的的list Box和第三个属性页的Combo Box中,在他们的属性中都有一个排序的属性,默认情况下是选中的,这种情况下你添加进去的内容的顺序和最后显示出来的顺序一般是不一样的,所以这次的程序是不要排序的,要把那个勾去掉。为了创建属性表单,首先就要创建一个CPropertySheet 对象,然后在这个对象中添加三个属性页的对象(CPropertyPage 类型),然后调用AddPage函数添加每一个属性页,

3、最后调用DoModal函数创建一个模态属性表单,或者是Create函数创建一个非模态属性表单。要创建CpropertySheet对象,当然首先是要添加一个派生于CPropertySheet类的子类,在这里命名为CPropSheet. 下面是AddPage函数的原型:void AddPage( CPropertyPage *pPage);参数是一个属性页的指针,所以在CPropSheet类中添加了三个属性页的对象后,就可以在属性表单的构造函数中进行属性页的添加了,发现CpropSheet类有两个构造函数view plain1. CPropSheet:CPropSheet(UINTnIDCapti

4、on,CWnd*pParentWnd,UINTiSelectPage)2. :CPropertySheet(nIDCaption,pParentWnd,iSelectPage)3. 4. /voidAddPage(CPropertyPage*pPage);5. AddPage(&m_prop1);6. AddPage(&m_prop2);7. AddPage(&m_prop3);8. 9. 10. CPropSheet:CPropSheet(LPCTSTRpszCaption,CWnd*pParentWnd,UINTiSelectPage)11. :CPropertySheet(pszCapt

5、ion,pParentWnd,iSelectPage)12. 13. AddPage(&m_prop1);14. AddPage(&m_prop2);15. AddPage(&m_prop3);16. 这两个构造函数对应的父类的构造函数只有第一个参数不一样,下面是类CPropertySheet的两个构造函数:CPropertySheet( UINTnIDCaption, CWnd *pParentWnd= NULL, UINTiSelectPage= 0 );CPropertySheet( LPCTSTRpszCaption, CWnd *pParentWnd= NULL, UINTiSele

6、ctPage= 0 );当然还有一个是没参数的构造函数,那个不鸟先,在这两个构造函数里面后面两个参数是一样的没而且都有设默认值。第二个参数设为空,也就是说属性表单的父窗口就是应用程序的主窗口,第三个函数是指定属性表单初始选择的属性页,默认是第一个页面,我们可以修改这个来改变属性表单第一页的显示。CPropertySheet类是派生于CWnd类的,而不是CDialog类,但是CPropertySheet和CDialog类的操作是类似的。接下来在菜单项里添加一个新的菜单“属性表单”,通过它来显示属性表单。在属性表单正确创建后,我们希望把它创建成一个向导类型的对话框,那么就要在调用DoModal函数

7、之前先调用SetWizardMode函数,这样出现的效果就会是上一步,下一步这样的向导型的按钮了。这时候这些按钮的设置是不正确的,第一页的上一步按钮应该是不可以活动的,最后一个也应该是完成按钮而不是下一步,要设置向导按钮的显示,需要调用SetWizardButtons函数,要在哪里调用呢。在属性页资源里我们并没有看到这些按钮,所以这些按钮是属于属性表单的,所以要在属性表单类里去调用这个函数。一般情况下,应该在属性页的OnSetActive函数里面去调用设置向导按钮的函数,当属性页被选中的时,成为一个活动页面,应用程序框架就会调用OnSetActive函数。这个函数是一个虚函数,因此应该在属性页

8、子类中重写这个函数,然后再设置该属性页上面的向导按钮。下面是三个属性页的OnSetActive函数的代码:view plain1. BOOLCProp1:OnSetActive()2. 3. /TODO:Addyourspecializedcodehereand/orcallthebaseclass4. (CPropSheet*)GetParent()-SetWizardButtons(PSWIZB_NEXT);5. returnCPropertyPage:OnSetActive();6. view plain1. BOOLCProp2:OnSetActive()2. 3. /TODO:Add

9、yourspecializedcodehereand/orcallthebaseclass4. (CPropSheet*)GetParent()-SetWizardButtons(PSWIZB_NEXT|PSWIZB_BACK);5. returnCPropertyPage:OnSetActive();6. view plain1. BOOLCProp3:OnSetActive()2. 3. /TODO:Addyourspecializedcodehereand/orcallthebaseclass4. (CPropSheet*)GetParent()-SetWizardButtons(PSW

10、IZB_BACK|PSWIZB_FINISH);5. returnCPropertyPage:OnSetActive();6. 这样三个属性页的向导按钮的显示就符合操作习惯了,新的问题出来了,现在我们要让操作者有了选择以后才可以进入下一个页面,我们一个一个页面来操作:处理第一个页面:先要为单选框添加关联变量,我们在MFC 的Class Wizard 的Member Variable里面找不到单选按钮的ID,这是因为我们这三个单选按钮是在一个组框里面的,所以要把第一个单选按钮的Ground属性勾上,这样就可以在Member Variable里面找到第一个单选框的ID了。变量命名为m_occupa

11、tion,在CProp1的构造函数里,这个变量被初始化为-1,就是没有一个单选按钮被选中,第一个被选中的话,该值就是0,以此类推。接下来要为list Box添加可以选择的工作地点,要在List Box中添加串的话,一般是在WM_INITDIALOG的响应函数中进行添加。下面是添加工作地点的函数代码:view plain1. BOOLCProp1:OnInitDialog()2. 3. CPropertyPage:OnInitDialog();4. 5. /TODO:Addextrainitializationhere6. (CListBox*)GetDlgItem(IDC_LIST1)-Add

12、String(广州);7. (CListBox*)GetDlgItem(IDC_LIST1)-AddString(汕头);8. (CListBox*)GetDlgItem(IDC_LIST1)-AddString(上海);9. (CListBox*)GetDlgItem(IDC_LIST1)-AddString(北京);10. (CListBox*)GetDlgItem(IDC_LIST1)-AddString(杭州);11. (CListBox*)GetDlgItem(IDC_LIST1)-AddString(天津);12. returnTRUE;/returnTRUEunlessyouse

13、tthefocustoacontrol13. /EXCEPTION:OCXPropertyPagesshouldreturnFALSE14. AddString函数是CListBox类的成员函数,所以获得该控件的指针后要进行强制转换后才可以掉用。现在第一个页面已经初始化完毕了,接下来就是要在操作者按下 下一步 按钮的时候判断作者是否两个都选择了,要怎么判断呢?在MFC中,当用户单击下一步按钮后,程序会自动调用OnWizardNext这个虚函数,如果这个函数返回0,那么就会进入下一个属性页,如果返回-1,就会禁止属性页的变更。因此,我们可以在CProp1中添加这个函数进行判断,下面是这个函数的代

14、码:view plain1. LRESULTCProp1:OnWizardNext()2. 3. /TODO:Addyourspecializedcodehereand/orcallthebaseclass4. UpdateData();5. 6. if(m_occupation=-1)7. 8. MessageBox(请选择你的职业!);9. return-1;10. 11. 12. if(m_workAddrs=)13. 14. MessageBox(请选择你的工作地点!);15. return-1;16. 17. 18. returnCPropertyPage:OnWizardNext();19. 其中m_workAddrs是List Box 控件的关联变量。CString 类型。在上面的函数中,UpdateData()这个函数很重要,如

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 工作计划

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号