Доброе время суток! Проблема такова: в WM_MEASUREITEM я меняю размер (высоту и ширину) меню и получается такая фигня - ширина меняется везде, а вот высота только в выпадающем меню, а на самой панели как были 22 так и остается та же высота. В прикрепленном файле я выделил красным прямоугольником то где не изменяется высота и зеленым где изменяется. И как зная HMENU получить его HWND?
Arthur А вы всмотритесь: hMenu=LoadMenu(hInstance,lpMenuName), - до всяких там nWnd, и затем можно присобачить к любому top-level hWnd: SetMenu{hWnd,hMenu). Так что только наоборот: hWnd -> hMenu
kero что-то я не вкурил. Мне нужно получить HWND самого меню, т. е. HMENU != HWND. А не дескриптор окна к которому принадлежит меню.
Мда, сейчас сам проверил. Оказывается свое окно имеют только PopupMenu дескрипторы. Значить второй вопрос отпадает.
Arthur Высота меню - это общесистемный параметр, т.е. одно значение для всех окон системы, для справки: ncsysmetrics.rar В конкретном окне можете прибегнуть к WM_NCCALCSIZE, пример: nccalcsize.rar
kero Я тоже думал об этом сообщении, т. е. вычисление размеров окна, но вот задумался над тем может есть возможность подмены значения для определенного окна. В WM_NCCALCSIZE, передается либо RECT структура, либо NCCALCSIZE_PARAMS. В первом случае передаются новые координаты окна, а во втором набор 3-х RECT-структур, относящиеся только к самому окну, и WINDOWPOS-структура содержащая данные об операции положения окна в пространстве Может можно как-то перехватить тот участок где подсчитывается размер только меню а не окна вообщем?
Обычно все элементы имеют HWND, исключений мало: http://msdn.microsoft.com/en-us/library/ms647833(VS.85).aspx
AsmGuru62 Ну, так о чем вы? Не промахнулись ли с GetMenuBarInfo? Хотя, конечно, брякнуть и слинять - право каждого
Попробовал сделать так: в WM_NCCALCSIZE, меняю системное значение высоты меню, передаю сообщение дефолтному обработчику, и восстанавливаю системное значение, результат - окно появляется, меню - нет, и приложение зависает. В общем уже не знаю куда тыкать AsmGuru62 Именно менюшный бар и есть исключение. Он не имеет своего окна, а просто вычисляется и отводится прямоугольная область под заголовком у окна к которому принадлежит меню, и там просто прорисовывается. Проблема собственно в том что там можно изменить ширину менюшек, но не как высоту, потому что, как сказал kero: И его можно получить путем вызова GetSystemMetrics с параметром SM_CYMENUSIZE. Ширина и высота без проблем меняются только у Popup-меню.
Arthur Можно сделать child окно размером и позицией как у желаемого меню, и разместить меню в этом окне.
Y_Mur Child-окно (WS_VISIBLE | WS_CHILD) создается, а вот меню к нему не присваивается Попробовал еще в NCHITTEST, возвращать HTMENU, но без полезно, вообще не работает