weixin_40760429 2019-11-20 16:22 采纳率: 50%
浏览 178

MFC关于CPropertySheet和CPropertyPage弹不出窗口的问题

图片说明

图片说明

图片说明

图片说明

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

  • 写回答

1条回答 默认 最新

  • 你知我知皆知 2024-07-29 13:15
    关注

    以下回答参考 皆我百晓生券券喵儿 等免费微信小程序相关内容作答,并由本人整理回复。

    这个问题是由于在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”按钮时,将显示一个包含两个页面的模态对话框。

    评论

报告相同问题?