如何禁止使用者 调整 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 回复 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 回复 2# tubaba
懂了~~ 原來還可以這樣處理
感謝幫忙 搞不明白_GUICtrlHeader_Create和GUICtrlCreateListView怎么组合使用。 回复 4# 志艺风云
LISTVIEW應該就是 頭 加 身體
GUICtrlHeader_Create 只是範例 重點在於 WM_NOTIFY 後的處理
簡單的說 上面範例中的 WM_NOTIFY 稍微修改一下 就可以拿去給 LISTVIEW 用 _GUICtrlHeader_Create 好像只能在窗体创建,且没有位置参数,那么它只能在窗口的0,0位置啊。 谢谢共享,支持你
页:
[1]