找回密码
 加入
搜索
查看: 4073|回复: 5

[GUI管理] [已解决]求教如何检测treeview等控件有键盘输入

[复制链接]
发表于 2013-12-1 20:32:39 | 显示全部楼层 |阅读模式
本帖最后由 kxing 于 2013-12-2 00:00 编辑

我希望在treeview控件上按字母来检索item。
所以需要检测treeview上是否有键盘输入。
且要知道输入的字符是什么。

不希望用键盘钩子实现,求大神们指点,感谢。
发表于 2013-12-1 22:59:42 | 显示全部楼层
本帖最后由 Ycxw2008 于 2013-12-1 23:00 编辑

给个子类化的例子,
应该有更好的方法.
#include <WinAPIEx.au3>
#include <APIConstants.au3>
#include <GuiTreeView.au3>
Local $hWnd = GUICreate('', 222, 222, 111, 111, $WS_VISIBLE + $WS_POPUP)
Local $tree = GUICtrlCreateTreeView(0, 0, 222, 222), $hTree = GUICtrlGetHandle($tree)
For $i = 97 To 122
    GUICtrlCreateTreeViewItem('_' & Chr($i), $tree)
Next
Global $wProcNew = DllCallbackRegister("_MyWindowProc", "ptr", "hwnd;uint;long;ptr")
Global $wProcOld = _WinAPI_SetWindowLong($hTree, $GWL_WNDPROC, DllCallbackGetPtr($wProcNew))
GUISetState()
While GUIGetMsg() <> -3
    Sleep(10)
WEnd
Func _MyWindowProc($hWnd, $Msg, $wParam, $lParam)
    Switch $Msg
        Case $WM_CHAR
            Local $hItem = _GUICtrlTreeView_FindItem($hWnd, '_' & Chr($wParam))
            ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $hItem = ' & $hItem & @CRLF) ;### Debug Console
            If $hItem Then _GUICtrlTreeView_SelectItem($hWnd, $hItem, $TVGN_CARET)
    EndSwitch
    Return _WinAPI_CallWindowProc($wProcOld, $hWnd, $Msg, $wParam, $lParam)
EndFunc   ;==>_MyWindowProc
 楼主| 发表于 2013-12-1 23:43:34 | 显示全部楼层
感谢感谢,强人啊!!!!
 楼主| 发表于 2013-12-1 23:51:15 | 显示全部楼层
获取输入的字符是键盘输入的,不是点击item获取的呢
比如我在treeview按下字母k,则返回k。
劳烦高人再次帮助,多谢。。。
 楼主| 发表于 2013-12-1 23:59:29 | 显示全部楼层
哦哦,看出来了。
是chr($wParam)
反应迟钝,抱歉抱歉。。
再次感谢。。。
发表于 2015-1-6 08:17:13 | 显示全部楼层
谢谢分享!~
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-11-16 13:06 , Processed in 0.074423 second(s), 23 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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