Srsly 发表于 2017-8-16 07:41:21

求助,怎样让一个窗口或者控件始终占有焦点,直到该窗口销毁~

不考虑使用GUISetState
目前我尝试注册了WM_COMMAND消息
伪代码如下:
if $WM_KILLFOCUS And (句柄=窗口句柄 or 句柄 = 控件句柄) then return
运行未得到想要的结果

求大家指点下。
@afan,A大,我搜索到一个帖子,看你回过一个类似的贴。求指点~~

Srsly 发表于 2017-8-16 12:56:14

回复 2# afan
尝试着写了一下,基本能实现功能,但未达预期效果。
求A大帮看下,代码怎么改一下。
Func _WM_ACTIVATE($hWnd, $Msg, $wParam, $lParam)
        if $lParma <> $hForm then         ;$hForm窗体句柄
                Winactive($hForm)
                GUICtrlSetState($Inptu,@GUI_FOCUS)   ;$hForm控件句柄
        Endif
EndFunc

afan 发表于 2017-8-16 11:20:24

注册 WM_ACTIVATE 消息

yamakawa 发表于 2017-8-16 11:44:21

from MSDN

While processing this message, do not make any function calls that display or activate a window. This causes the thread to yield control and can cause the application to stop responding to messages. For more information, see Message Deadlocks.

afan 发表于 2017-8-16 14:06:12

细节自行研究吧
Global $hForm = GUICreate('')
Global $Input = GUICtrlCreateInput('', 100, 100, 120, 20)
GUISetState()
GUIRegisterMsg('0x0006', '_WM_ACTIVATE')

While GUIGetMsg() <> -3
WEnd

Func _WM_ACTIVATE($hWnd, $msg, $wParam, $lParam)
        If Not $wParam Then
                WinActivate($hForm)
                GUICtrlSetState($Input, 0x100)
        EndIf
EndFunc   ;==>WM_ACTIVATE

yamakawa 发表于 2017-8-16 14:38:55

回复 5# afan


    {:face (356):}这种方式不保险,,,连续快速在其他窗口点击鼠标。。。。会导致程序获取不到焦点。。

afan 发表于 2017-8-16 15:31:19

回复 6# yamakawa


    有两个字叫细节
页: [1]
查看完整版本: 求助,怎样让一个窗口或者控件始终占有焦点,直到该窗口销毁~