Подмена контекстного меню собственным окном

Здравствуйте. Можно ли как-нибудь заменить контекстное меню на свое собственное окно? Мне это нужно для изменения внешнего вида меню. Да, я пробовал перерисовывать нативные элементы меню через OnMeasureItem и OnDrawItem, но этого оказалось не достаточно. Используя этот метод перерисовки, нельзя рисовать за приделами границ элемента меню. Следующим экспериментом было создание обычного окна и рисование элементов меню прямо на нем. Получилось так, как это было задумано, но тут возникла проблема: необходимость отслеживания различных событий, при которых форма (собственно нарисованное меню) должна закрываться. Меня интересует, есть ли готовые решения для подобного отслеживания событий? Может есть уже реализованные методы WinAPI, для создания подобных меню? Прошу помощи.UPD Была еще идея с отслеживанием события потери фокуса у собственно созданного меню. Однако, меню не должно перетягивать на себя фокус с приложения, вызвавшего его. Может я не до конца разобрался с получением фокуса. Только что наткнулся на некоторое описание флага WS_EX_NOACTIVATE. Буду разбираться с ним. Хотя раньше ничего не получалось.
3 ответа

Не совсем понятно где надо заменить контекстное меню. Если в контроле, например TMemo, то отключаем там штатное контекстное меню и вешаем в обработку правого щелчка мыши открытие своего окна.


igh0st Вызвать контекстное меню из любого места - не проблема, а вот отловить все события, при которых необходимо закрыть меню, уже проблема.


Вроде глобальным хуком можно отловить момент появления контекстного меню.