Как получить пользовательские границы меню, используя только Win32 C ++ (без WTL, MFC или любой другой сторонней библиотеки)?
Я смог отозвать элементы, но границы находятся в области Non Client, и я не смог найти способ их изменить.
Есть ли способ?
Независимо от того, как вы реализуете это, это будет чем-то вроде взлома.
Один из вариантов — забыть о HMENU и создавать свои собственные меню с пользовательским всегда в верхнем окне. Это, наверное, слишком много работы, и вы никогда не получите все идеально. Вдобавок ко всему, вам приходится иметь дело с LTR против RTL, доступностью, настраиваемыми настройками, такими как тени и анимация меню (скольжение / затухание). Есть, наверное, вещи SetMenu
делает с HWND, что вы не можете повторить с взломом, как это, но вы можете обойти эту проблему путем внедряя это в арматуру.
Если вы хотите продолжать использовать HMENU, то вы должны использовать SetWindowsHookEx чтобы найти меню HWND. Класс меню #32768
. Вы можете тогда подкласс окно и переопределить сообщения WM_NC * и WM_PRINT *. Эта статья Codeproject также есть информация о недокументированном сообщении (0x01e5), которое вам нужно обработать.
Других решений пока нет …