Как узнать, что мышь нажата вне искомого окна?
От: wisekaa  
Дата: 07.10.04 11:54
Оценка:
Ситуация следующая: создаю окно с WS_POPUP,
помещаю его как TOPMOST.
Фокус в это окно не передаю, т.к. получится некрасиво — главное окно
потеряет фокус, но события мыши в нем обрабатываю.
Окно должно закрыться, если нажать в нем или вне его.
Т.к. у окна фокуса не было, то и WM_KILLFOCUS мое
окно не получит. Как же ему узнать, что мышь нажата
вне его? Такое же поведение у выпадающего окна combobox'a.
Может кто знает, как там реализовано?
Re: Как узнать, что мышь нажата вне искомого окна?
От: Kochuev  
Дата: 07.10.04 12:09
Оценка:
Здравствуйте, wisekaa, Вы писали:

W>Ситуация следующая: создаю окно с WS_POPUP,

W>помещаю его как TOPMOST.
W>Фокус в это окно не передаю, т.к. получится некрасиво — главное окно
W>потеряет фокус, но события мыши в нем обрабатываю.
W>Окно должно закрыться, если нажать в нем или вне его.
W>Т.к. у окна фокуса не было, то и WM_KILLFOCUS мое
W>окно не получит. Как же ему узнать, что мышь нажата
W>вне его? Такое же поведение у выпадающего окна combobox'a.
W>Может кто знает, как там реализовано?

Наверное, прийдется поставить хук на сообщение мыши.
Re: Как узнать, что мышь нажата вне искомого окна?
От: DavidSel  
Дата: 07.10.04 12:41
Оценка:
Здравствуйте, wisekaa, Вы писали:

W>Ситуация следующая: создаю окно с WS_POPUP,

W>помещаю его как TOPMOST.
W>Фокус в это окно не передаю, т.к. получится некрасиво — главное окно
W>потеряет фокус, но события мыши в нем обрабатываю.
W>Окно должно закрыться, если нажать в нем или вне его.
W>Т.к. у окна фокуса не было, то и WM_KILLFOCUS мое
W>окно не получит. Как же ему узнать, что мышь нажата
W>вне его? Такое же поведение у выпадающего окна combobox'a.
W>Может кто знает, как там реализовано?


как насчет захвата мыши?
SetCapture
История нас рассудит...
Re[2]: Как узнать, что мышь нажата вне искомого окна?
От: wisekaa  
Дата: 07.10.04 13:02
Оценка:
Здравствуйте, DavidSel, Вы писали:


DS>как насчет захвата мыши?

DS>SetCapture

Как я понимаю, даже если мышь захватить, то
события от неё окно получит, если мышь над ним. Если мышь уходит
из окна, то и сообщения больше НЕ приходят.
Re[3]: Как узнать, что мышь нажата вне искомого окна?
От: DavidSel  
Дата: 07.10.04 13:21
Оценка:
Здравствуйте, wisekaa, Вы писали:

W>Здравствуйте, DavidSel, Вы писали:



DS>>как насчет захвата мыши?

DS>>SetCapture

W>Как я понимаю, даже если мышь захватить, то

W>события от неё окно получит, если мышь над ним. Если мышь уходит
W>из окна, то и сообщения больше НЕ приходят.

If the mouse cursor is over a window created by another thread, the system will direct mouse input to the specified window only if a mouse button is down.

при нажатой клавише сообщения приходят
История нас рассудит...
Re[4]: Как узнать, что мышь нажата вне искомого окна?
От: Carc Россия http://www.amlpages.com/home.php
Дата: 07.10.04 13:28
Оценка:
Здравствуйте, DavidSel, Вы писали:

DS>Здравствуйте, wisekaa, Вы писали:


W>>Здравствуйте, DavidSel, Вы писали:



DS>>>как насчет захвата мыши?

DS>>>SetCapture

W>>Как я понимаю, даже если мышь захватить, то

W>>события от неё окно получит, если мышь над ним. Если мышь уходит
W>>из окна, то и сообщения больше НЕ приходят.

DS>If the mouse cursor is over a window created by another thread, the system will direct mouse input to the specified window only if a mouse button is down.


DS>при нажатой клавише сообщения приходят

только при нажатой клавише, если звать SetCapture без нажатой клавиши мышуня не захватится
Aml Pages Home
Re[5]: Как узнать, что мышь нажата вне искомого окна?
От: DavidSel  
Дата: 07.10.04 13:52
Оценка:
Здравствуйте, Carc, Вы писали:

C>только при нажатой клавише, если звать SetCapture без нажатой клавиши мышуня не захватится


простите, но при всем уважении к вам все таки захватится. Просто сообщения от мыши находящейся вне окна-"захватчика" будут получены этим окном только когда клавиша будет в состоянии "даун"
История нас рассудит...
Re[6]: Как узнать, что мышь нажата вне искомого окна?
От: Carc Россия http://www.amlpages.com/home.php
Дата: 07.10.04 13:56
Оценка:
Здравствуйте, DavidSel, Вы писали:

DS>Здравствуйте, Carc, Вы писали:


C>>только при нажатой клавише, если звать SetCapture без нажатой клавиши мышуня не захватится


DS>простите, но при всем уважении к вам все таки захватится. Просто сообщения от мыши находящейся вне окна-"захватчика" будут получены этим окном только когда клавиша будет в состоянии "даун"

Ну а смысл тогда всей этой операции то? Сразу же все и сбросится!?!
Aml Pages Home
Re[6]: Как узнать, что мышь нажата вне искомого окна?
От: DavidSel  
Дата: 07.10.04 13:57
Оценка:
Здравствуйте, DavidSel, Вы писали:

DS>Здравствуйте, Carc, Вы писали:


C>>только при нажатой клавише, если звать SetCapture без нажатой клавиши мышуня не захватится


DS>простите, но при всем уважении к вам все таки захватится. Просто сообщения от мыши находящейся вне окна-"захватчика" будут получены этим окном только когда клавиша будет в состоянии "даун"


хотя немного вру...приводить клавишу в такое состояние надо именно на окне-захватчике.
способ не годится.
к сожалению.
История нас рассудит...
Re[2]: Как узнать, что мышь нажата вне искомого окна?
От: DavidSel  
Дата: 07.10.04 14:00
Оценка:
Здравствуйте, Kochuev, Вы писали:

K>Здравствуйте, wisekaa, Вы писали:


W>>Ситуация следующая: создаю окно с WS_POPUP,

W>>помещаю его как TOPMOST.
W>>Фокус в это окно не передаю, т.к. получится некрасиво — главное окно
W>>потеряет фокус, но события мыши в нем обрабатываю.
W>>Окно должно закрыться, если нажать в нем или вне его.
W>>Т.к. у окна фокуса не было, то и WM_KILLFOCUS мое
W>>окно не получит. Как же ему узнать, что мышь нажата
W>>вне его? Такое же поведение у выпадающего окна combobox'a.
W>>Может кто знает, как там реализовано?

K>Наверное, прийдется поставить хук на сообщение мыши.


похоже на то — придется ставить хук
История нас рассудит...
Re: Как узнать, что мышь нажата вне искомого окна?
От: Alex Alexandrov США  
Дата: 07.10.04 19:47
Оценка: :)
Здравствуйте, 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)
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.