[已解决]如何实现在LISTVIEW中CHECKBOXES问题?
本帖最后由 3mile 于 2010-3-30 12:14 编辑能不能实现如下功能:
LISTVIEW中当单击CHECKBOXES框时不但实现状态改变
而且可以定义一个事件完成某种操作?
多谢P大的消息函数。不过我太菜需要慢慢消化。 好像捕获不到点击框的消息... afan老大都这样说。难道真的没有办法了吗? 我算个鸟老大…
等P版来解决吧…
没办法的话就在主循环里读取勾选状态再办事好了 也许现在只能用最笨的办法来试试了。
但这样的办法也只能说是聊胜于无。
期望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 总比解决不了要好,这样也不会有错,AdlibRegister 的任务并不繁重 本帖最后由 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 谢谢分享!! 本帖最后由 menfan1 于 2011-7-30 09:45 编辑
ListViewEditEvent.au3好东东,学习一下哈。 谢谢分享。。留个记号 做个标记,收下 学习一下!!!
页:
[1]