2010-05-20 104 views

回答

2

是你可以簡單地定義自己的郵件作爲比WM_USER常數較大:

#define WM_MY_MESSAGE (WM_USER + 1000) 

然後你就可以使用正常的ON_COMMAND/ON_NOTIFY宏。

像這樣的用戶定義消息的問題是,其他程序可以使用與您相同的常量。而你可能會收到別人發來的錯誤消息。

爲了解決這個問題,您可以使用RegisterWindowMessage的註冊信息。

這裏有一個很好的user defined messages/registered messages破壞。

+2

當然要注意,其他程序不應該使用'WM_USER-0x7FFF'範圍向您發送消息。哎呀,他們甚至不應該在程序中發送。爲此你有'WM_APP-0xBFFF範圍'。 WM_USER是窗口類的內部,而不是程序。 – MSalters 2010-05-21 08:55:42

1

您可以使用「RegisterWindowMessage」創建新的唯一消息。

來自MSDN:「RegisterWindowMessage函數定義了一個新的窗口消息,保證在整個系統中唯一。消息值可以在發送或發送消息時使用。

6

這取決於你正在使用的消息。 This link顯示了Win32消息的「地址空間」細分。

WM_USER不是在一般情況下是正確的解決方案。 WM_USER消息「可以由應用程序定義並用於在私有窗口類中發送消息這些值不能用於定義在整個應用程序中有意義的消息,因爲某些預定義的窗口類已經定義了此範圍內的值

您最好分配一個處於WM_APP範圍內的消息ID。

RegisterWindowMessage如果您希望讓系統在運行時爲您分配消息ID,它非常有用。 「所有註冊相同字符串的應用程序都可以使用關聯的消息編號來交換消息」,因此,當您需要使用自定義消息進行簡單的進程間通信時,您可以使用RegisterWindowMessage