Ситуация следующая: создаю окно с WS_POPUP,
помещаю его как TOPMOST.
Фокус в это окно не передаю, т.к. получится некрасиво — главное окно
потеряет фокус, но события мыши в нем обрабатываю.
Окно должно закрыться, если нажать в нем или вне его.
Т.к. у окна фокуса не было, то и WM_KILLFOCUS мое
окно не получит. Как же ему узнать, что мышь нажата
вне его? Такое же поведение у выпадающего окна combobox'a.
Может кто знает, как там реализовано?
Re: Как узнать, что мышь нажата вне искомого окна?
Здравствуйте, wisekaa, Вы писали:
W>Ситуация следующая: создаю окно с WS_POPUP, W>помещаю его как TOPMOST. W>Фокус в это окно не передаю, т.к. получится некрасиво — главное окно W>потеряет фокус, но события мыши в нем обрабатываю. W>Окно должно закрыться, если нажать в нем или вне его. W>Т.к. у окна фокуса не было, то и WM_KILLFOCUS мое W>окно не получит. Как же ему узнать, что мышь нажата W>вне его? Такое же поведение у выпадающего окна combobox'a. W>Может кто знает, как там реализовано?
Наверное, прийдется поставить хук на сообщение мыши.
Re: Как узнать, что мышь нажата вне искомого окна?
Здравствуйте, wisekaa, Вы писали:
W>Ситуация следующая: создаю окно с WS_POPUP, W>помещаю его как TOPMOST. W>Фокус в это окно не передаю, т.к. получится некрасиво — главное окно W>потеряет фокус, но события мыши в нем обрабатываю. W>Окно должно закрыться, если нажать в нем или вне его. W>Т.к. у окна фокуса не было, то и WM_KILLFOCUS мое W>окно не получит. Как же ему узнать, что мышь нажата W>вне его? Такое же поведение у выпадающего окна combobox'a. W>Может кто знает, как там реализовано?
как насчет захвата мыши?
SetCapture
История нас рассудит...
Re[2]: Как узнать, что мышь нажата вне искомого окна?
Как я понимаю, даже если мышь захватить, то
события от неё окно получит, если мышь над ним. Если мышь уходит
из окна, то и сообщения больше НЕ приходят.
Re[3]: Как узнать, что мышь нажата вне искомого окна?
Здравствуйте, wisekaa, Вы писали:
W>Здравствуйте, DavidSel, Вы писали:
DS>>как насчет захвата мыши? DS>>SetCapture
W>Как я понимаю, даже если мышь захватить, то W>события от неё окно получит, если мышь над ним. Если мышь уходит W>из окна, то и сообщения больше НЕ приходят.
Здравствуйте, Carc, Вы писали:
C>только при нажатой клавише, если звать SetCapture без нажатой клавиши мышуня не захватится
простите, но при всем уважении к вам все таки захватится. Просто сообщения от мыши находящейся вне окна-"захватчика" будут получены этим окном только когда клавиша будет в состоянии "даун"
История нас рассудит...
Re[6]: Как узнать, что мышь нажата вне искомого окна?
Здравствуйте, DavidSel, Вы писали:
DS>Здравствуйте, Carc, Вы писали:
C>>только при нажатой клавише, если звать SetCapture без нажатой клавиши мышуня не захватится
DS>простите, но при всем уважении к вам все таки захватится. Просто сообщения от мыши находящейся вне окна-"захватчика" будут получены этим окном только когда клавиша будет в состоянии "даун"
Ну а смысл тогда всей этой операции то? Сразу же все и сбросится!?!
Здравствуйте, DavidSel, Вы писали:
DS>Здравствуйте, Carc, Вы писали:
C>>только при нажатой клавише, если звать SetCapture без нажатой клавиши мышуня не захватится
DS>простите, но при всем уважении к вам все таки захватится. Просто сообщения от мыши находящейся вне окна-"захватчика" будут получены этим окном только когда клавиша будет в состоянии "даун"
хотя немного вру...приводить клавишу в такое состояние надо именно на окне-захватчике.
способ не годится.
к сожалению.
История нас рассудит...
Re[2]: Как узнать, что мышь нажата вне искомого окна?
Здравствуйте, Kochuev, Вы писали:
K>Здравствуйте, wisekaa, Вы писали:
W>>Ситуация следующая: создаю окно с WS_POPUP, W>>помещаю его как TOPMOST. W>>Фокус в это окно не передаю, т.к. получится некрасиво — главное окно W>>потеряет фокус, но события мыши в нем обрабатываю. W>>Окно должно закрыться, если нажать в нем или вне его. W>>Т.к. у окна фокуса не было, то и WM_KILLFOCUS мое W>>окно не получит. Как же ему узнать, что мышь нажата W>>вне его? Такое же поведение у выпадающего окна combobox'a. W>>Может кто знает, как там реализовано?
K>Наверное, прийдется поставить хук на сообщение мыши.
похоже на то — придется ставить хук
История нас рассудит...
Re: Как узнать, что мышь нажата вне искомого окна?
Здравствуйте, wisekaa, Вы писали:
w> Ситуация следующая: создаю окно с WS_POPUP, w> помещаю его как TOPMOST. w> Фокус в это окно не передаю, т.к. получится некрасиво — главное окно w> потеряет фокус, но события мыши в нем обрабатываю. w> Окно должно закрыться, если нажать в нем или вне его. w> Т.к. у окна фокуса не было, то и WM_KILLFOCUS мое w> окно не получит. Как же ему узнать, что мышь нажата w> вне его? Такое же поведение у выпадающего окна combobox'a. w> Может кто знает, как там реализовано?
Не знаю, как в комбобоксе сделано, но можно нарисовать topmost прозрачное окно во весь экран и ловить сообщения на него.
-- Всего хорошего!
-- Alex Alexandrov, e-mail: alex_alexandrov(at)fromru(dot)com
Posted via RSDN NNTP Server 1.9 gamma
It's kind of fun to do the impossible (Walt Disney)