「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と呼ばれる第二、 )