2014-05-20 72 views
2

我正在寫一個鉤子DLL,它處理窗口繪製消息。
我發現Vista及以上版本,hook dll接收到一些未知的消息id,具體是0x90〜0x95。
我做了一些谷歌上搜索,發現了一個msdn linkthis,它告訴我,他們是什麼樣的信息:哪裏可以找到窗口消息的定義WM_UAHDRAWMENUITEM(0x92)

#define WM_UAHDESTROYWINDOW 0x0090 
#define WM_UAHDRAWMENU 0x0091 
#define WM_UAHDRAWMENUITEM 0x0092 
#define WM_UAHINITMENU 0x0093 
#define WM_UAHMEASUREMENUITEM 0x0094 
#define WM_UAHNCPAINTMENUPOPUP 0x0095 

但我找不到任何頭文件中的宏定義WM_UAHDRAWMENUITEM,編譯器抱怨「未定義符號」。我對「WM_UAHDRAWMENUITEM」進行了全局搜索,但什麼也沒找到。

目前我使用0x92來處理此消息。
我的問題是:如何用Windows定義的宏很好地替換硬編碼的0x92?

+2

通常,如果您無法找到Windows消息的文檔,那麼它們是不適合外部使用的內部Windows消息。即。使用需要您自擔風險。 – user1793036

回答

1

如何用Windows定義的宏很好地替換硬編碼的0x92?

顯然,您安裝的Win32 SDK版本沒有宏,因此您不能使用它們。但是您的值爲#define,因此只需將它們直接複製/粘貼到您自己的代碼中即可。如果你願意,你可以將它們包裝在#ifdef中,這樣如果你升級到原生的SDK版本,就會使用原生宏,否則編譯器會繼續使用你的手動宏。

#ifndef WM_UAHDRAWMENUITEM 
#define WM_UAHDRAWMENUITEM 0x0092 
#endif 
+0

我想我只是使用整數0x92,並留下評論。 – imafish

相關問題