vs2013/MFC中向导对话框的创建及显示

这里写图片描述
为其加入向导对话框,我们可以用它来说明加法计算器的使用方法,一步一步引导用户操作,这也是比较常见的用法。
在学习添加向导对话框之前,可以先了解属性页对话框和相关的两个类CPropertyPage类和CPropertySheet类。

1.创建属性页对话框资源

在“资源视图”的Dialog 节点上点右键,然后在右键菜单中选择“插入Dialog”创建第一个对话框模板,对话框的ID属性设置为 IDD_SUMMAND_PAGE,Caption属性改为“被加数页”,Style属性在下拉列表中选择“Child”,Border属性在下拉列表中选择“Thin”。
删除“OK”和“Cancel”按钮,添加一个“Static Text”控件,并修改静态文本框的Caption属性为“请先输入double型被加数”。
按照上述步骤,继续添加第二个和第三个对话框资源。第二个对话框模板的ID设为IDD_ADDEND_PAGE,Caption属性改为“加数页”,也添加一个静态文本框,Caption设为“请继续输入double型加数”,其他属性同第一个对话框。第三个对话框模板的ID设为IDD_ADD_PAGE,Caption属性改为“计算页”,添加静态文本框的Caption属性改为“最后请按下“计算”按钮”,其他属性也第一个对话框一样。

2.创建属性页类

在第一个对话框模板上点右键,在右键菜单中选择“添加类”,弹出类向导对话框,在“类名”编辑框中输入类名“CSummandPage”,与之前不同的是,因为属性页类都应继承于CPropertyPage类,所以要修改下面“基类”的选项,在下拉列表中选择“CPropertyPage”。如下图红框中的内容:
这里写图片描述
因为是第一个属性页,所以它应该有一个“下一步”按钮,利用CPropertyPage类的可重载函数中的onSetActive函数用于处理属性页被切换为当前活动页的消息。 我们可以在“类视图”中找到“CSummandPage”节点,点右键弹出右键菜单,选择“属性”,然后VS2013右侧面板上会显示对话框的属性列表,属性列表的工具栏上有个tip信息为“重载”的按钮(在最右侧),按下它,下方列表中就列出了重载函数,找到“OnSetActive”,点其右侧空白列表项出现向下箭头,再点箭头就在下面出现了“OnSetActive”的选项,选择它就会自动在CSummandPage类中添加函数OnSetActive。如下图红框中的内容:
这里写图片描述
我们只需在OnSetActive函数体中添加相关代码就可以实现添加“下一步”按钮的效果了。新的函数体如下:

BOOL CSummandPage::OnSetActive()
{
    // TODO:  在此添加专用代码和/或调用基类
    // 获得父窗口,即属性表CPropertySheet类  
    CPropertySheet* psheet = (CPropertySheet*)GetParent();
    // 设置属性表只有“下一步”按钮  
    psheet->SetWizardButtons(PSWIZB_NEXT);
    return CPropertyPage::OnSetActive();
}

为第二个和第三个对话框也分别添加属性页类CAddendPage和CAddPage。但第二个对话框的属性页不需要重载OnSetActive函数。第三个对话框是最后一个对话框,所以不需要“下一步”按钮,而应该换成“完成”按钮,所以也需要重载OnSetActive函数设置“完成”按钮。重载后的OnSetActive如下:

BOOL CAddPage::OnSetActive()
{
    // TODO:  在此添加专用代码和/或调用基类
    // 获得父窗口,即属性表CPropertySheet类  
    CPropertySheet* psheet = (CPropertySheet*)GetParent();
    //设置属性表只有“完成”按钮  
    psheet->SetFinishText(_T("完成"));
    return CPropertyPage::OnSetActive();
}

那点了第三个属性页上的“完成”按钮我们想进行某些处理的话,就重载OnWizardFinish函数,方法同OnSetActive函数。重载后的OnWizardFinish函数如下:

BOOL CAddPage::OnWizardFinish()
{
    // TODO:  在此添加专用代码和/或调用基类
    // 提示向导完成  
    MessageBox(_T("使用说明向导已阅读完!"));
    return CPropertyPage::OnWizardFinish();
}

3.创建属性表类

属性页资源和属性页类创建完以后,还不能生成向导对话框,我们还需要一个属性表类,来容纳这些属性页。
解决方案视图中的根节点“MFCdemo”上点右键,在右键菜单中选择“类向导”,弹出类向导对话框,然后在最右边“添加类”中”MFC类“,弹出另一个类向导对话框,设置类名为CAddSheet,基类选择“CPropertySheet”,点“Finish”按钮,这样就属性表类就建好了。如下图所示:
这里写图片描述
这里写图片描述
这里写图片描述
接下来,在新生成的AddSheet.h中包含三个属性页类的头文件:

      #include "SummandPage.h"
      #include "AddendPage.h"
      #include "AddPage.h"
   之后在AddSheet.h中添加private变量:
      CSummandPage    m_summandPage;
      CAddendPage     m_addendPage;
      CAddPage        m_addPage;
   然后在AddSheet.cpp文件中修改CAddSheet的两个构造函数为:
CAddSheet::CAddSheet(UINT nIDCaption, CWnd* pParentWnd, UINT iSelectPage)
    :CPropertySheet(nIDCaption, pParentWnd, iSelectPage)
{
    // 添加三个属性页到属性表  
    AddPage(&m_summandPage);
    AddPage(&m_addendPage);
    AddPage(&m_addPage);
}
CAddSheet::CAddSheet(LPCTSTR pszCaption, CWnd* pParentWnd, UINT iSelectPage)
    :CPropertySheet(pszCaption, pParentWnd, iSelectPage)
{
    // 添加三个属性页到属性表  
    AddPage(&m_summandPage);
    AddPage(&m_addendPage);
    AddPage(&m_addPage);
}

4.显示向导对话框

我们在加法计算器对话框上添加一个按钮,点击它就打开向导对话框。此按钮的ID设为IDC_INSTRUCT_BUTTON,Caption属性设为“使用说明”。
双击该按钮,为IDC_INSTRUCT_BUTTON按钮在CAdditionDlg类中添加点击消息的处理函数OnBnClickedInstructButton。然后在AdditionDlg.cpp文件中包含CAddSheet的头文件:#include "AddSheet.h"。最后修改OnBnClickedInstructButton函数如下:

void CMFCdemoDlg::OnBnClickedInstructButton()
{
    // TODO:  在此添加控件通知处理程序代码
    CAddSheet sheet(_T(""));
    // 设置属性对话框为向导对话框  
    sheet.SetWizardMode();
    // 打开模态向导对话框  
    sheet.DoModal();
}

到此,向导对话框就完整的创建完成了,并可以在加法计算器对话框上点“使用说明”按钮显示出来。我们来看看效果吧:
这里写图片描述

参考网站:http://www.jizhuomi.com/software/166.html

猜你喜欢

转载自blog.csdn.net/lly_117/article/details/80235947