Главная страница
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.011 c
2-1215890925
Mixail2
2008-07-12 23:28
2008.08.17
TTreeNode


2-1215701956
tytus
2008-07-10 18:59
2008.08.17
Как в ячейку Excel записать знак суммы ∑ ?


2-1215711944
Res
2008-07-10 21:45
2008.08.17
как переместить указатель в начало файла


2-1216027505
elserpiente
2008-07-14 13:25
2008.08.17
TTreeView изменение стиля текста элемента


2-1215767508
ekto
2008-07-11 13:11
2008.08.17
Как разбить текст на строки?