[已解决]求教如何检测treeview等控件有键盘输入
本帖最后由 kxing 于 2013-12-2 00:00 编辑我希望在treeview控件上按字母来检索item。
所以需要检测treeview上是否有键盘输入。
且要知道输入的字符是什么。
不希望用键盘钩子实现,求大神们指点,感谢。 本帖最后由 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
感谢感谢,强人啊!!!! 获取输入的字符是键盘输入的,不是点击item获取的呢
比如我在treeview按下字母k,则返回k。
劳烦高人再次帮助,多谢。。。 哦哦,看出来了。
是chr($wParam)
反应迟钝,抱歉抱歉。。
再次感谢。。。 谢谢分享!~
页:
[1]