2017-04-01 70 views
0

我有一個繼承自CPropertyPage類的類。我有一個OnOk()方法和一個OnKillActive()方法。 每當我按下對話框上的確定。 OnKillActive()被調用,但OnOk()永遠不會被調用。 問題取決於條件,我不想按Ok鍵關閉對話框。但是按下Ok進行對話。CPropertyPage對話如果出現錯誤,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(); 
    } 

回答

0

其實在PropertySheet類的OnClickedOk()功能,有一個EndDialog(IDOK)。這就是爲什麼它每次按Ok時都會關閉。

我剛剛在EndDialog()之前進行了條件檢查,結果奏效。 感謝您的回覆。

0

我不知道,如果你可以調用CDialog::DoModal();爲您的屬性頁還沒有結束。

發生此事件(OnKillActive())時,您的財產頁面爲不活動。但是你的屬性頁面仍然存在,屬性頁面中的數據也存在用於驗證。

要讓您的頁面回來,只需在其中一個對話框項目中設置焦點。使用「GetDlgItem」獲取對象並使用「SetFocus」設置焦點

可以在此處找到一個示例。

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