[已解决]列表视图(_GUICtrlListView)可以加入按钮(GUICtrlCreateButton)吗?
本帖最后由 duck904 于 2012-8-8 18:00 编辑如题:需要做一个列表,在没一行最后放一个按钮[执行]
看了下列表视图,可以有复选框,但是没找到按钮,小白请教。
列表视图中的标题栏上可以加复选框吗?想点下标题栏中的复选框来选中列表中的所有行 什么感觉你说的是ListView呢?
ListView应该是可以加一些其他控件的,但我不会,所以遇到这种列表中添加其他控件的我都用子窗口来做。
再添加一个滚动条,根据行数*行高来计算滚动条滚动范围 打错了,是ListView,谢谢指教 临时写了个,不知道合不合你意#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
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
$ButtonArray = $Button
$ButtonArray = $Checkbox
$Y += $D
Next
$ButtonArray = 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 To $ButtonArray[$ButtonArray]
MsgBox(0, "", '你按下了 "' & GUICtrlRead($Msg) & '"')
Case $AllCheckbox
If GUICtrlRead($AllCheckbox) = 1 Then
$State = $GUI_CHECKED
Else
$State = $GUI_UNCHECKED
EndIf
For $x = 1 To $ButtonArray
GUICtrlSetState($ButtonArray[$x], $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] = $hWnd Then
$index = $x
$yChar = $aSB_WindowInfo[$index]
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 谢谢楼上大虾的代码,不过自己写样子太难看了,还是想用ListView 标记一下,以后用得上 回复 6# duck904
同样的问题,我也不知道怎么加上按钮的,楼主,你搞定没,分享下 回复 6# duck904
同样的问题,我也不知道怎么加上按钮的,楼主,你搞定没,分享下 回复 1# duck904
同样的问题,我也不知道怎么加上按钮的,楼主,你搞定没,分享下 同样的问题,我也不知道怎么加上按钮的,楼主,你搞定没,分享下 虽然达不到标题要的效果,但4楼分享的代码还是值得学习的,谢谢!
页:
[1]