Не меняется высота меню на панели и HMENU => HWND?

Тема в разделе "WASM.WIN32", создана пользователем Arthur, 12 янв 2009.

  1. Arthur

    Arthur New Member

    Публикаций:
    0
    Регистрация:
    27 янв 2007
    Сообщения:
    494
    Доброе время суток!

    Проблема такова: в WM_MEASUREITEM я меняю размер (высоту и ширину) меню и получается такая фигня - ширина меняется везде, а вот высота только в выпадающем меню, а на самой панели как были 22 так и остается та же высота. В прикрепленном файле я выделил красным прямоугольником то где не изменяется высота и зеленым где изменяется.

    И как зная HMENU получить его HWND?
     
  2. kero

    kero Модератор SOURCES & 2LZ Команда форума

    Публикаций:
    0
    Регистрация:
    4 апр 2006
    Сообщения:
    1.074
    Адрес:
    Москва
    Arthur
    А вы всмотритесь: hMenu=LoadMenu(hInstance,lpMenuName), - до всяких там nWnd,

    и затем можно присобачить к любому top-level hWnd: SetMenu{hWnd,hMenu).

    Так что только наоборот: hWnd -> hMenu
     
  3. Arthur

    Arthur New Member

    Публикаций:
    0
    Регистрация:
    27 янв 2007
    Сообщения:
    494
    kero
    что-то я не вкурил. Мне нужно получить HWND самого меню, т. е. HMENU != HWND. А не дескриптор окна к которому принадлежит меню.
     
  4. Gnil

    Gnil New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2008
    Сообщения:
    41
    Скриншот не смог посмотреть, но меню приложения не является окном, а следовательно и HWND нет.
     
  5. Arthur

    Arthur New Member

    Публикаций:
    0
    Регистрация:
    27 янв 2007
    Сообщения:
    494
    Мда, сейчас сам проверил. Оказывается свое окно имеют только PopupMenu дескрипторы. Значить второй вопрос отпадает.
     
  6. kero

    kero Модератор SOURCES & 2LZ Команда форума

    Публикаций:
    0
    Регистрация:
    4 апр 2006
    Сообщения:
    1.074
    Адрес:
    Москва
    Arthur
    А, так вы область HTMENU считали контролом... :)
     
  7. Arthur

    Arthur New Member

    Публикаций:
    0
    Регистрация:
    27 янв 2007
    Сообщения:
    494
    kero
    Ага :)

    Вот теперь как бы поменять высоту менюшек в этой области :dntknw: А то меняется только ширина.
     
  8. kero

    kero Модератор SOURCES & 2LZ Команда форума

    Публикаций:
    0
    Регистрация:
    4 апр 2006
    Сообщения:
    1.074
    Адрес:
    Москва
    Arthur
    Высота меню - это общесистемный параметр, т.е. одно значение для всех окон системы, для справки: ncsysmetrics.rar
    В конкретном окне можете прибегнуть к WM_NCCALCSIZE, пример: nccalcsize.rar
     
  9. Arthur

    Arthur New Member

    Публикаций:
    0
    Регистрация:
    27 янв 2007
    Сообщения:
    494
    kero
    Я тоже думал об этом сообщении, т. е. вычисление размеров окна, но вот задумался над тем может есть возможность подмены значения для определенного окна. В WM_NCCALCSIZE, передается либо RECT структура, либо NCCALCSIZE_PARAMS. В первом случае передаются новые координаты окна, а во втором набор 3-х RECT-структур, относящиеся только к самому окну, и WINDOWPOS-структура содержащая данные об операции положения окна в пространстве :) Может можно как-то перехватить тот участок где подсчитывается размер только меню а не окна вообщем?
     
  10. AsmGuru62

    AsmGuru62 Member

    Публикаций:
    0
    Регистрация:
    12 сен 2002
    Сообщения:
    689
    Адрес:
    Toronto
  11. kero

    kero Модератор SOURCES & 2LZ Команда форума

    Публикаций:
    0
    Регистрация:
    4 апр 2006
    Сообщения:
    1.074
    Адрес:
    Москва
    AsmGuru62
    GetMenuBarInfo - вы это к чему ? :)
     
  12. kero

    kero Модератор SOURCES & 2LZ Команда форума

    Публикаций:
    0
    Регистрация:
    4 апр 2006
    Сообщения:
    1.074
    Адрес:
    Москва
    AsmGuru62
    Ну, так о чем вы?
    Не промахнулись ли с GetMenuBarInfo?
    Хотя, конечно, брякнуть и слинять - право каждого :)
     
  13. Arthur

    Arthur New Member

    Публикаций:
    0
    Регистрация:
    27 янв 2007
    Сообщения:
    494
    Попробовал сделать так: в WM_NCCALCSIZE, меняю системное значение высоты меню, передаю сообщение дефолтному обработчику, и восстанавливаю системное значение, результат - окно появляется, меню - нет, и приложение зависает. В общем уже не знаю куда тыкать :dntknw:

    AsmGuru62
    Именно менюшный бар и есть исключение. Он не имеет своего окна, а просто вычисляется и отводится прямоугольная область под заголовком у окна к которому принадлежит меню, и там просто прорисовывается. Проблема собственно в том что там можно изменить ширину менюшек, но не как высоту, потому что, как сказал kero:
    И его можно получить путем вызова GetSystemMetrics с параметром SM_CYMENUSIZE. Ширина и высота без проблем меняются только у Popup-меню.
     
  14. Y_Mur

    Y_Mur Active Member

    Публикаций:
    0
    Регистрация:
    6 сен 2006
    Сообщения:
    2.494
    Arthur
    Можно сделать child окно размером и позицией как у желаемого меню, и разместить меню в этом окне.
     
  15. Arthur

    Arthur New Member

    Публикаций:
    0
    Регистрация:
    27 янв 2007
    Сообщения:
    494
    Y_Mur
    Child-окно (WS_VISIBLE | WS_CHILD) создается, а вот меню к нему не присваивается :dntknw:

    Попробовал еще в NCHITTEST, возвращать HTMENU, но без полезно, вообще не работает :dntknw: