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)
Как узнать, что мышь нажата вне искомого окна?
От: 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>Наверное, прийдется поставить хук на сообщение мыши.


похоже на то — придется ставить хук
История нас рассудит...
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.