繁体   English   中英

如果有错误,CPropertyPage 对话 OnOk 不应关闭对话

[英]CPropertyPage dialogue OnOk should not close the dialogue if there is an error

我有一个继承自CPropertyPage类的类。 我有一个OnOk()方法和一个OnKillActive()方法。 每当我在对话上按 Ok 时。 OnKillActive()被调用,但OnOk()从未被调用。 问题取决于我不想在按下 Ok 时关闭对话的条件。 但是对话即将结束,按下 Ok。

当我按下 Ok 时,如何防止对话框关闭?

代码:

In MyClass.h:
    class MyClass : public CPropertyPage {
    }

In MyClass.cpp:
    void MyClass::OnOK(){
        if (condition true) {
            return; // This should prevent the dialogue from closing but still      the dialogue closes
        }
        return CPropertyPage::OnOk();
    }

    BOOL MyClass::OnKillActive() {
        if (condition true) {
            CDialog::DoModal();
            return FALSE; // This should prevent the dialogue from closing but   still the dialogue closes
        }
        return CPropertyPage::OnKillActive();
    }

我不确定你是否可以调用CDialog::DoModal(); 因为您的属性页面尚未关闭。

当此事件( OnKillActive() )发生时,您的属性页处于非活动状态 但是您的属性页仍然存在,并且属性页中的数据也存在用于验证。

要返回您的页面,只需将焦点设置在对话框项目之一中即可。 使用“ GetDlgItem ”获取对象并使用“ SetFocus ”设置焦点

此处提供了一个示例。

https://msdn.microsoft.com/en-us/library/2122ct0z.aspx

实际上在PropertySheet类的OnClickedOk()函数中,有一个EndDialog(IDOK) 这就是为什么每次按下 Ok 时它都会关闭的原因。

我只是在EndDialog()之前进行了条件检查并且它起作用了。 感谢您的回复。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM