0

私の環境はC++、MFC、WM6.0+デバイス用のコンパクトなフレームワークです。

多くの場所で、「MessageBox()」を使用してポップアップメッセージを表示し、簡単な警告を表示したり、ユーザーからはい/いいえの応答を受け取ったりしています。私がやりたいのは、メッセージが閉じられるたびに、特定のコードを実行する前に、いくつかの一般的な関数を呼び出すことです。

親ウィンドウでWM_SHOWWINDOWを試しましたが、発生しないようです。

任意の提案をいただければ幸いです。

[追加]画面に多くのボタンがあり、常に1つのボタンだけがフォーカスされていることを確認する必要があります。メッセージボックスを表示すると、ボタンのフォーカスが外れているように見えるので、メッセージを閉じたときにフォーカスを戻したいと思います。もちろん、私はメッセージが使用されるすべての場所でそれを行うことができますが、この状況を処理するためのより良い方法を探しています。

4

2 に答える 2

1

MessageBox 関数は、閉じたときに特定の戻りコードを返します。MessageBox 関数をラップして戻り値を確認し、それに基づいてコードを実行できます。

MSDN からのリターン コードは次のとおりです。

IDABORT    3    The Abort button was selected.
IDCANCEL    2    The Cancel button was selected.
IDCONTINUE    11    The Continue button was selected.
IDIGNORE    5    The Ignore button was selected.
IDNO    7    The No button was selected.
IDOK    1    The OK button was selected.
IDRETRY    4    The Retry button was selected.
IDTRYAGAIN    10    The Try Again button was selected.
IDYES    6    The Yes button was selected.

したがって、次のコードを使用して、戻りコードに基づいてさまざまな機能を実行できます。

void MyMessageBox(wstring title,wstring message)
{
  int msgboxID = MessageBox(
       NULL,
       (LPCWSTR)message.c_str(),
       (LPCWSTR)title.c_str(),
       MB_ICONWARNING | MB_CANCELTRYCONTINUE | MB_DEFBUTTON2
   );

 switch (msgboxID)
 {
    case IDCANCEL:
        // TODO: add code
        break;
    case IDTRYAGAIN:
        // TODO: add code
        break;
    case IDCONTINUE:
        // TODO: add code
        break;
    //so on
 }
}

詳細はこちら: http://msdn.microsoft.com/en-us/library/windows/desktop/ms645505(v=vs.85).aspx

于 2012-09-03T04:20:33.040 に答える
0

親ウィンドウでWM_ACTIVATEメッセージをインターセプトしてみてください。

于 2012-09-03T04:16:36.873 に答える