Обработка сообщений мыши для пунктов контекстного меню

Тема в разделе "WASM.BEGINNERS", создана пользователем Xerx, 11 июл 2007.

  1. Xerx

    Xerx Алексей

    Публикаций:
    0
    Регистрация:
    17 фев 2005
    Сообщения:
    528
    Адрес:
    Russia
    Кто сталкивался с проблемой получения сообщений для отдельных пунктов меню? Нужно ловить сообщения прихода и ухода мыши с пунктов меню. Есть ли возможность осуществления этого?
     
  2. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    WM_MENUSELECT это не то? Если нет, тогда через owner-draw.
     
  3. Xerx

    Xerx Алексей

    Публикаций:
    0
    Регистрация:
    17 фев 2005
    Сообщения:
    528
    Адрес:
    Russia
    IceStudent
    Мне не нужно заменять стандартное рисование пунктов. Мне нужно просто получать сообщения от системы (или реализовать аналоги) о приходе курсора мыши на конкретный элемент меню и об уходе курсора с него. Или хотя бы о движений в данный момент курсора над элементом меню.
     
  4. Xerx

    Xerx Алексей

    Публикаций:
    0
    Регистрация:
    17 фев 2005
    Сообщения:
    528
    Адрес:
    Russia
    IceStudent
    Ну и WM_MENUSELECT само собой не то....
     
  5. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    Это почему?
     
  6. Xerx

    Xerx Алексей

    Публикаций:
    0
    Регистрация:
    17 фев 2005
    Сообщения:
    528
    Адрес:
    Russia
    IceStudent
    Это сообщение посылается родительскому окну при выборе элемента меню. А мне нужны сообщения просто о НАХОЖДЕНИИ курсора над элементом. Ну и ухода с элемента/перехода на другой.
     
  7. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    Xerx
    Если не ошибаюсь, это сообщение посылается, как только наводишь курсор на элемент меню.
     
  8. GMax

    GMax Member

    Публикаций:
    0
    Регистрация:
    3 июл 2006
    Сообщения:
    218
    WM_MENUSELECT как раз то, что тебе надо.
    С помощи него можно определить и “приход” и “уход” курсора с пункта меню.
    Расскажи конкретней, что тебе надо?
     
  9. Xerx

    Xerx Алексей

    Публикаций:
    0
    Регистрация:
    17 фев 2005
    Сообщения:
    528
    Адрес:
    Russia
    l_inc
    Э... Да, точно. Неправильно перевел. Сначала понял, что сообщение вызывается при нажатии, а не простом наведении.
    Полезное сообщение, но вот как в данном случае (его использовании) ловить уход курсора из пределов меню?

    P.S. Может можно как-то получить handle меню как окна?
     
  10. GMax

    GMax Member

    Публикаций:
    0
    Регистрация:
    3 июл 2006
    Сообщения:
    218
    Можно вот так:
    .if flag==FALSE
    ;Курсор “пришел” на меню
    mov flag,TRUE
    .else
    ; Курсор “ушел” с меню
    mov flag,FALSE
    .endif

    P.S. http://www.codeproject.com/menu/menuitemtooltip.asp
     
  11. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    Простор для воображения.

    Можно, хотя это хак, основанный на том, что (теоретически) должно быть только 1 меню на десктоп: по WM_INITMENU[POPUP] искать соответствующий класс меню как окна и работать уже с ним. Это было тоже на codeproject, в разделе, посвящённом менюшкам.
     
  12. Xerx

    Xerx Алексей

    Публикаций:
    0
    Регистрация:
    17 фев 2005
    Сообщения:
    528
    Адрес:
    Russia
    IceStudent
    Да идей много. Просто, может кто чего умного предложит :derisive:

    А второе попробую и отпишу результаты...
     
  13. Xerx

    Xerx Алексей

    Публикаций:
    0
    Регистрация:
    17 фев 2005
    Сообщения:
    528
    Адрес:
    Russia
    Кстати, тут одна проблемка. Я использую в качестве ID создаваемых пунктов меню DWORD (храню HWND'шки). А в сообщениии WM_MENUSELECT это значение передается в LOWORD(wParam)... Я чего-то недопонял или мне придется создавать некий массив HWND'шек, а при создании пункта передавать ключи массива (хеша в данном случае)?

    Или может можно как-нить впихнуть HWND в WORD? Может там выравнивание какое типа 0XXXX0000h или еще что-то подобное... Или может можно задать пункту меню дополнительные пользовательские данные...

    P.S. Уже разобрался... Если кому интересно:
    Код (Text):
    1. SetMenuItemInfo(..., MENUITEMINFO.dwItemData)
     
  14. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    В ID надо класть просто уникальный идентификатор, а свои данные (HWND, указатель на структуру какую-то) класть в MENUITEMINFO.dwItemData.
     
  15. Xerx

    Xerx Алексей

    Публикаций:
    0
    Регистрация:
    17 фев 2005
    Сообщения:
    528
    Адрес:
    Russia
    IceStudent
    Ну я об этом уже написал :derisive: