3mile 发表于 2010-3-29 20:10:46

[已解决]如何实现在LISTVIEW中CHECKBOXES问题?

本帖最后由 3mile 于 2010-3-30 12:14 编辑

能不能实现如下功能:
LISTVIEW中当单击CHECKBOXES框时不但实现状态改变
而且可以定义一个事件完成某种操作?
多谢P大的消息函数。不过我太菜需要慢慢消化。

afan 发表于 2010-3-29 20:23:39

好像捕获不到点击框的消息...

3mile 发表于 2010-3-29 20:24:55

afan老大都这样说。难道真的没有办法了吗?

afan 发表于 2010-3-29 20:27:50

我算个鸟老大…
等P版来解决吧…

没办法的话就在主循环里读取勾选状态再办事好了

3mile 发表于 2010-3-29 20:31:07

也许现在只能用最笨的办法来试试了。
但这样的办法也只能说是聊胜于无。
期望P大能有解决的办法。#include <GuiListView.au3>
;#include <WindowsConstants.au3>

Global const $nm_dblclk = -3
Global const $nm_click = -2
Global const $wm_Notify = 0x4e
$hGui = GuiCreate('ListView Test', 400, 600)

Local $lvsExStyle = BitOr($lvs_ex_fullrowselect, _
                        $lvs_ex_gridlines, _
                        $lvs_ex_doublebuffer,$lvs_ex_checkboxes)
Local $lvs1 = GuiCtrlCreateListView("List1|View|Test", 5, 5, 390, 260, $lvs_report, $lvsExStyle+0x200)
Local $lvs2 = GuiCtrlCreateListView("List2|View|Test", 5, 270, 390, 260, $lvs_report, $lvsExStyle+0x200)

For $d = 1 to 10
      $var = "lvs item " & $d
      $var &= "|" & $var & " - 1|" & $var & " - 2"
      GuiCtrlCreateListViewItem($var, $lvs1)
Next

For $d = 0 to 2
      _GuiCtrlListView_SetColumnWidth($lvs2, $d, 10)
Next
AdlibRegister("check",20)

GuiSetState()

Do
      $msg = GuiGetMsg()
Until      $msg = -3

Func check()
        For $i=1 To _GUICtrlListView_GetItemCount($lvs1)-1
                $Judge=_GUICtrlListView_GetItemChecked($lvs1,$i)
                If $Judge=True Then _GUICtrlListView_CopyItems($lvs1,$lvs2,True)
        Next
EndFunc

afan 发表于 2010-3-29 20:35:16

总比解决不了要好,这样也不会有错,AdlibRegister 的任务并不繁重

pusofalse 发表于 2010-3-29 20:53:57

本帖最后由 pusofalse 于 2010-3-29 21:19 编辑

ListView 消息扩展UDF - ListViewEditEvent.au3 - http://autoitx.com/forum.php?mod=viewthread&tid=13175#include <ListViewEditEvent.au3>

$hGUI = GUICreate("LVN_ITEMCHECKING", 400, 300)

$iListView = GUICtrlCreateListView("Test", 10, 10, 380, 280, Default, BitOR($LVS_EX_CHECKBOXES, 0x200))
$hListView = GUICtrlGetHandle(-1)

GUICtrlCreateListViewItem("Item 1", $iListView)
GUICtrlCreateListViewItem("Item 2", $iListView)

GUISetState()
_GUICtrlListView_RegisterEditEvent($hListView)

GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY")

While GUIGetMsg() <> -3
WEnd
GUIDelete($hGUI)

Func WM_NOTIFY($hWnd, $iMsg, $iwParam, $ilParam)
        If ($iwParam = $iListView) Then
                Local $tBuffer, $iCode, $iItem, $iState, $sText

                $tBuffer = DllStructCreate($tagLISTVIEW_ITEMCHECKING, $ilParam)
                $iCode = DllStructGetData($tBuffer, "Code")
                If ($iCode = $LVN_ITEMCHECKING) Then
                        $iItem = DllStructGetData($tBuffer, "Item")
                        $iState = DllStructGetData($tBuffer, "CurrentChecked")
                        $iFlags = DllStructGetData($tBuffer, "Flags")

                        $sText &= "Item: " & $iItem & @CRLF
                        $sText &= "Current state: " & $iState & " (0 - unchecked, 1 - checked)" & @CRLF
                        $sText &= "Checking flag: " & $iFlags & @CRLF & @CRLF
                        $sText &= "Are you sure change state of this item?"

                        If Msgbox(52, '', $sText, 0, $hGUI) = 7 Then
                                DllStructSetData($tBuffer, "AllowCheck", 0)
                        EndIf
                EndIf
        EndIf
EndFunc        ;==>WM_NOTIFY

masterpcc 发表于 2010-3-29 21:42:49

谢谢分享!!

menfan1 发表于 2011-7-30 09:37:02

本帖最后由 menfan1 于 2011-7-30 09:45 编辑

ListViewEditEvent.au3好东东,学习一下哈。

xyhqqaa 发表于 2011-8-8 10:33:19

谢谢分享。。留个记号

零度深蓝 发表于 2011-12-22 23:48:21

做个标记,收下

mybkc 发表于 2014-9-4 09:46:31

学习一下!!!
页: [1]
查看完整版本: [已解决]如何实现在LISTVIEW中CHECKBOXES问题?