2014-01-21 43 views
0

我有一個基於MFC的Windows應用程序與GUI,它是用C++編寫的並且有很多COM對象;我們稱之爲「HelloWorld」。Windows消息框如何顯示消息「未找到成員」。生成?是否有可能攔截它?

用戶向我發送了一個錯誤報告:有時,爲了響應某個特定的用戶操作,MessageBox出現(在下圖中我刪除了標題欄標題)。

enter image description here

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錯誤有關;我實際上在 用戶網站上解決了這個問題。

但有一個不同的問題仍然沒有解決,它是用戶體驗 問題:誰送我的錯誤報告的用戶不是 一個程序員,不知道「成員」的表達 意義例如「會員功能」,因此用戶被該消息略微冒犯,因爲「成員」這個詞的許多含義(至少在英語中和在意大利語中是 )。

我檢查了應用程序的源代碼,在我看來,MessageBox不是由應用程序生成的;現在我想 知道如何生成MessageBox以攔截它,並且 顯示不同的MessageBox:是否可以這樣做?

+2

說真的,你真的會花時間嗎?也許你應該告訴用戶他不應該擔心失去他的「成員」;我很確定他沒有發現問題。 –

+0

@RobertHarvey我很認真。 –

+0

我也一樣。這不是你應該花時間的東西;這是你應該責備微軟的東西。任何事情都可能有足夠的時間和金錢;真正的問題是,這是否值得,因爲你已經解決了這個問題,它可能永遠不會重演? –

回答

0

我不知道具體的錯誤,但要壓制消息框,這是Windows調用。

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

在Windows 7之前,使用SetErrorMode。

+0

這不會抑制所有的消息框嗎? –