NunoBorges Posted August 5, 2011 Share Posted August 5, 2011 Viva, How can i control the behavior of the spacebar in a listview checkbox. With GUIRegisterMsg ($WM_NOTIFY, "WM_NOTIFY"), we can control almost everything, but the space bar? A checkbox outside of a listview is very simple thanks Link to comment Share on other sites More sharing options...
PsaltyDS Posted August 5, 2011 Share Posted August 5, 2011 What, exactly, did you want to control about it? Just prevent CHECK/UNCHECK, or what? Valuater's AutoIt 1-2-3, Class... Is now in Session!For those who want somebody to write the script for them: RentACoder"Any technology distinguishable from magic is insufficiently advanced." -- Geek's corollary to Clarke's law Link to comment Share on other sites More sharing options...
NunoBorges Posted August 5, 2011 Author Share Posted August 5, 2011 Yes, Just do something like msgbox when i check/uncheck. I remenber that is something like keydown, but ... Thanks Link to comment Share on other sites More sharing options...
NunoBorges Posted August 5, 2011 Author Share Posted August 5, 2011 I've found On the "WM_NOTIFY"... Func WM_NOTIFY($hWnd, $iMsg, $wParam, $lParam) Local $hWndFrom, $iIDFrom, $iCode, $tNMHDR, $hWndListView $hWndListView = $DriveView If Not IsHWnd($DriveView) Then $hWndListView = GUICtrlGetHandle($DriveView) $tNMHDR = DllStructCreate($tagNMHDR, $lParam) $hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom")) $iIDFrom = DllStructGetData($tNMHDR, "IDFrom") $iCode = DllStructGetData($tNMHDR, "Code") Switch $hWndFrom Case $hWndListView Switch $iCode Case $LVN_KEYDOWN MsgBox(0, "", "$LVN_KEYDOWN") ... Thanks Link to comment Share on other sites More sharing options...
PsaltyDS Posted August 5, 2011 Share Posted August 5, 2011 (edited) Changing the checkbox state changes the State Image Index (bits 12-15) of the State field in the LVITEM struct - which is used by the _GuiCtrlListView_GetItemChecked() function. You get LVN_ITEMCHANGING and LVN_ITEMCHANGED notifications, which give you a NMLISTVIEW struct where uNewState contains LVIS_STATEIMAGEMASK. P.S. I don't think those notifications contain the actual new checkbox state, so when you get a WM_NOTIFY of LVN_ITEMCHANGED, and see LVIS_STATEIMAGEMASK in the uNewState field, then you still have to do _GuiCtrlListView_GetItemChecked() to get the check/uncheck state of the box. (Not tested though...) Edited August 5, 2011 by PsaltyDS Valuater's AutoIt 1-2-3, Class... Is now in Session!For those who want somebody to write the script for them: RentACoder"Any technology distinguishable from magic is insufficiently advanced." -- Geek's corollary to Clarke's law Link to comment Share on other sites More sharing options...
PsaltyDS Posted August 5, 2011 Share Posted August 5, 2011 Actually, no. Tested it this way: expandcollapse popup#include <GuiConstantsEx.au3> #include <GuiListView.au3> #include <WindowsConstants.au3> Global $hListView, $iNM_Cnt = 0 GUICreate("ListView Get Item Checked State", 400, 300) $hListView = GUICtrlCreateListView("", 2, 2, 394, 268) _GUICtrlListView_SetExtendedListViewStyle($hListView, BitOR($LVS_EX_FULLROWSELECT, $LVS_EX_CHECKBOXES)) GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY") GUISetState() ; Add columns _GUICtrlListView_AddColumn($hListView, "Column 1", 100) _GUICtrlListView_AddColumn($hListView, "Column 2", 100) _GUICtrlListView_AddColumn($hListView, "Column 3", 100) ; Add items _GUICtrlListView_AddItem($hListView, "Row 1: Col 1", 0) _GUICtrlListView_AddSubItem($hListView, 0, "Row 1: Col 2", 1) _GUICtrlListView_AddSubItem($hListView, 0, "Row 1: Col 3", 2) _GUICtrlListView_AddItem($hListView, "Row 2: Col 1", 1) _GUICtrlListView_AddSubItem($hListView, 1, "Row 2: Col 2", 1) _GUICtrlListView_AddItem($hListView, "Row 3: Col 1", 2) ; Check item 2 _GUICtrlListView_SetItemChecked($hListView, 1) MsgBox(4160, "Information", "Item 2 Checked: " & _GUICtrlListView_GetItemChecked($hListView, 1)) ; Loop until user exits Do Until GUIGetMsg() = $GUI_EVENT_CLOSE GUIDelete() Func WM_NOTIFY($hWnd, $iMsg, $iwParam, $ilParam) #forceref $hWnd, $iMsg, $iwParam Local $hWndFrom, $iIDFrom, $iCode, $tNMHDR, $hWndListView, $tInfo $hWndListView = $hListView If Not IsHWnd($hListView) Then $hWndListView = GUICtrlGetHandle($hListView) $tNMHDR = DllStructCreate($tagNMHDR, $ilParam) $hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom")) $iIDFrom = DllStructGetData($tNMHDR, "IDFrom") $iCode = DllStructGetData($tNMHDR, "Code") Switch $hWndFrom Case $hWndListView Switch $iCode Case $LVN_ITEMCHANGED ; An item has changed $iNM_Cnt += 1 $tInfo = DllStructCreate($tagNMLISTVIEW, $ilParam) ConsoleWrite($iNM_Cnt & ": $LVN_ITEMCHANGED" & @LF & "--> hWndFrom:" & @TAB & $hWndFrom & @LF & _ "-->IDFrom:" & @TAB & $iIDFrom & @LF & _ "-->Code:" & @TAB & $iCode & @LF & _ "-->Item:" & @TAB & DllStructGetData($tInfo, "Item") & @LF & _ "-->SubItem:" & @TAB & DllStructGetData($tInfo, "SubItem") & @LF & _ "-->NewState:" & @TAB & DllStructGetData($tInfo, "NewState") & @LF & _ "-->OldState:" & @TAB & DllStructGetData($tInfo, "OldState") & @LF & _ "-->Changed:" & @TAB & DllStructGetData($tInfo, "Changed") & @LF & _ "-->ActionX:" & @TAB & DllStructGetData($tInfo, "ActionX") & @LF & _ "-->ActionY:" & @TAB & DllStructGetData($tInfo, "ActionY") & @LF & _ "-->Param:" & @TAB & DllStructGetData($tInfo, "Param") & @LF) ; No return value Case $LVN_ITEMCHANGING ; An item is changing $iNM_Cnt += 1 $tInfo = DllStructCreate($tagNMLISTVIEW, $ilParam) ConsoleWrite($iNM_Cnt & ": $LVN_ITEMCHANGING" & @LF & "--> hWndFrom:" & @TAB & $hWndFrom & @LF & _ "-->IDFrom:" & @TAB & $iIDFrom & @LF & _ "-->Code:" & @TAB & $iCode & @LF & _ "-->Item:" & @TAB & DllStructGetData($tInfo, "Item") & @LF & _ "-->SubItem:" & @TAB & DllStructGetData($tInfo, "SubItem") & @LF & _ "-->NewState:" & @TAB & DllStructGetData($tInfo, "NewState") & @LF & _ "-->OldState:" & @TAB & DllStructGetData($tInfo, "OldState") & @LF & _ "-->Changed:" & @TAB & DllStructGetData($tInfo, "Changed") & @LF & _ "-->ActionX:" & @TAB & DllStructGetData($tInfo, "ActionX") & @LF & _ "-->ActionY:" & @TAB & DllStructGetData($tInfo, "ActionY") & @LF & _ "-->Param:" & @TAB & DllStructGetData($tInfo, "Param") & @LF) ; Return True ; prevent the change Return False ; allow the change EndSwitch EndSwitch Return $GUI_RUNDEFMSG EndFunc ;==>WM_NOTIFY If you watch the NewState and OldState fields you see the actual image index changing between 1 (unchecked) and 2 (checked). The bits are shifted up into bits 12-15, so it shows as 4096/8192. So now we know. Valuater's AutoIt 1-2-3, Class... Is now in Session!For those who want somebody to write the script for them: RentACoder"Any technology distinguishable from magic is insufficiently advanced." -- Geek's corollary to Clarke's law Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now