MFCプログラムは、右上の「チャチャ」、「OK」を(キーを入力して)、経路(ESCキー)機能および他の機能を閉じるために、「キャンセル」ルーティングのインタフェース機能の様々なプログラムを終了し

 「OK」と「キャンセル」ボタンで自動生成されたMFCダイアログ。それぞれID IDOKとIDCANCLE、OnOK呼び出し()とOnCancleの対応する機能を()に対応します。

MFCのデフォルトは、OnOK呼び出し関数の呼び出しをトリガーするためにEnterキーをOnCancel関数にEscキーのキートリガ・コール。これは、コントロールは、ダイアログボックスを終了します。

機能を終了するにはEscキーを無効には非常に簡単です:

    1.)(、「キャンセル」ボタンをダブルクリックして応答関数OnCancleを追加

    2、ウィザードはコメントアウト呼び出すために親クラスを生成し、

       :: CEMDTTDlg OnCancelボイド(){
            // OnCancel CDialogの::(); //無効な親クラスを呼び出します
       }

  

デフォルトダイアログつのボタンはWINUSER.H事前定義されたシステム標準コントロールのIDであり、どちらも、ID IDOKとIDCANCELために使用されます。
標準IDの場合は、MFCに過負荷をかけることなく、自動的に親クラスの適切な治療を呼び出します。
例えばIDOKは、CDialogの:: OnOK呼び出し()関数にマッピングされたIDCANCELはCDialogのにマップさ:: OnCancelを()。

これら2つの関数のソースを次のように
無効OnOK呼び出しをCDialogの::()
{
    IF(にupdateData(TRUE)!)
    {
        TRACE(traceAppMsg、0、 "にupdateData時にダイアログの終了が\ N-失敗しました。"); 
     //ウィルルーチンSETにupdateData正しいフォーカスの項目
        リターン;
    }
    EndDialog(IDOK);
}

OnCancel CDialogの::のボイド()
{
    EndDialog(IDCANCELが);
}
2は、このボタンをクリックしてダイアログを閉じますEndDialog()を呼び出しますが、異なる戻り値ことがわかります。
EndDialog()関数は、DestroyWindowを()関数を呼び出し、DestroyWindowを()関数WM_DESTROYメッセージを送信した、メッセージハンドラは、OnDestroy()、関数は最後のダイアログの寿命がPostNcDestroy()関数です。

ダイアログWM_CLOSEメッセージ()関数は、OnCloseのによって処理された点は、それが最初に送信され、それは(DestroyWindowをを呼び出すこと串豚肉)、上記と同様の経路をたどっ。
OnOK呼び出し()とOnCancel()をバイパスするときは、串に豚肉のポイントを見ることができます。

 

概要:
国道1.電源を切り、デバイスが"OK"(キーを入力)で、 "キャンセル"(ESCキー)である
OnOK呼び出し()またはOnCancel()---> EndDialog() ---> DestroyWindowを() - - > OnDestroy()---> PostNcDestroy()
2点、 "近い"タイトルバーボタンへの経路を閉じる
()---> OnCancel()OnCloseの ---> EndDialog()---> DestroyWindowを() - - > OnDestroy()---> PostNcDestroy ()


注、

これらが過負荷時に独自のコードを追加することにより、過負荷状態にすることができ、上記のすべての機能であり、あなたはそれ以外の場合は、ダイアログボックスを閉じていないだろう、どこへ行くか、親クラスのCDialog同じ名前の正しいルートに関数を呼び出す必要があります。
例えば、小さなクロスオフヘビーデューティー
ボイド:: CAboutDlg OnCloseの()
{
    // TODO:この追加メッセージハンドラコード、および/またはデフォルト値を呼び出し
    DoSomthing(0;その決意の//実装、等

    // CDialogの:: OnCloseの(); //親クラスウィザードはノートへの呼び出しを生成し、その後、あなたは、ダイアログボックスを閉じることができません。
}


サプリメント、
ダイアログボックスの[プロパティ]ウィンドウの串上の点豚肉、あなたがそれを無効にする必要がある場合に、WM_CLOSEメッセージを送信する必要があり、メッセージハンドラを追加するためにWM_CLOSEメッセージを選択します。
VS IDEは自動的に次の三つのセクションを追加します。
xxx.hファイルの1は、クラス宣言が追加されOnCloseの()関数宣言を
   無効AFX_MSG OnCloseのを();
2. xxx.cppファイルを、メッセージはマクロマップ参加
   ON_WM_CLOSEを()// Windows用短いフォーマットされている標準的なメッセージは、。
機能体添加3. xxx.cpp文書、
   ボイドを:: CMyDlg OnCloseの()
  {
      CDialogの:: OnCloseの();
  }

上記正常であれば、図3に示すように、OnCloseの()に交差するようにマッピングされます。
串がOnCancel(にマップされている場合)個人的には、二つの可能性があることを感じて
最初の、ON_WM_CLOSE()マクロの欠如が、よりON_BN_CLICKEDより(IDCLOSE、&CMyDlg :: OnCancel ) マクロ
でOnCloseの()(中OnCancelと呼ばれる第二、 )

公開された15元の記事 ウォン称賛20 ビュー10000 +

おすすめ

転載: blog.csdn.net/ZDT_zdh/article/details/103079834