2017-04-01 25 views
0

私はCPropertyPageクラスから継承するクラスを持っています。私はOnOk()メソッドとOnKillActive()メソッドを持っています。 ダイアログの[OK]を押すたびに。 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

EndDialog(IDOK)がありました。これが、Okが押されたときに毎回閉じている理由です。

私はちょうどEndDialog()の前に状態チェックを行い、それは働いた。 ご返信ありがとうございます。

0

私はあなたのプロパティページがまだ閉じられていないとして、あなたはCDialog::DoModal();呼び出すことができるかどうかわからないです。

このイベント(OnKillActive())が発生した場合、あなたのプロパティページはで、アクティブでない場合はとなります。しかし、プロパティページはまだ存在し、プロパティページのデータも検証のために存在します。

ページを戻すには、ダイアログ項目の1つにフォーカスを設定します。オブジェクトを取得し、 "SetFocus"を使用して "GetDlgItem"を使用してください。

例がここにあります。 PropertySheetクラスのOnClickedOk()関数における実際

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

関連する問題