找回密码
 加入
搜索
查看: 4332|回复: 6

[GUI管理] 【已解决】如何利用消息截取GUIRegisterMsg,判断是那个文本框在输入中。。

  [复制链接]
发表于 2014-7-7 16:19:58 | 显示全部楼层 |阅读模式
本帖最后由 siton 于 2014-7-7 23:30 编辑

如何利用消息截取,判断是那个文本框正在在输入状态。。
如图

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
发表于 2014-7-7 19:11:10 | 显示全部楼层
本帖最后由 水木子 于 2014-7-7 19:15 编辑

#include <WinAPI.au3>
#include <WindowsConstants.au3>

GUICreate('', 400, 200)
$Input1 = GUICtrlCreateInput('', 50, 80, 100, 21)
$Input2 = GUICtrlCreateInput('', 250, 80, 100, 21)
$Input3 = GUICtrlCreateInput('', 50, 130, 100, 21)
$Input4 = GUICtrlCreateInput('', 250, 130, 100, 21)
$Label1 = GUICtrlCreateLabel('', 0, 30, 400, 17, 1)
GUISetState()

GUIRegisterMsg($WM_COMMAND, 'WM_COMMAND')

Do
Until GUIGetMsg() = -3

Func WM_COMMAND($hWnd, $iMsg, $iwParam, $ilParam)
        Local $iFromID, $iMsgID, $iControlID
        $iControlID = BitAND($iwParam, 0x0000FFFF)
        $iFromID = _WinAPI_LoWord($iwParam)
        $iMsgID = _WinAPI_HiWord($iwParam)
        Switch $iMsgID
                Case 1024
                        ConsoleWrite('ControlID =' & $iControlID & '   MsgID = ' & $iMsgID & @CRLF)
                        GUICtrlSetData($Label1, '输入框 ' & ($iControlID - $Input1) + 1 & ' 正在录入数据。')
        EndSwitch
EndFunc   ;==>WM_COMMAND

评分

参与人数 1金钱 +50 收起 理由
502762378 + 50

查看全部评分

 楼主| 发表于 2014-7-7 19:21:27 | 显示全部楼层
大牛,的例子很牛。。。确实是这效果。
我要用。 $EN_CHANGE 这个值来判断,怎么写呢。
发表于 2014-7-7 19:58:08 | 显示全部楼层
本帖最后由 水木子 于 2014-7-7 20:20 编辑

回复 3# siton

其实输入框录入状态有两种
1:$EN_UPDATE = 1024 即编辑控件将重绘。
2:$EN_CHANGE = 768  即改变控件中文本。

而你所说的 $EN_CHANGE = 768,是第2种情况,从常理来看用 $EN_CHANGE = 768 来做判断应该更加恰当。
要想用 $EN_CHANGE 来判断,只需要将第23行的 1024 改为 768 即可,当然也可以直接使用常量 $EN_CHANGE 不过需要添加 #include <GuiEdit.au3> 库文件。

其实细心观察,你会发现这个 MsgID 的值远远不止这些,它们分别表示不同的消息,比如控件获得输入焦点、控件失去输入焦点、等!

#include <WinAPI.au3>
#include <GuiEdit.au3>
#include <WindowsConstants.au3>

GUICreate('', 400, 200)
$Input1 = GUICtrlCreateInput('', 50, 80, 100, 21)
$Input2 = GUICtrlCreateInput('', 250, 80, 100, 21)
$Input3 = GUICtrlCreateInput('', 50, 130, 100, 21)
$Input4 = GUICtrlCreateInput('', 250, 130, 100, 21)
$Label1 = GUICtrlCreateLabel('', 0, 30, 400, 17, 1)
GUISetState()

GUIRegisterMsg($WM_COMMAND, 'WM_COMMAND')
ConsoleWrite($EN_UPDATE)
Do
Until GUIGetMsg() = -3

Func WM_COMMAND($hWnd, $iMsg, $iwParam, $ilParam)
        Local $iFromID, $iMsgID
        $iControlID = BitAND($iwParam, 0x0000FFFF)
        $iFromID = _WinAPI_LoWord($iwParam)
        $iMsgID = _WinAPI_HiWord($iwParam)
        Switch $iMsgID
                Case $EN_CHANGE
                        ConsoleWrite('ControlID =' & $iControlID & '   MsgID = ' & $iMsgID & @CRLF)
                        GUICtrlSetData($Label1, '输入框 ' & ($iControlID - $Input1) + 1 & ' 正在录入数据。')
        EndSwitch
EndFunc   ;==>WM_COMMAND

评分

参与人数 1金钱 +10 收起 理由
siton + 10

查看全部评分

 楼主| 发表于 2014-7-7 22:26:11 | 显示全部楼层
灰常感应大牛。。高人。。
发表于 2014-7-11 18:34:53 | 显示全部楼层
菜鸟问题:放一个GUICtrlCreateCombo,咋检查不出来呢?
发表于 2014-7-12 07:47:44 | 显示全部楼层
学习了  ,焦点应该怎么搞?
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-4-20 12:29 , Processed in 0.096112 second(s), 29 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表