找回密码
 加入
搜索
查看: 8903|回复: 11

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

 火.. [复制链接]
发表于 2010-3-29 20:10:46 | 显示全部楼层 |阅读模式
本帖最后由 3mile 于 2010-3-30 12:14 编辑

能不能实现如下功能:
LISTVIEW中当单击CHECKBOXES框时不但实现状态改变
而且可以定义一个事件完成某种操作?
多谢P大的消息函数。不过我太菜需要慢慢消化。
发表于 2010-3-29 20:23:39 | 显示全部楼层
好像捕获不到点击框的消息...
 楼主| 发表于 2010-3-29 20:24:55 | 显示全部楼层
afan老大都这样说。难道真的没有办法了吗?
发表于 2010-3-29 20:27:50 | 显示全部楼层
我算个鸟老大…
等P版来解决吧…

没办法的话就在主循环里读取勾选状态再办事好了
 楼主| 发表于 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
发表于 2010-3-29 20:35:16 | 显示全部楼层
总比解决不了要好,这样也不会有错,AdlibRegister 的任务并不繁重
发表于 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

评分

参与人数 1金钱 +50 收起 理由
afan + 50 nice

查看全部评分

发表于 2010-3-29 21:42:49 | 显示全部楼层
谢谢分享!!
发表于 2011-7-30 09:37:02 | 显示全部楼层
本帖最后由 menfan1 于 2011-7-30 09:45 编辑

ListViewEditEvent.au3好东东,学习一下哈。
发表于 2011-8-8 10:33:19 | 显示全部楼层
谢谢分享。。留个记号
发表于 2011-12-22 23:48:21 | 显示全部楼层
做个标记,收下
发表于 2014-9-4 09:46:31 | 显示全部楼层
学习一下!!!
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-12-29 09:57 , Processed in 0.205772 second(s), 22 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表