kxing 发表于 2013-12-1 20:32:39

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

本帖最后由 kxing 于 2013-12-2 00:00 编辑

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

不希望用键盘钩子实现,求大神们指点,感谢。

Ycxw2008 发表于 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


kxing 发表于 2013-12-1 23:43:34

感谢感谢,强人啊!!!!

kxing 发表于 2013-12-1 23:51:15

获取输入的字符是键盘输入的,不是点击item获取的呢
比如我在treeview按下字母k,则返回k。
劳烦高人再次帮助,多谢。。。

kxing 发表于 2013-12-1 23:59:29

哦哦,看出来了。
是chr($wParam)
反应迟钝,抱歉抱歉。。
再次感谢。。。

风行月影 发表于 2015-1-6 08:17:13

谢谢分享!~
页: [1]
查看完整版本: [已解决]求教如何检测treeview等控件有键盘输入