0

我有一个从类继承的CPropertyPage类。我有一个OnOk()方法和一个OnKillActive()方法。每当我在对话上按确定时。OnKillActive()被调用但从OnOk()未被调用。问题取决于我不想在按下确定时关闭对话的条件。但对话将在按下 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();
    }
4

2 回答 2

0

我不确定您是否可以致电CDialog::DoModal();,因为您的属性页尚未关闭。

当这个 event( OnKillActive()) 发生时,您的属性页处于非活动状态。但是您的属性页仍然存在,并且属性页中的数据也存在以供验证。

要恢复您的页面,只需将焦点设置在其中一个对话框项中。使用“ GetDlgItem”获取对象并使用“ SetFocus”设置焦点

这里有一个例子。

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

于 2017-04-01T19:39:21.270 回答
0

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

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

于 2017-04-02T02:56:51.177 回答