Форум: "Основная";
Текущий архив: 2008.08.17;
Скачать: [xml.tar.bz2];
Вниз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;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.052 c