Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.041 c
2-1215701956
tytus
2008-07-10 18:59
2008.08.17
Как в ячейку Excel записать знак суммы ∑ ?


15-1214669750
Tommy
2008-06-28 20:15
2008.08.17
async professional


2-1215757475
Igor_34
2008-07-11 10:24
2008.08.17
Текущее разрешение экрана


2-1216035403
leonidus
2008-07-14 15:36
2008.08.17
Модальные формы и видимость глобальных переменных


4-1194777304
Niki
2007-11-11 13:35
2008.08.17
Процессы





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский