kk_lee69 发表于 2018-3-24 22:10:17

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

本帖最后由 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

tubaba 发表于 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

kk_lee69 发表于 2018-3-29 22:55:44

回复 2# tubaba

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

感謝幫忙

志艺风云 发表于 2018-3-30 12:44:50

搞不明白_GUICtrlHeader_Create和GUICtrlCreateListView怎么组合使用。

kk_lee69 发表于 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位置啊。

zxxputian2 发表于 2018-6-11 08:35:23

谢谢共享,支持你
页: [1]
查看完整版本: 如何禁止使用者 调整 LISTVIEW的某一列的列宽??[已解决]