MFC:DoModal関数の使い方

1618 ワード

DoModal関数の使い方
「モードあり」ダイアログ・ボックスを使用する場合、ダイアログ・ボックスがポップアップされると呼び出し関数はすぐには戻りません.ダイアログ・ボックスが破棄されるまで戻ってきません(ダイアログ・ボックスがポップアップされると他のウィンドウのメッセージが渡されることに注意してください).したがって、ダイアログ・ボックスを使用する場合、他のウィンドウはユーザー入力を受信できません.「モードあり」ダイアログ・ボックスを作成する方法は、CDialog::DoModal()を呼び出すことです.次のコードは、この使用方法を示しています.
CYourView::OnOpenDlg() 
{ 
CYourDlg dlg; 
int iRet=dlg.DoModal(); 
} 

CDialog::DoModal()の戻り値はIDOK、IDCANCELです.オペレータがダイアログボックスで「確認」または「キャンセル」を選択したことを示します.ダイアログボックスが破棄されるまでDoModalは戻ってこないので、ローカル変数を使用してオブジェクトを参照できます.関数ボディを終了すると、オブジェクトは破棄されます.モードレスダイアログでは使用できませんが、次のセクション5.3では、モードレスダイアログの作成について詳しく説明します.  
DoModal()の戻り値に基づいて次のアクションを決定する必要がありますが、戻り値を得ることもモードダイアログボックスを使用する大きな理由です.[モードあり](Mode有り)ダイアログボックスを使用するには、繰り返し発生するイベント処理中にモードありダイアログボックスを生成しないなどの問題に注意する必要があります.たとえば、前のダイアログボックスが終了していない間に、タイマメッセージが次のダイアログボックスのポップアップを引き起こすため、タイマにモードありダイアログボックスを生成しません.同じように、ダイアログクラスで呼び出し元に異なる値を返すためにCDialog::OnOK()またはCDialog::OnCancel()を呼び出してIDOKまたはIDCANCELを返すことができます.他の値を返すには、呼び出しが必要です.
CDialog::EndDialog( int nResult );

ここでnResultはDoModal()呼び出しの戻り値として使用されます
virtual INT_PTR CDialog::DoModal();

dlg.DoModal()が表示されると、ユーザーがこのダイアログを閉じるまでDoModal()関数は返されません.ユーザがOKボタンをクリックすると、DoModal()関数はIDOKに戻ります.IDOKはマクロです.
CMyDlg dlg;の場合、ダイアログボックスは表示されません.CMyDlgタイプのオブジェクトを作成しただけで、ユーザーがDoModal()を呼び出すまでダイアログボックスが表示されません.
参照リンク:http://www.cnblogs.com/xing901022/archive/2012/11/05/2755373.html