MFC练习笔记之创建向导页

一、MFC向导页的创建是基于两个基类:CPropertyPage(属性页类)、CPropertySheet(属性组类)。

       向导中的每一页的对话框是继承于属性页类,而对所有对话框的管理是继承于属性组类。属性页类的创建是在对话框创建时新建类的继承选择属性页类。

而对于属性组类则是在属性页类创建完成以后在解决方案里面新建MFC类的时候继承属性组类。

        属性页中对话框的属性中:Style属性在下拉列表中选择“Child”,Border属性在下拉列表中选择“Thin”。(具体原理还不懂)。然后删除确认和取消按钮(用不到)。

在第一个属性页中,应该有一个“下一步”按钮,在哪里添加呢?上一讲CPropertyPage类的可重载函数中提到,OnSetActive函数用于处理属性页被切换为当前活动页的消息,所以我们可以在OnSetActive函数中进行相关设置。

       那怎样重载OnSetActive函数呢?我们可以在“Class View”中找到“CSummandPage”节点,点右键弹出右键菜单,选择“Properties”,然后VS2010右侧面板上会显示对话框的属性列表,属性列表的工具栏上有个tip信息为“Overrides”的按钮,按下它,下方列表中就列出了重载函数,找到“OnSetActive”,点其右侧空白列表项出现向下箭头,再点箭头就在下面出现了“<Add>OnSetActive”的选项,选择它就会自动在CSummandPage类中添加函数OnSetActive。

 

       我们只需在OnSetActive函数体中添加相关代码就可以实现添加“下一步”按钮的效果了。新的函数体如下:

C++代码
  1. BOOL CSummandPage::OnSetActive()   
  2. {   
  3.     // TODO: Add your specialized code here and/or call the base class   
  4.   
  5.     // 获得父窗口,即属性表CPropertySheet类   
  6.     CPropertySheet* psheet = (CPropertySheet*) GetParent();   
  7.     // 设置属性表只有“下一步”按钮   
  8.     psheet->SetWizardButtons(PSWIZB_NEXT);   
  9.   
  10.     return CPropertyPage::OnSetActive();   
  11. }  

如上为重载OnSetActive()函数的步骤,

  1. CPropertySheet* psheet = (CPropertySheet*) GetParent();   
  2.     // 设置属性表只有“下一步”按钮   




  •     psheet->SetWizardButtons(PSWIZB_NEXT);   

    这两句为添加向导框中下一步按钮的函数调用。在最后一个向导框中需要使用完成按钮,则调用如下语句:

    psheet->SetFinishText(_T("完成"));  

    其中还可以重载OnWizardFinish函数,用于响应点击完成按钮后的操作。

    二、属性组类

           在对属性页操作完成以后,需要建立一个属性组类。来对所有的属性页进行处理。方式如下:

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

            创建完属性组类后include属性页类的头文件,然后新建属性页对象。并在构造函数中将属性页添加到属性表中。属性表中有两个构造函数(原因不明),都需要添加如下语句:

    1. // 添加三个属性页到属性表   
    2.     AddPage(&m_summandPage);   //m_summandPage为属性页对象
    3.     AddPage(&m_addendPage);   
    4.     AddPage(&m_addPage);  

    如上操作完成以后,就需要一个函数来响应创建向导。于是可以新建一个按钮函数,在函数中添加响应的语句,如下:

    1. // 创建属性表对象   
    2.     CAddSheet sheet(_T(""));   
    3.     // 设置属性对话框为向导对话框   
    4.     sheet.SetWizardMode();   
    5.     // 打开模态向导对话框   
    6.     sheet.DoModal();   

    运行结果如下图:

    总结一波:
              1、在论坛中有网友提到属性页的顺序不对,基本原因是在属性表中构造函数中添加的顺序不对,一定要按照正常的弹出顺序添加。
               2、属性页中添加下一步按钮时只需要在第一个属性页的OnsetActive函数中添加即可,剩下的就会都有下一步。即使没有重载OnsetActive函数。
                3、加油。么么哒。

    -----------------------------------------------------------------end--------------------------------------------------------

  • 如上如果不加:

    1.     // 设置属性对话框为向导对话框   
    2.     sheet.SetWizardMode();   
    这条语句的话,结果显示为:



  • 向导的显示形式而已。
  • //---------------------------------------------------------------------------------------end------------------------------------------------------------
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值