找回密码
 加入
搜索
查看: 5935|回复: 7

[AU3基础] 如何修改LISTVIEW 列标题背景颜色及字体颜色

  [复制链接]
发表于 2012-3-5 14:55:13 | 显示全部楼层 |阅读模式
不想使用皮肤,如何修改LISTVIEW 列标题背景颜色及字体颜色
 楼主| 发表于 2012-3-5 14:55:48 | 显示全部楼层
希望不要沉了,顶一下。。
发表于 2012-3-6 00:50:55 | 显示全部楼层
本帖最后由 netegg 于 2012-3-6 08:19 编辑

用guiheader,好像可以直接获取
发表于 2012-3-6 12:04:14 | 显示全部楼层
#include <GuiConstantsEx.au3>
#include <WindowsConstants.au3>
#include <FontConstants.au3>
#include <GuiListView.au3>
#include <Constants.au3>
#include <WinAPIEx.au3>


Global $hGUI, $cListView, $hListView,$hDC,$hFont,$hOldFont
Global $iDllUSER32 = DllOpen("user32.dll")
Global $aCol[3][2] = [[0xFFFF00, 0xFF0000],[0x0, 0x0000FF],[0xFF00FF, 0x00FF00]]

For $i = 0 To UBound($aCol) - 1
        $aCol[$i][0] = _BGR2RGB($aCol[$i][0])
        $aCol[$i][1] = _BGR2RGB($aCol[$i][1])
Next

$hGUI = GUICreate("", 500, 300)
;~ GUISetBkColor(0x0)

$cListView = GUICtrlCreateListView("项目|子项目1|子项目2", 10, 10, 480, 280)
$hListView = GUICtrlGetHandle($cListView)
_GUICtrlListView_SetExtendedListViewStyle($hListView, BitOR($LVS_EX_DOUBLEBUFFER, $LVS_EX_GRIDLINES, $LVS_EX_FULLROWSELECT))

;~ GUICtrlSetFont(-1, 9, 800, 0, "Comic Sans MS", $ANTIALIASED_QUALITY)

Global $hHeader = HWnd(_GUICtrlListView_GetHeader($cListView))
_WinAPI_SetWindowTheme($hHeader, "", "")
Global $wProcNew = DllCallbackRegister("_LVWndProc", "ptr", "hwnd;uint;wparam;lparam")
Global $wProcOld = _WinAPI_SetWindowLong($hListView, $GWL_WNDPROC, DllCallbackGetPtr($wProcNew))

Global $iStyle = _WinAPI_GetWindowLong($hHeader, $GWL_STYLE)
_WinAPI_SetWindowLong($hHeader, $GWL_STYLE, BitOR($iStyle, $HDS_FLAT))

For $i = 1 To 15
        _GUICtrlListView_AddItem($hListView, "Item" & $i)
        _GUICtrlListView_AddSubItem($hListView, $i - 1, "SubItem" & $i, 1)
        _GUICtrlListView_AddSubItem($hListView, $i - 1, "SubItem" & $i, 2)
Next

_GUICtrlListView_SetColumnWidth($hListView, 0, $LVSCW_AUTOSIZE_USEHEADER)
_GUICtrlListView_SetColumnWidth($hListView, 1, $LVSCW_AUTOSIZE_USEHEADER)
_GUICtrlListView_SetColumnWidth($hListView, 2, $LVSCW_AUTOSIZE_USEHEADER)

GUISetState()

Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE

If $wProcOld Then _WinAPI_SetWindowLong($hListView, $GWL_WNDPROC, $wProcOld)
If $wProcNew Then DllCallbackFree($wProcNew)
_WinAPI_SelectObject($hDC, $hOldFont)
_WinAPI_DeleteObject($hFont)
_WinAPI_ReleaseDC(0, $hDC)
GUIDelete()
Exit

Func _LVWndProc($hWnd, $iMsg, $wParam, $lParam)
        #forceref $hWnd, $iMsg, $wParam
        If $iMsg = $WM_NOTIFY Then
                Local $tNMHDR, $hWndFrom, $iCode, $iItem, $hDC
                $tNMHDR = DllStructCreate($tagNMHDR, $lParam)
                $hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom"))
                $iCode = DllStructGetData($tNMHDR, "Code")

                Switch $hWndFrom
                        Case $hHeader
                                Switch $iCode
                                        Case $NM_CUSTOMDRAW
                                                Local $tCustDraw = DllStructCreate($tagNMLVCUSTOMDRAW, $lParam)
                                                Switch DllStructGetData($tCustDraw, "dwDrawStage")
                                                        Case $CDDS_PREPAINT
                                                                Return $CDRF_NOTIFYITEMDRAW
                                                        Case $CDDS_ITEMPREPAINT
                                                                $hDC = DllStructGetData($tCustDraw, "hDC")
                                                                $iItem = DllStructGetData($tCustDraw, "dwItemSpec")
                                                                $hFont = _WinAPI_CreateFont(12, 0, 0, 0, 400, False, False, False, $DEFAULT_CHARSET, $OUT_DEFAULT_PRECIS, $CLIP_DEFAULT_PRECIS, $ANTIALIASED_QUALITY, 0, '黑体')
                                                                $hOldFont = _WinAPI_SelectObject($hDC, $hFont)
                                                                _WinAPI_SetTextColor($hDC, $aCol[$iItem][0])
                                                                _WinAPI_SetBkColor($hDC, $aCol[$iItem][1])
                                                                Return $CDRF_NEWFONT
                                                                Return $CDRF_SKIPDEFAULT
                                                EndSwitch
                                EndSwitch
                EndSwitch
        EndIf
        Return _WinAPI_CallWindowProc($wProcOld, $hWnd, $iMsg, $wParam, $lParam)
EndFunc   ;==>_LVWndProc

Func _BGR2RGB($iColor)
        Return BitOR(BitShift(BitAND($iColor, 0x0000FF), -16), BitAND($iColor, 0x00FF00), BitShift(BitAND($iColor, 0xFF0000), 16))
EndFunc   ;==>_BGR2RGB

评分

参与人数 1金钱 +30 贡献 +2 收起 理由
afan + 30 + 2 ++

查看全部评分

 楼主| 发表于 2012-3-28 15:54:42 | 显示全部楼层
谢谢,哈哈哈三笑
发表于 2012-5-16 05:51:14 | 显示全部楼层
啊,改个颜色也这么复杂啊,学习了!
发表于 2012-6-27 12:32:36 | 显示全部楼层
看来我只有在边上弱弱地不出声了
发表于 2012-9-11 22:32:42 | 显示全部楼层
哇塞 正需要这个呢
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-5-4 09:27 , Processed in 0.078472 second(s), 24 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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