/************************创建属性页表单*********************************************/
一 创建单文档程序
二 切换到资源视图通过右键添加资源,添加三个DIALOG对话框,DIALOG选择 IDD_PROPPAGE_LARGE。修改ID:IDD_PROP1,IDD_PROP2,IDD_PROP3。为每个对话框增加设计所需控件
三 为资源IDD_PROP1,IDD_PROP2,IDD_PROP3增加对应的MFC类:CProp1,CProp2,CProp3,它们都继承自CPropertyPage
四 创建一个集成CProp1,CProp2,CProp3属性页的属性表单类CpropSheet,它继承自CPropertySheet,为它增加三个public 类型为CProp1,CProp2,CProp3,变量为:m_prop1,m_prop2,m_prop3三个成员变量。
在CpropSheet的构造函数里通过调用成员函数AddPage(&m_prop1);AddPage(&m_prop2);AddPage(&m_prop3);
五 使用CpropSheet对象的DoModal()函数来显示属性页。至此出现的页面自动带有三个CButton类型的按钮,确定、取消、应用。
/*************************创建向导对话框*******************************************/
步骤同属性表单。不同之处在于调用DoModal()之前,通过CPropertySheet对象调用成员函数:SetWizardMode();
CPropSheet propSheet(L"属性表单A"); //打开页面后的标题 propSheet.SetWizardMode();propSheet.DoModal();//备注 calss CPropSheet : public CPropertySheet
此出现的页面自动带有三个CButton类型的按钮,上一步、下一步、取消。三个页面都有,但是对于第一个页面,它不应该用到上一步,最后一个页面不能再有下一步了。既然这三个按钮都是CPorpertySheet的,查看MSDN,通过SetWizardButtons(DWORD dFlags)方法设置所需按钮。
dFlags:PSWIZB_BACK、PSWIZB_NEXT、PSWIZB_FINISH、PSWIZB_DISABLEDFINISH。
要设置按钮,需要在属性页CPropertyPage中的OnSetActive()中进行修改。由于CPropertyPage是属于CPropertySheet的一个页面,因此他们之间存在父子关系。因此Page中,可以调用GetParent()获取父指针CWnd类型的,而我们需要操作的是CPropertySheet类型的,因此需要进行转换。
BOOL CProp1::OnSetActive(){//对于第一个页面,它只有下一步((CPropertySheet*)GetParent())->SetWizardButtons(PSWIZB_NEXT); //当激活这个页面的时候,同样显示 “上一步” “下一步”“取消”//不同的是,“上一步”按钮灰色不可用return CPropertyPage::OnSetActive();}
BOOL CProp2::OnSetActive(){// 中间页面有上一步,和下一步按钮((CPropertySheet*)GetParent())->SetWizardButtons(PSWIZB_BACK|PSWIZB_NEXT);return CPropertyPage::OnSetActive();}
BOOL CProp3::OnSetActive(){// 最后一个有上一步和完成按钮((CPropertySheet*)GetParent())->SetWizardButtons(PSWIZB_BACK|PSWIZB_FINISH);return CPropertyPage::OnSetActive();}
单击下一步按钮:在CProp1,CProp2增加OnWizardNext()虚函数....
如果觉得《VS MFC属性页孙鑫笔记》对你有帮助,请点赞、收藏,并留下你的观点哦!