Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.08.17;
Скачать: CL | DM;

Вниз

PopUp Menu + Tray   Найти похожие ветки 

 
Dib@zol ©   (2007-12-03 21:11) [0]

Делаю прогу, размещающую иконку в трее. По нажатии на неё главному окну приходит сообщение, и в его обработчике запускается TrackPopupMenu. Проблема в том, что я с его помощью не могу отследить нажатие кнопки мыши за пределами этого меню, чтобы убрать его с экрана. SetCapture не помогает, ибо окно меню не принадлежит вызывающему потоку (сиречь потоку моей проги), проставить свою оконную процедуру я тоже (из-за несовпадения адресных пространств) не могу. Пока что реализовал перехват мышки через глобальный хук. Вопрос: как реализовать отлов нажатия за пределами попуп-меню более просто и менее глюко- и тормозоопасно?


 
antonn ©   (2007-12-04 00:00) [1]

я может щас глупость сказу, а менюхе не приходит WM_KILLFOCUS?


 
Юрий Зотов ©   (2007-12-04 01:03) [2]

> реализовать отлов нажатия за пределами попуп-меню

Никак не нужно, система самом все отловит и все закроет. Нужно только грамотно меню вызвать. Перед TrackPopupMenu надо через SetForegroundWindow вывести на передний план окно, для которого вызывается popup-меню (даже если это окно невидимое), а после TrackPopupMenu послать этому окну WM_NULL через PostMessage.


 
Dib@zol ©   (2007-12-04 08:32) [3]

> [1] antonn ©   (04.12.07 00:00)
> я может щас глупость сказу, а менюхе не приходит WM_KILLFOCUS?

В том то и дело, что приходит, только как его поймать? Окно меню принадлежит, еснеошибаюсь, потоку Кернел32 (Вин9х) и если система пойдёт по адресу, переданному в качестве оконной процедуры в SetWindowLong, то возникнет рантайм 219, более известный как AV. Ведь даже если у моей проги по адресу скажем $0038:7689 расположен первый байт новой оконной процедуры, то у системы там может быть что угодно, но не это
> (из-за несовпадения адресных пространств)


> [2] Юрий Зотов ©   (04.12.07 01:03)

Респект!!! Заработало, урряяя :)



Страницы: 1 вся ветка

Текущий архив: 2008.08.17;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.018 c
2-1215764597
Kolan
2008-07-11 12:23
2008.08.17
А Resize не вызывается в дизайн тайме?


4-1194334678
Mamed
2007-11-06 10:37
2008.08.17
Lan Card Disable


2-1215761892
Костик
2008-07-11 11:38
2008.08.17
Помогите написать "Уведомлятель"


2-1215759810
TUserClass
2008-07-11 11:03
2008.08.17
"Полосатый" DBGrid и несколько выделенных записей ...


2-1215954643
maxNmin
2008-07-13 17:10
2008.08.17
удаление в корзину