MFC Wizard
MFC向导对话框类
属性页对话框包括向导对话框和一般属性页对话框两类。主要有下面两个类。
- CPropertyPage,继承自CDialog类,用于处理某单个的属性页,所以要为每个属性页都创建一个继承自CPropertyPage的子类。
- CPropertySheet,继承自CWnd类,属性表类,负责加载、打开或删除属性页,并可以在属性页对话框中切换属性页。它跟对话框类似,也有模态和非模态两种。
属性页类CPropertyPage
属性页对话框包括向导对话框和一般属性页对话框两类。一般属性页对话框和向导对话框的创建和显示的不同包括:是否需要OnSetActive和OnWizardFinish等重载函数,是否需要调用属性表类的SetWizardMode函数设置为向导对话框模式。
属性
- Caption,标题
- Style,Child
- Border,Thin
函数
-
OnSetActive
//第一页 BOOL CSummandPage::OnSetActive() { // TODO: Add your specialized code here and/or call the base class CPropertySheet* psheet = (CPropertySheet*) GetParent(); // 设置属性表只有“下一步”按钮 psheet->SetWizardButtons(PSWIZB_NEXT); return CPropertyPage::OnSetActive(); } //最后一页 BOOL CAddPage::OnSetActive() { // TODO: Add your specialized code here and/or call the base class CPropertySheet* psheet = (CPropertySheet*) GetParent(); //设置属性表只有“完成”按钮 psheet->SetFinishText(_T("完成")); return CPropertyPage::OnSetActive(); }
-
OnWizardFinish
//最后一页 BOOL CAddPage::OnWizardFinish() { // TODO: Add your specialized code here and/or call the base class MessageBox(_T("使用说明向导已阅读完!")); return CMFCPropertyPage::OnWizardFinish(); }
-
构造函数,需要把属性页构造函数后面的pParent删掉,否则编译出错
CSummandPage::CSummandPage(CWnd* pParent /*=nullptr*/) : CMFCPropertyPage(IDD_SUMMAND_PAGE) { }
属性表类CPropertySheet
private:
CSummandPage m_summandPage;
CAddendPage m_addendPage;
CAddPage m_addPage;
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);
}
显示向导对话框
CAddSheet sheet(_T(""));
// 设置属性对话框为向导对话框
sheet.SetWizardMode();
sheet.DoModal();