CPropertyPage 是一个从CDialog派生而来的一个类,基本功能与对话框类一样,
CPropertySheet不是一个CDialog的派生类,他是派生自CWnd的,相当于一个容器。
1.重载CPropertySheet
在类视图添加类CAttackSettingProSheet,基类选择CPropertySheet
2.插入IDD_PROPPAGE类型的dialog,并通过类向导添加类。
以此添加CAttackSettingPage1,CAttackSettingPage2等
3.在CAttackSettingProSheet中添加变量
CAttackSettingPage1 page1;
CAttackSettingPage2 page2;
并在构造函数中添加如下代码:
this->SetWizardMode();//设置为向导模式,默认为tab页模式
//添加page
this->AddPage(&page1);//会触发OnInitDialog
this->AddPage(&page2);
4.取消帮助按钮
在OnInitDialog中添加如下代码:
CWnd *pWnd;
pWnd = GetDlgItem (IDHELP);//修改此处ID也可以取消其他按钮
pWnd->ShowWindow (FALSE);
this->SetActivePage(&page1);//设置初始默认显示页
5.为“取消”按钮添加判断响应
在CAttackSettingProSheet中添加如下函数:
BOOL CAttackSettingProSheet::OnCommand(WPARAM wParam, LPARAM lParam)
{
if(LOWORD(wParam)==IDOK ||LOWORD(wParam)==IDCANCEL)
{
if(MessageBox("确定要取消攻击配置吗?","温馨提示" ,MB_ICONEXCLAMATION|MB_OKCANCEL)==IDOK)
{
return CPropertySheet::OnCommand(wParam, lParam);
} else{
return TRUE;
}
}
return CPropertySheet::OnCommand(wParam, lParam);
}
别忘了自己加上函数生命
6.控制每个page的按钮
在CAttackSettingPage1中添加如下代码:
BOOL CAttackSettingPage1::OnSetActive( )
{
//只有下一步,取消两个按钮,上一步不可用
((CPropertySheet*)GetParent())->SetWizardButtons(PSWIZB_NEXT );
return CPropertyPage::OnSetActive();
}
如果要显示上一步、下一步:
((CPropertySheet*)GetParent())->SetWizardButtons(PSWIZB_BACK | PSWIZB_NEXT);
如果要显示上一步,完成:
((CPropertySheet*)GetParent())->SetWizardButtons(PSWIZB_BACK | PSWIZB_FINISH);
别忘了函数声明
7.在page中处理下一步或完成点击事件
重载函数LRESULT OnWizardNext() 和BOOL CAttackSettingPage4::OnWizardFinish()
即添加:
LRESULT CAttackSettingPage1::OnWizardNext()
{
//自己代码
return CPropertyPage::OnWizardNext();
}
BOOL CAttackSettingPage2::OnWizardFinish()
{
//自己代码
return CPropertyPage::OnWizardFinish();
}
8.最后一步调用显示
//add by zqm
CAttackSettingProSheet attackSettingProSheet("攻击设置向导");
if(ID_WIZFINISH == attackSettingProSheet.DoModal())
{
}
搞定~
参考:http://hi.baidu.com/lifj_hogan/item/0ec2f0f1f77f5a14d6ff8cf6