Виндовс 10.
Я меню для окна создаю , через section '.rsrc' resource.
То есть не могу просто так получить хэндл меню.
Но зато в wndproc WM_CREATE я делаю так.
hMenu=GetMenu(hwnd); //получил хэндл меню и он не NULL. if ( hMenu!=NULL) { int iCount; iCount=GetMenuItemCount( hMenu); //я получил число элементов меню и оно верное. cout << "Menu Item - " << iCount << endl; } //но вот этот код даёт пустую структуру. MENUINFO info; info.cbSize=7*4;//28 bytes. правильный размер и это точно. Даже в нутри GetMenuInfo есть проверка cbSize с 28. info.fMask = MIM_MENUDATA; GetMenuInfo( hMenu, &info ); //почему пусто ? eax=1, типа true, значит всё ок по докам msdn. GetLastError( );//вернул ноль. Типа нет ошибок.
Мне нужна эта структура, чтобы я ей выставил dwStyle = MNS_NOTIFYBYPOS.
И сделал SetMenuInfo( hMenu, &info );
typedef struct tagMENUINFO { DWORD cbSize; DWORD fMask; DWORD dwStyle; UINT cyMax; HBRUSH hbrBack; DWORD dwContextHelpID; ULONG_PTR dwMenuData; } MENUINFO, *LPMENUINFO;
Без MNS_NOTIFYBYPOS не работает WM_MENUCOMMAND в wndproc.
ronniko
> info.cbSize=7*4;//28 bytes
Ты до сих пор что ли пишешь в x86 режиме?
для данной задачи пишу приложение 32 бита.
А что это преступление ? :)
ronniko
> Я меню для окна создаю , через section '.rsrc' resource
Так где-то там же все равно проскакивает HMENU, скажем, в аргументе CreateWindow, который ты получаешь из LoadMenu. Или у тебя окно - диалог, полностью создаваемый из ресурса?
у тебя окно - диалог
нет. обычное окно .
RegisterClassEx
и CreateWindowEx
GetMenuInfo
https://vk.com/video520459423_456242404?t=2m4s
ronniko
> CreateWindowEx
Ну вот перед ним и настрой свое меню. А вообще я подозреваю, что флаг MNS_NOTIFYBYPOS можно и в ресурсах где-то указать. Сейчас правда уже не помню, как там в языке ресурсов описывается.
А вообще я подозреваю, что флаг MNS_NOTIFYBYPOS можно и в ресурсах где-то указать.
Было бы хорошо так сделать.
Могу в в wndproc WM_CREATE делать AppendMenu и появляются новые элементы меню в окне.
ronniko
> Было бы хорошо так сделать.
Нет, не получится, я ошибся. Стили для меню в ресурсах не указываются, только структура и дополнительные штуки типа битмапов или галочек в пунктах меню.
Так что делай перед CreateWindow, когда вызвал LoadMenu.