我有一个基于 MFC 的带有 GUI 的 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 的消息是“未找到成员”。
3) 在具有不同语言的 Windows 7 中,消息被翻译成正确的语言。
我认为问题描述在这里
HOWTO: Troubleshoot "Member Not Found" 0x80020003 Error并且与
DISP_E_MEMBERNOTFOUND
错误有关;我实际上在用户站点解决了这个问题。
但是还有一个问题没有解决,那就是用户体验问题:给我发bug报告的用户不是程序员,不知道“成员”在表达中的含义,例如“成员函数”和因此,由于“成员”一词的多种含义(至少在英语和意大利语中),该消息使用户感到有些冒犯。
我检查了应用程序的源代码,在我看来 MessageBox 不是由应用程序生成的;现在我想知道 MessageBox 是如何生成的,以便拦截它并显示不同的 MessageBox:有可能吗?