Listview Spalten fixieren - jetzt als Funktion

  • Hi,
    über den Umweg Messageauswertung gibt es ja einen Workaround beim Ändern der Spaltenbreite sofort wieder die Originalbreite zu setzen.


    In der Funktion nutze ich jetzt die ab Vista verfügbare Möglichkeit, ein Flag zum Fixieren der Spaltenbreite zu setzen (oder auch wieder zu löschen).
    Es können wahlweise alle Spalten fixiert werden (Standard) oder einzelne.
    Die Funktion kann mit ID oder Handle des Listview aufgerufen werden.


  • m-obi
    Es gibt auch eine nicht so Anspruchsvolle Lösung.


    1. Du brauchst das Handle des ListviewHeaders
    Global $hHeaderLV = _GUICtrlListView_GetHeader($hListView)


    2. Du mußt WM_NOTIFY registrieren
    GUIRegisterMsg($WM_NOTIFY, "_WM_NOTIFY")


    3.Die WM_NOTIFY Funktion anpassen
    Func _WM_NOTIFY($hWnd, $iMsg, $iwParam, $ilParam)
    #forceref $hWnd, $iMsg, $iwParam
    Local $tNMHDR = DllStructCreate($tagNMHDR, $ilParam)
    Local $hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom"))
    Local $iCode = DllStructGetData($tNMHDR, "Code")
    Switch $hWndFrom
    ;============= Resizen des LV Headers verhindern ==========================
    Case $hHeaderLV
    Switch $iCode
    Case -320, -321 ; -320 = $HDN_ITEMCHANGINGW -321 = $HDN_ITEMCHANGEDW
    Return 1
    EndSwitch
    ;============= /Resizen des LV Headers verhindern ==========================
    .....