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

[GUI管理] [已解决]列表视图(_GUICtrlListView)可以加入按钮(GUICtrlCreateButton)吗?

  [复制链接]
发表于 2012-8-6 15:30:17 | 显示全部楼层 |阅读模式
本帖最后由 duck904 于 2012-8-8 18:00 编辑

如题:需要做一个列表,在没一行最后放一个按钮[执行]
看了下列表视图,可以有复选框,但是没找到按钮,小白请教。
列表视图中的标题栏上可以加复选框吗?想点下标题栏中的复选框来选中列表中的所有行
发表于 2012-8-7 00:59:11 | 显示全部楼层
什么感觉你说的是ListView呢?
ListView应该是可以加一些其他控件的,但我不会,所以遇到这种列表中添加其他控件的我都用子窗口来做。
再添加一个滚动条,根据行数*行高来计算滚动条滚动范围
 楼主| 发表于 2012-8-7 15:20:48 | 显示全部楼层
打错了,是ListView,谢谢指教
发表于 2012-8-7 17:31:59 | 显示全部楼层
临时写了个,不知道合不合你意
#include <ScrollBarConstants.au3>                ;子窗口滚动条使用
#include <GUIScrollBars.au3>                        ;子窗口滚动条使用
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <Array.au3>


$fGUI = GUICreate("XXXX", 600, 400)
$AllCheckbox = GUICtrlCreateCheckbox("全选", 25, 30, 50, 16)

GUISetState()

Local $cGUI_W = 550, $cGUI_H = 320
$cGUI = GUICreate("", 550, 320, 25, 50, $WS_BORDER+$WS_CHILD, "", $fGUI)

Local $Y = 0, $D = 32                ;Y=每一行的Y坐标,D=行高
Local $ButtonArray[1][3]
For $i = 1 To 15
        $Checkbox = GUICtrlCreateCheckbox("标题" & $i, 10, $Y+10, 100, 16)
        $Button = GUICtrlCreateButton("按钮" & $i, 480, $Y+5, 50, 22)
        GUICtrlCreateLabel("", 0, $Y+$D, $cGUI_W, 1)                        ;分隔线
                GUICtrlSetBkColor(-1, 0xdcdcdc)
                
        ReDim $ButtonArray[UBound($ButtonArray)+1][3]
        $ButtonArray[UBound($ButtonArray)-1][0] = $Button
        $ButtonArray[UBound($ButtonArray)-1][1] = $Checkbox
        
        $Y += $D
Next
$ButtonArray[0][0] = UBound($ButtonArray)-1

If $Y > $cGUI_H Then
        _GUIScrollBars_Init($cGUI)                                                                                                ;初始化滚动条
        _GUIScrollBars_SetScrollRange($cGUI, $SB_VERT, 0, Round($Y*0.061, 0))        ;设备垂直滚动条参数,高度
        _GUIScrollBars_ShowScrollBar($cGUI, $SB_HORZ, False)                                        ;设置水平滚动条隐藏
        GUIRegisterMsg($WM_VSCROLL, "_WM_VSCROLL")
EndIf


GUISetState()

While 1
        $Msg = GUIGetMsg()
        Switch $Msg
        Case -3
                Exit
        Case $ButtonArray[1][0] To $ButtonArray[$ButtonArray[0][0]][0]
                MsgBox(0, "", '你按下了 "' & GUICtrlRead($Msg) & '"')
        Case $AllCheckbox
                If GUICtrlRead($AllCheckbox) = 1 Then
                        $State = $GUI_CHECKED
                Else
                        $State = $GUI_UNCHECKED
                EndIf
                For $x = 1 To $ButtonArray[0][0]
                        GUICtrlSetState($ButtonArray[$x][1], $State)
                Next
        EndSwitch
WEnd


Func _WM_VSCROLL($hWnd, $Msg, $wParam, $lParam)                                ;刷新滚动条
        Local $nScrollCode = BitAND($wParam, 0x0000FFFF)
        Local $index = -1, $yChar, $yPos
        Local $Min, $Max, $Page, $Pos, $TrackPos

        For $x = 0 To UBound($aSB_WindowInfo) - 1
                If $aSB_WindowInfo[$x][0] = $hWnd Then
                        $index = $x
                        $yChar = $aSB_WindowInfo[$index][3]
                        ExitLoop
                EndIf
        Next
        If $index = -1 Then Return 0
 
        Local $tSCROLLINFO = _GUIScrollBars_GetScrollInfoEx($hWnd, $SB_VERT)
        $Min = DllStructGetData($tSCROLLINFO, "nMin")
        $Max = DllStructGetData($tSCROLLINFO, "nMax")
        $Page = DllStructGetData($tSCROLLINFO, "nPage")
        $yPos = DllStructGetData($tSCROLLINFO, "nPos")
        $Pos = $yPos
        $TrackPos = DllStructGetData($tSCROLLINFO, "nTrackPos")
 
        Switch $nScrollCode
                Case $SB_TOP
                        DllStructSetData($tSCROLLINFO, "nPos", $Min)
                Case $SB_BOTTOM
                        DllStructSetData($tSCROLLINFO, "nPos", $Max) 
                Case $SB_LINEUP
                        DllStructSetData($tSCROLLINFO, "nPos", $Pos - 1)
                Case $SB_LINEDOWN
                        DllStructSetData($tSCROLLINFO, "nPos", $Pos + 1)
                Case $SB_PAGEUP
                        DllStructSetData($tSCROLLINFO, "nPos", $Pos - $Page)
                Case $SB_PAGEDOWN
                        DllStructSetData($tSCROLLINFO, "nPos", $Pos + $Page)
                Case $SB_THUMBTRACK
                        DllStructSetData($tSCROLLINFO, "nPos", $TrackPos)
        EndSwitch
 
        DllStructSetData($tSCROLLINFO, "fMask", $SIF_POS)
        _GUIScrollBars_SetScrollInfo($hWnd, $SB_VERT, $tSCROLLINFO)
        _GUIScrollBars_GetScrollInfo($hWnd, $SB_VERT, $tSCROLLINFO)
        $Pos = DllStructGetData($tSCROLLINFO, "nPos")
 
        If ($Pos <> $yPos) Then
                _GUIScrollBars_ScrollWindow($hWnd, 0, $yChar * ($yPos - $Pos))
                $yPos = $Pos
        EndIf
 
        Return $GUI_RUNDEFMSG
EndFunc
 楼主| 发表于 2012-8-7 18:22:30 | 显示全部楼层
谢谢楼上大虾的代码,不过自己写样子太难看了,还是想用ListView
发表于 2013-8-1 07:32:24 | 显示全部楼层
标记一下,以后用得上
发表于 2013-8-9 23:36:50 | 显示全部楼层
回复 6# duck904

同样的问题,我也不知道怎么加上按钮的,楼主,你搞定没,分享下
发表于 2013-8-9 23:37:24 | 显示全部楼层
回复 6# duck904

同样的问题,我也不知道怎么加上按钮的,楼主,你搞定没,分享下
发表于 2013-8-9 23:37:46 | 显示全部楼层
回复 1# duck904

同样的问题,我也不知道怎么加上按钮的,楼主,你搞定没,分享下
发表于 2013-8-28 17:06:50 | 显示全部楼层
同样的问题,我也不知道怎么加上按钮的,楼主,你搞定没,分享下
发表于 2015-7-20 02:21:07 | 显示全部楼层
虽然达不到标题要的效果,但4楼分享的代码还是值得学习的,谢谢!
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-12-23 12:32 , Processed in 0.080889 second(s), 23 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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