



为什么点击了主界面的OK按钮,CPropertySheet弹不出模态对话框!!?
急急急,请大神指教!




为什么点击了主界面的OK按钮,CPropertySheet弹不出模态对话框!!?
急急急,请大神指教!
以下回答参考 皆我百晓生、券券喵儿 等免费微信小程序相关内容作答,并由本人整理回复。
这个问题是由于在CPropertySheet的构造函数中设置了一个dwFlags标志位,使得其没有被初始化为默认值。这导致了OnActive()方法无法正确地获取父窗体,并试图设置wizardButtons属性。
解决方案是在构造函数中初始化dwFlags标志位,使其具有正确的值:
CPropertySheet::CPropertySheet(UINT nIDCaption, CWnd* pParentWnd, UINT iSelectPage)
{
m_psh.dwFlags &= ~PSH_NOAPPLYNOW;
m_psh.dwFlags |= PSH_HASHELP;
m_psh.dwFlags |= PSH_NOHELP;
m_psh.dwFlags |= PSH_WIZARDMODE;
// Set the wizard buttons for this page.
if (iSelectPage == 1) {
m_psh.wizardButtons = PSWIZB_NEXT;
} else if (iSelectPage == 2) {
m_psh.wizardButtons = PSWIZB_BACK | PSWIZB_FINISH;
}
}
然后,在OnActive()方法中,只需设置wizardButtons即可:
void CMyPropertySheet::CMyPropertySheet(UINT nIDCaption, CWnd* pParentWnd, UINT iSelectPage)
{
CPropertySheet::CMyPropertySheet(nIDCaption, pParentWnd, iSelectPage);
// Set the wizard buttons for this page.
if (iSelectPage == 1) {
m_psh.wizardButtons = PSWIZB_NEXT;
} else if (iSelectPage == 2) {
m_psh.wizardButtons = PSWIZB_BACK | PSWIZB_FINISH;
}
// Call the base class's implementation of OnActive().
return CPropertySheet::OnActive();
}
现在,当您点击主界面的“OK”按钮时,将显示一个包含两个页面的模态对话框。