happytc 发表于 2011-2-14 09:26:52

问下在au3用$WM_KEYDOWN消息的问题

怎么在au3里用它个时,一个空的窗口用它有效,而一旦在这个窗口再建了别的控件后,它就没有效果了呢?
如下面的代码,注释掉这一行:;$OkButton = GUICtrlCreateButton("ok",10,10,20,20),正常,一旦去掉这行的分号,就没有效果了?
奇怪了。
Global Const $WM_KEYDOWN = 0x0101

$hwd = GUICreate("TEST",300,300)
GUIRegisterMsg($WM_KEYDOWN, "WM_KeyDown")
;$OkButton = GUICtrlCreateButton("ok",10,10,20,20)
GUISetState()

While 1
    $msg = GUIGetMsg()
    Switch $msg
      Case -3
            Exit
    EndSwitch
WEnd

Func WM_KeyDown($HWnd,$iMsg,$wParam,$lParam)
    MsgBox(0, "", "按键值是: " & BitAND($wParam,0xFF))
EndFunc

happytc 发表于 2011-2-14 09:34:29

不会又是au3里的特别吧。在实际我的程序中,想在截获回车键后“doing smth”,由于用了Opt("GUIOnEventMode", 1),就没法用GUIGetMsg函数了

chenronting 发表于 2011-2-14 11:24:36

对于 这种VM 的参数一直很好奇, 这些值都有些什么功能呢?不知道楼主是哪里看过来的, 有中文资料吗,分享于我与众多坛友吧~感谢

xxoojoeooxx 发表于 2011-2-14 18:36:24

因为你的按钮吃掉了$WM_KEYDOWN 的消息

happytc 发表于 2011-2-15 20:36:05

回复 4# xxoojoeooxx
按照WinAPI里的说明,你的说法是不成立的。象在C/C++里,就可以直接用了。
除非au3里有特别规定,但我找了帮助半天也没有看到相关说明。
别的wm_消息都没有问题,可以直接用,难道就“吃”wm_keydown的消息/

xxoojoeooxx 发表于 2011-2-15 20:58:31

本帖最后由 xxoojoeooxx 于 2011-2-15 21:06 编辑

回复 5# happytc

WM_KEYDOWN消息由焦点送往视窗而不是前台视窗,并不会“冒泡”至父视窗。这就意味着,按钮和其它控件可以接收这些消息,并能“吃掉”它们。

happytc 发表于 2011-2-15 22:23:56

回复 6# xxoojoeooxx
谢了,看来在au3里果然如此了。

pusofalse 发表于 2011-2-16 17:18:30

这不是AU3的特性,所有语言都是如此。
页: [1]
查看完整版本: 问下在au3用$WM_KEYDOWN消息的问题