У меня есть приложение на базе 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: Устранение ошибки "Member Not Found" 0x80020003 Ошибка и связано с ошибкой DISP_E_MEMBERNOTFOUND
; Я действительно решил проблему на сайте пользователя.
Но есть еще одна проблема, которая еще не решена, и это проблема пользовательского опыта: пользователь, который отправил мне отчет об ошибке, не является программистом и не знает значения "члена" в выражении, например "функция-член" и поэтому пользователь был слегка оскорблен сообщением из-за многих значений слова "член" (по крайней мере, на английском и итальянском языках).
Я проверил исходный код приложения, и мне кажется, что MessageBox не создается приложением; теперь я хотел бы знать, как генерируется MessageBox, чтобы перехватить его и отобразить другое MessageBox: можно ли это сделать?
Я не знаю о конкретной ошибке, но для подавления окна сообщений это вызов Windows.
BOOL SetThreadErrorMode(
_In_ DWORD dwNewMode,
_Out_ LPDWORD lpOldMode
);
Перед окнами 7 используйте SetErrorMode.