找回密码
 加入
搜索
查看: 1582|回复: 6

[AU3基础] 如何禁止使用者 调整 LISTVIEW的某一列的列宽??[已解决]

  [复制链接]
发表于 2018-3-24 22:10:17 | 显示全部楼层 |阅读模式
本帖最后由 kk_lee69 于 2018-3-29 22:56 编辑

如何禁止使用者 调整 LISTVIEW的某一列的列宽??

从官网找到一个 禁止使用者 调整 LISTVIEW 的列宽范例,无奈本身对于消息不熟,不能改成只禁止某一列的列宽被调整,抛砖引玉,看看有没有高手能够帮忙改一下,我想要限制只禁止某一列的列宽被调整


#include <GUIConstants.au3>
Opt("GUIOnEventMode", 1)

;Global Const $WM_NOTIFY = 0x004E
Global Const $HDN_FIRST = -300
Global Const $HDN_ITEMCHANGINGA = $HDN_FIRST - 0
Global Const $HDN_ITEMCHANGINGW = $HDN_FIRST - 20

$GUI = GUICreate("Static Columns Demo!", 420, 240)
GUISetOnEvent($GUI_EVENT_CLOSE, "Quit")

$ListView = GUICtrlCreateListView("Column1|Column2", 20, 20, 380, 200, $LVS_NOSORTHEADER)
GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY_EVENTS")

GUICtrlCreateListViewItem("Item 1|SubItem 1", $ListView)
GUICtrlCreateListViewItem("Item 2|SubItem 2", $ListView)

GUICtrlSendMsg($ListView, $LVM_SETCOLUMNWIDTH, 0, 80)
GUICtrlSendMsg($ListView, $LVM_SETCOLUMNWIDTH, 1, 80)

GUISetState(@SW_SHOW)

While 1
    Sleep(100)
WEnd

Func Quit()
    Exit
EndFunc

Func WM_NOTIFY_EVENTS($hWndGUI, $MsgID, $wParam, $lParam)
    Local $TagNMHDR = DllStructCreate("int;int;int", $lParam)
    If @error Then Return
    
    Local $iEvent = DllStructGetData($TagNMHDR, 3)
    If $iEvent = $HDN_ITEMCHANGINGA Or $iEvent = $HDN_ITEMCHANGINGW Then Return 1
    
    Return $GUI_RUNDEFMSG
EndFunc
发表于 2018-3-29 22:36:31 | 显示全部楼层
回复 1# kk_lee69

取LV的head头句柄,注册WM_NOTIFY消息,在消息中处理.如果还不明白,查看帮助的_GUICtrlHeader_Create

                Case $hTab1_ListView2_Header
                        Switch $iCode
                                Case $HDN_BEGINTRACK, $HDN_BEGINTRACKW, $HDN_ITEMCHANGING, $HDN_ITEMCHANGINGW
                                        Local $tNMHEADER = DllStructCreate($tagNMHEADER, $ilParam)
                                        Local $Item = DllStructGetData($tNMHEADER, "Item")
                                        If $Item < 3 Then ;在这里控制需要不显示的列
                                                _GUICtrlHeader_SetItemWidth($hTab1_ListView2_Header, $Item, 0)
                                                Return True ;禁止
                                        Else
                                                Return False ;允许
                                        EndIf
                        EndSwitch
 楼主| 发表于 2018-3-29 22:55:44 | 显示全部楼层
回复 2# tubaba

懂了~~ 原來還可以這樣處理

感謝幫忙
发表于 2018-3-30 12:44:50 | 显示全部楼层
搞不明白_GUICtrlHeader_Create和GUICtrlCreateListView怎么组合使用。
 楼主| 发表于 2018-3-30 13:35:53 | 显示全部楼层
回复 4# 志艺风云

LISTVIEW  應該就是 頭 加 身體

GUICtrlHeader_Create 只是範例 重點在於     WM_NOTIFY 後的處理

簡單的說 上面範例中的 WM_NOTIFY 稍微修改一下 就可以拿去給 LISTVIEW 用
发表于 2018-3-30 18:54:41 | 显示全部楼层
_GUICtrlHeader_Create 好像只能在窗体创建,且没有位置参数,那么它只能在窗口的0,0位置啊。
发表于 2018-6-11 08:35:23 | 显示全部楼层
谢谢共享,支持你
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-9-28 05:47 , Processed in 0.075631 second(s), 20 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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