koflion 发表于 2011-9-18 11:52:18

【已解决】Input无输入响应回车

本帖最后由 koflion 于 2011-9-18 14:08 编辑

如果用GUICtrlSetOnEvent注册,输入框只能响应变动过数据的操作,想使用GUIRegisterMsg 获取回车操作然后判断焦点应该可以实现。。,就是不知道该咋写,希望知道的朋友们提个醒。。。谢谢了、、

目的:无论$Input是否输入了信息,按下回车后Button控件获得焦点#include <GuiConstants.au3>
#include <EditConstants.au3>


Opt("GUIOnEventMode", 1)
Dim $Input
$GUI = GUICreate("测试", 140, 130)
GUISetOnEvent($GUI_EVENT_CLOSE, "GUICtrlMsg")
$Input = GUICtrlCreateInput("", 10, 10, 120, 25, BitOR($GUI_SS_DEFAULT_INPUT, $ES_CENTER, $ES_NOHIDESEL, $ES_AUTOVSCROLL, $ES_WANTRETURN))
GUICtrlSetState(-1, $GUI_FOCUS)
GUICtrlSetFont(-1, 12, 200, 0, "宋体")
$Input = GUICtrlCreateInput("", 10, 50, 120, 25, BitOR($GUI_SS_DEFAULT_INPUT, $ES_CENTER, $ES_AUTOVSCROLL, $ES_PASSWORD, $ES_WANTRETURN))
GUICtrlSetFont(-1, 12, 100, 0)
$Button = GUICtrlCreateButton("测试", 10, 90, 120, 30)
GUICtrlSetFont(-1, 16, 400, 0)
GUICtrlSetOnEvent($Button, "GUICtrlMsg")
GUICtrlSetOnEvent($Input, "GUICtrlMsg")
GUICtrlSetOnEvent($Input, "GUICtrlMsg")
GUISetState(@SW_SHOW)
While 1
        Sleep(1000)
WEnd       
       
       
        Func GUICtrlMsg()
        Switch @GUI_CtrlId;选择事件 ID 或 控件 ID
                Case $GUI_EVENT_CLOSE;如果点下的是$GUI_EVENT_CLOSE(关闭)
                        Exit
                Case $Input
                        GUICtrlSetState($Input, $GUI_FOCUS)
                Case $Input
                        GUICtrlSetState($Button, $GUI_FOCUS)
                Case $Button
                        MsgBox(0,"","1#输入框:"&GUICtrlRead($Input)&@LF&@LF&"2#输入框:"&GUICtrlRead($Input))
        EndSwitch

EndFunc
       

afan 发表于 2011-9-18 12:49:26

#include <GuiConstants.au3>
#include <EditConstants.au3>

Opt("GUIOnEventMode", 1)

Dim $Input
$GUI = GUICreate("测试", 140, 130)
GUISetOnEvent($GUI_EVENT_CLOSE, "GUICtrlMsg")
$Input = GUICtrlCreateInput("", 10, 10, 120, 25, BitOR($GUI_SS_DEFAULT_INPUT, $ES_CENTER, $ES_NOHIDESEL, $ES_AUTOVSCROLL, $ES_WANTRETURN))
GUICtrlSetState(-1, $GUI_FOCUS)
$iFOCUS = $Input
GUICtrlSetFont(-1, 12, 200, 0, "宋体")
$Input = GUICtrlCreateInput("", 10, 50, 120, 25, BitOR($GUI_SS_DEFAULT_INPUT, $ES_CENTER, $ES_AUTOVSCROLL, $ES_PASSWORD, $ES_WANTRETURN))
GUICtrlSetFont(-1, 12, 100, 0)
$Button = GUICtrlCreateButton("测试", 10, 90, 120, 30)
GUICtrlSetFont(-1, 16, 400, 0)
GUICtrlSetOnEvent(-1, "GUICtrlMsg")

GUISetState(@SW_SHOW)
GUIRegisterMsg(0x0111, "MY_WM_COMMAND") ;$WM_COMMAND

While 1
        Sleep(100)
WEnd

Func GUICtrlMsg()
        Switch @GUI_CtrlId;选择事件 ID 或 控件 ID
                Case $GUI_EVENT_CLOSE;如果点下的是$GUI_EVENT_CLOSE(关闭)
                        Exit
                Case $Button
                        MsgBox(0, "", "1#输入框:" & GUICtrlRead($Input) & @LF & @LF & "2#输入框:" & GUICtrlRead($Input))
        EndSwitch
EndFunc   ;==>GUICtrlMsg

Func MY_WM_COMMAND($hWnd, $Msg, $wParam)
        #forceref $hWnd, $iMsg
        $nNotifyCode = BitShift($wParam, 16)
        $nID = BitAND($wParam, 0x0000FFFF)
        If $nID = 1 And $nNotifyCode = 0 Then
                GUICtrlSetState($iFOCUS + 1, $GUI_FOCUS)
                Return 0
        Else
                $iFOCUS = $nID
        EndIf
        Return $GUI_RUNDEFMSG
EndFunc   ;==>MY_WM_COMMAND

koflion 发表于 2011-9-18 14:07:43

原来如此,使用WM_COMMAND (好囧。。帮助里面有。。就是英文的看起来好累,没理解清楚)
百度了下:
WM_COMMAND 当用户点击菜单、按钮、下拉列表框、快捷键等控件时候,会触发WM_COMMAND ,WM_COMMAND消息中有两个参数,wparam、lparam,定义如下:
wParam 高两个字节    通知码
wParam 低两字节   命令ID
lParam 发送命令消息的子窗体句柄。
如果这个消息是由子窗口控件产生,如button产生则: LOWORD(wParam): 控件ID HIWORD(wParam): 通知码   lParam: 子窗口句柄。   如果这个消息是由子窗口或者快捷键产生,则通知码为1,由菜单产生,通知码为0。通过参数,可以区分这个消息的来源是来自于控件,快捷键还是菜单。

测试中wParam 返回的数据格式为:0x00000000(十六位进制的8位数)
A大回复的代码中
$nNotifyCode = BitShift($wParam, 16) (通过右移运算获取高两个字节获取通知码,不过没明白为什么要移动16次,难道是因为是十六进制的??)
题外话:位移运算帮助中的Local $x = BitShift(14, 2)
;x == 3 因为 1110b 右移两次是 11b == 3 等于我这种没学习过人很难搞懂,最后明白了。。使用的是2进制换算,然后移位,大家别被那个b搞晕了。。我之前也觉得奇怪。。2进制的话不可能有b,16进制的话14是e啊。。倒
$nID = BitAND($wParam, 0x0000FFFF),按位或运算 其功能是参与运算的两数各对应的二进位相或。只要对应的二个二进位有一个为1时,结果位就为1。(这个。。。这个。。太晕了。。不懂待学)
然后就是
If $nID = 1 And $nNotifyCode = 0 Then
呵呵。。明白了。。。非常感谢啊!!!!!

veve 发表于 2011-11-3 22:21:56

没搞懂做成4个input 就不行了

rgb 发表于 2012-4-6 09:00:20

upupupupup

ak47gglllk 发表于 2014-7-14 14:50:16

学习下,感谢,感谢

qsy666888 发表于 2014-7-21 09:38:13

学习下,感谢,感谢
页: [1]
查看完整版本: 【已解决】Input无输入响应回车