Как генерируется Windows MessageBox с сообщением «Участник не найден»? Можно ли это перехватить?

0

У меня есть приложение на базе MFC Windows с графическим интерфейсом, оно написано в C++ и имеет много COM-объектов; позвольте назвать его "HelloWorld".

Пользователь отправил мне отчет об ошибке: иногда в ответ на конкретное действие пользователя появляется MessageBox (на следующем изображении я удалил заголовок заголовка).

Изображение 174551

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: можно ли это сделать?

  • 2
    Серьезно, вы действительно собираетесь тратить время на это? Может быть, вы просто должны сказать пользователю, что он не должен беспокоиться о потере своего «участника»; Я совершенно уверен, что у него нет проблем с его поиском.
  • 0
    @RobertHarvey Я серьезно.
Показать ещё 3 комментария
Теги:
mfc
com
idispatch

1 ответ

0

Я не знаю о конкретной ошибке, но для подавления окна сообщений это вызов Windows.

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

Перед окнами 7 используйте SetErrorMode.

  • 0
    Разве это не подавит все окна сообщений?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню