Цитата FlatX007:
Может я не правильно понял »
|
Неа
Автор же пишет про checkbox в ListView. И в случае с твоим примером не нужен WM_COMMAND, оно проверяется в цикле обычно.
Цитата malev:
Как узнать менялось ли значение checkbox у строки из ListView »
|
Я как то тоже был озадачен этим вопросом, вот пример:
Код:
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <StaticConstants.au3>
#include <GuiListView.au3>
;
$hGUI = GUICreate("ListView Item Сhecked")
$hListView = GUICtrlCreateListView("Column 1|Column 2", 10, 10, 380, 360, -1, $LVS_EX_CHECKBOXES + $WS_EX_DLGMODALFRAME)
_GUICtrlListView_RegisterSortCallBack($hListView)
For $i = 1 To 10
GUICtrlCreateListViewItem("Item " & $i & "|SubItem " & $i, $hListView)
Next
$Status_Label = GUICtrlCreateLabel("", 10, 385, 380, 15, $SS_SUNKEN)
GUISetState()
GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY")
While 1
Switch GUIGetMsg()
Case $GUI_EVENT_CLOSE
Exit
EndSwitch
WEnd
Func ItemChecked_Proc($iItem, $bState, $iID)
GUICtrlSetData($Status_Label, "<" & $iItem & "> is checked = " & $bState & ", CtrlID = " & $iID)
EndFunc
Func WM_NOTIFY($hWnd, $iMsg, $wParam, $lParam)
Local $hWndFrom, $iIDFrom, $iCode, $tNMHDR, $hWndListView
$hWndListView = $hListView
If Not IsHWnd($hListView) Then $hWndListView = GUICtrlGetHandle($hListView)
$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_COLUMNCLICK ; A column was clicked
Local $tInfo = DllStructCreate($tagNMLISTVIEW, $lParam)
; Kick off the sort callback
_GUICtrlListView_SortItems($hWndFrom, DllStructGetData($tInfo, "SubItem"))
Case $NM_CLICK, $NM_DBLCLK, $NM_RCLICK
Local $tInfo = DllStructCreate($tagNMITEMACTIVATE, $lParam)
Local $iIndex = DllStructGetData($tInfo, "Index")
If $iIndex <> -1 Then
Local $iX = DllStructGetData($tInfo, "X")
Local $iPart = 1
If _GUICtrlListView_GetView($hListView) = 1 Then $iPart = 2 ;for large icons view
Local $aIconRect = _GUICtrlListView_GetItemRect($hListView, $iIndex, $iPart)
If $iX < $aIconRect[0] And $iX >= 5 Then
$iOld_Sel_Index = _GUICtrlListView_GetSelectedIndices($hListView)
_GUICtrlListView_SetItemSelected($hListView, $iIndex)
$iID = GUICtrlRead($iIDFrom)
ControlListView($hWnd, "", $iIDFrom, "SelectClear")
If $iOld_Sel_Index <> "" Then _GUICtrlListView_SetItemSelected($hListView, Number($iOld_Sel_Index))
ItemChecked_Proc(_GUICtrlListView_GetItemText($hListView, $iIndex), _
(_GUICtrlListView_GetItemChecked($hListView, $iIndex) = 0), $iID)
Return 0
EndIf
EndIf
EndSwitch
EndSwitch
Return $GUI_RUNDEFMSG
EndFunc