0

GUI を備えた MFC ベースの Windows アプリケーションがあります。これは C++ で記述されており、多くの COM オブジェクトがあります。「HelloWorld」としましょう。

ユーザーからバグ レポートが送られてきました。特定のユーザー アクションに応答して、MessageBox が表示されることがあります (次の画像では、タイトル バーのキャプションを削除しています)。

ここに画像の説明を入力

1) MessageBox のタイトル バー キャプションは、コード内でその文字列を探していると、 (アプリケーションのソース ファイル内で)HelloWorldによって識別されるリソース文字列であると思われます。以下は、ソース ファイルの関連セクションです。AFX_IDS_APP_TITLE.rc.rc

STRINGTABLE
BEGIN
   AFX_IDS_APP_TITLE       "HelloWorld"
   AFX_IDS_IDLEMESSAGE     "..."
   AFX_IDS_HELPMODEMESSAGE "..."
END

2) 英語の Windows 7 では、MessageBox のメッセージは「Member not found」です。

3) 異なる言語の Windows 7 では、メッセージは適切な言語に翻訳されます。

問題はここで説明されていると思います HOWTO: Troubleshoot "Member Not Found" 0x80020003 Errorで、エラーに関連してい DISP_E_MEMBERNOTFOUNDます。実際にユーザーサイトで問題を解決しました。

しかし、まだ解決されていない別の問題があり、それはユーザー エクスペリエンスの問題です。バグ レポートを送ってくれたユーザーはプログラマーではなく、「メンバー関数」などの表現における「メンバー」の意味を知らず、そのため、「メンバー」という言葉には多くの意味があるため (少なくとも英語とイタリア語では)、ユーザーはこのメッセージに少し気分を害しました。

アプリケーションのソース コードを確認したところ、アプリケーションによって MessageBox が生成されていないようです。MessageBox を傍受して別の MessageBox を表示するために、その MessageBox がどのように生成されるかを知りたいのですが、それは可能ですか?

4

1 に答える 1

0

特定のエラーについてはわかりませんが、メッセージ ボックスを抑制するには、これが Windows 呼び出しです。

BOOL SetThreadErrorMode(
  _In_   DWORD dwNewMode,
 _Out_  LPDWORD lpOldMode
);

Windows 7 より前では、SetErrorMode を使用します。

于 2014-01-21T18:14:13.830 に答える