2012-01-23 13 views
0
BOOL CmsgboxApp::InitInstance() 
{ 
    INITCOMMONCONTROLSEX InitCtrls; 
    InitCtrls.dwSize = sizeof(InitCtrls); 
    InitCtrls.dwICC = ICC_WIN95_CLASSES; 
    InitCommonControlsEx(&InitCtrls); 
    CWinApp::InitInstance(); 
    AfxEnableControlContainer(); 
    SetRegistryKey(_T("Local AppWizard-Generated Applications")); 
    CmsgboxDlg dlg; 
    m_pMainWnd = &dlg; 
    INT_PTR nResponse = dlg.DoModal(); 
    if (nResponse == IDOK) 
    { 
     AfxMessageBox(L"here",0,0);//This MessageBox is not getting displayed 
    } 
    else if (nResponse == IDCANCEL) 
    { 
    } 
    return FALSE; 
} 

上記のコードAfxMessageBox()は表示されません。 なぜこの問題が起こっていますか?doModal()メソッドの後にAfxMessagBox()を印刷できません

まず私はモーダルダイアログボックスを作成し、それから戻った後、私はよく分からないが、それはAfxMessageBoxCDialog::DoModal()のような独自のメッセージポンプを提供していないのかもしれメッセージボックス を提供しようとしたが、それは

+0

これをデバッガで実行しましたか? 'DoModal'呼び出しは何を返しますか? –

+0

IDOkを返しました。また、返す前にAfxMessagBox()を使用しようとしましたが、それは表示されません – Ganeshkumar

答えて

0

が表示されません。そうです。周りにメッセージを渡すことによって Windowsプログラムの仕事:私はAfxMessageBoxがちょうどEDIT

などの絵をディスパッチするメッセージポンプが必要になるのWin32 MessageBox()機能を呼び出す/メッセージをクリックすると仮定します。すべてのWindowsプログラムには、画面をペイントしたり、マウスのクリックなどに反応するようなメッセージを処理する "ポンプ"というメッセージがあります。もともとメッセージポンプを自分でコーディングする必要がありました。

MFCが来てメッセージポンプを提供しました。通常のSDI/MDIアプリケーションの場合はCWinApp::Run()、ダイアログベースのアプリケーション(およびモーダルダイアログボックス)の場合はCDialog::DoModal()に1つあります。

投稿したコードは、ダイアログベースのMFCアプリケーションです。 「アプリケーション」はダイアログです。そのダイアログから戻ったら、メッセージポンプはなく、アプリケーションはかなり死んでいます。この後、少しでもやっているはずです。確かに、より多くの情報を表示していません。

閉じる情報をさらに表示する場合は、アプリケーションのダイアログでOnClose()をオーバーライドし、そこにAfxMessageBox()を呼び出します。

+0

メッセージボックスを使用してIDOKのユーザーにメッセージを送るにはどうすればいいですか? – Ganeshkumar

+0

@Ganeshkumarモーダルダイアログには、独自のメッセージループが含まれています。他のものについては、独自のメッセージループを実装する必要があります。 Googleが「メッセージループ」や「メッセージポンプ」を検索します。 –

+0

詳細は私の編集をご覧ください。 – GazTheDestroyer

0

ダイアログのOnOK()ハンドラにメッセージを入れる必要があります。ダイアログがIDOKを返すときとまったく同じです。

AfxMessageBox()には、この時点で所有者ウィンドウがないため、表示されません。メッセージボックスがないでしょう、ダイアログが存在しているとして、オーナーウィンドウ以来

HWND hWnd = CWnd::GetSafeOwner_(NULL, &hWndTop); 

は今NULLである:あなたがAfxMessageBox()の中にデバッグする場合は、最終的には、以下が呼び出される場所のCWinApp :: ShowAppMessageBox(...)関数に分類されます表示されます。

+0

私の場合、私はDoModal()の後にいくつかの仕事をする必要があります。私はDoModal()の後にメッセージボックスを印刷しない理由について懸念しています。 – Ganeshkumar

+0

私の投稿を編集して詳細を追加しました。 OnOK()での仕事を止めているのは何ですか?エラー状態では、そこから容易に制御できるGUIが存在したくない可能性があるため、適切な場所です。 – zar

+0

お返事ありがとうございます。私はデバッグしようとしましたが、親ウィンドウのNULLハンドルと同じ理由があります。私はOnOK側で私のコードを奪おうとしている() – Ganeshkumar

関連する問題