CPropertyPage 对话框 OnOk 如果出现错误不应关闭对话框

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

我有一个 class 继承自 CPropertyPage class。我有一个 OnOk() 方法和一个 OnKillActive() 方法。 每当我在对话中按确定时。 OnKillActive() 被调用,但 OnOk() 从未被调用。 问题取决于我不想在按下 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

实际上在PropertySheetclass的OnClickedOk()函数中,有一个EndDialog(IDOK)。这就是每次按下确定时它都会关闭的原因。

我刚刚在 EndDialog() 之前进行了条件检查,结果成功了。 感谢您的回复。