· Начало · Отвђтить · Статистика · Поиск · FAQ · Правила · Установки · Язык · Выход · WASM.RU · Noir.Ru ·

 WASM Phorum —› WASM.WIN32 —› SetFocus

Посл.отвђт Сообщенiе


Дата: Ноя 10, 2003 14:08:32

Делаю
SetFocus,hWindow
при этом фокус получается какойто не такой, т.е он отличается от случая, если просто кликнуть мышкой внутрь окна, т.е. если просто SetFocus, то при потере ожидаемого фокуса не происходит WM_KILLFOCUS, а вот если сделать
клик внутри окна (или симитировать его с помощью mouse_event), то окно приобретает какойто более прочный фокус :) , т.е. WM_KILLFOCUS срабатывает когда окно теряет фокус.
Есть какойто способ сделать окну фокус не кликая внутрь его?


Дата: Ноя 10, 2003 18:34:24

SetFocus() всегда сам делает WM_KILLFOCUS кому надо (тому HWND, что сейчас имеет фокус). Проблема скорее всего в том, что внешнее окно содержит внутреннее окно. Когда внутреннее окно кликается - оно сразу получает фокус. Если же SetFocus() вызывается для внешнего окна, то оно должно передать фокус окну внутреннему в своём WM_SETFOCUS обработчике.


Дата: Ноя 12, 2003 15:13:14 · Поправил: prog

нет, есть просто одно окно, созданное так :

invoke CreateWindowEx,WS_EX_PALETTEWINDOW,addr sAppClassName,addr sAppName,WS_POPUP+WS_DLGFRAME,10,10,300,200,0,0,hInstance,0

потом создается второе окно

invoke CreateWindowEx,0,addr sAppClassName,addr sAppName,WS_OVERLAPPED+WS_CAPTION+WS_SYSMENU+WS_MINIMIZEBOX+WS_MAXIMIZ EBOX+WS_VISIBLE+WS_SIZEBOX,450,450,300,200,0,0,hInstance,0

делаю SetFocus первому окну, потом кликаю просто на рабочий стол - KILLFOCUS первого окна не вызывается.

а вот если кликнуть внутрь первого окна- тогда все ок, при клике на рабочий стол вызывается KILLFOCUS первого окна.


Дата: Ноя 13, 2003 06:23:48

prog
В первом случае окно получает фокус?


Дата: Ноя 13, 2003 17:06:31 · Поправил: prog

а как проверить??
WM_SETFOCUS срабатывает даже когда не делаешь SetFocus, т.к. окно восстанавливается с пом. ShowWindow,...,RESTORE

т.е. окно создается без VS_VISIBLE, потом создается второе окно видимое, потом при клике во втором окне на кнопку первое делается RESTORE и тут я ему делаю SetFocus,
(но у него WM_SETFOCUS срабатывает и без моего SetFocus)
, и теперь мне нужно чтобы при клике просто по рабочему столу, чужому окну и т.п. мое первое окно(то, которое RESTORE) потеряло фокус и у него сработалобы WM_KILLFOCUS.
Так вот, это происходит только если Кликнуть внутрь этого окна, а если просто сделать этому окну SetFocus, то этого не происходит.


Дата: Ноя 14, 2003 04:41:47

prog
а как проверить??
До SetFocus из второго окна сделай OutputDebugString("до setfocus"), а после OutputDebugString("после setfocus"), при получении WM_SETFOCUS в первом окне сделай OutputDebugString("1 WM_SETFOCUS") при получении WM_KILLFOCUS в первом окне сделай OutputDebugString("1 WM_KILLFOCUS") и проанализируй что происходит.

Как первое окно обрабатывает WM_SETFOCUS?
На первом окне есть элементы управления?
Когда первому окну делаешь ShowWindow + RESTORE оно переходит на передний план? Должно переходить?


Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.065