Я пишу хук DLL, который обрабатывает сообщения рисования окна.
Я обнаружил, что для Vista и выше некоторые неизвестные идентификаторы сообщений получены через DLL, а именно 0x90 ~ 0x95.
Я немного погуглил и нашел MSDN ссылка а также этот, который сказал мне, какое сообщение они:
#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 для обработки этого сообщения.
Мой вопрос: как приятно заменить жестко запрограммированный 0x92 макросом, определяемым Windows?
как приятно заменить жестко запрограммированный 0x92 на определенный в Windows макрос?
Очевидно, что ваша установленная версия Win32 SDK не имеет макросов, поэтому вы не можете их использовать. Но у вас есть #define
значения, так что просто скопируйте / вставьте их прямо в ваш собственный код. Если вы хотите, вы можете обернуть их в #ifdef
так что, если вы когда-нибудь обновитесь до версии SDK, которая имеет их изначально, будут использованы собственные макросы, в противном случае компилятор будет продолжать использовать ваши ручные макросы.
#ifndef WM_UAHDRAWMENUITEM
#define WM_UAHDRAWMENUITEM 0x0092
#endif