Что нового

Получить/прочитать название колонки в ListView

DyadyaGenya

Знающий
Сообщения
300
Репутация
10
Доброго времени суток. Не пойму как получить прочитать название колонки/колонок в ListView. Создаю один из самых простых списков:
Код:
#include <GUIConstantsEx.au3>
#include <WinAPI.au3>
#include <Array.au3>
#include <GUIConstants.au3>

#include <GUIConstantsEx.au3>
#include <ListViewConstants.au3>
#include <WindowsConstants.au3>
#include <GuiListView.au3>

Global $NameColumn1 = "Название 1", $NameColumn2 = "Название 2"
$hGui = GUICreate("Окно с чекбоксами", 400, 400) ; Создаёт окно в центре экрана

Global $ListView1 = GUICtrlCreateListView($NameColumn1&"|", 10, 10, 200, 300)
GUICtrlSendMsg(-1, $LVM_SETCOLUMNWIDTH, 0, 178)
_GUICtrlListView_SetExtendedListViewStyle($ListView1, BitOR($LVS_EX_GRIDLINES, $LVS_EX_FULLROWSELECT, $LVS_EX_CHECKBOXES))

GUISetState() ; показывает созданное окно
_AddLVItems()

While 1
    $Msg = GUIGetMsg()

   Switch $Msg
      Case $GUI_EVENT_CLOSE
         ExitLoop
      Case $ListView1
         ConsoleWrite(GUICtrlRead($ListView1) & @CR) ; так читает только пункты
;хотел бы по нажатию на название колонки получить что там написано: Название 1 или Название 2
   EndSwitch
WEnd

Func _AddLVItems()
  Global  $aText = StringSplit(StringStripWS(StringReplace(FileRead(@ScriptDir & '\pochta_t.txt'), @CR, ' '), 4), ' ')

    For $n = 1 To $aText[0]

Global        $chek = _GUICtrlListView_AddItem($ListView1, $aText[$n])

    Next
EndFunc ;==>_AddLVItems
 

Khaibit

Осваивающий
Сообщения
103
Репутация
25
Код:
#include <GUIConstantsEx.au3>
#include <WinAPI.au3>
#include <Array.au3>
#include <GUIConstants.au3>

#include <GUIConstantsEx.au3>
#include <ListViewConstants.au3>
#include <WindowsConstants.au3>
#include <GuiListView.au3>

Global $NameColumn1 = "Название 1", $NameColumn2 = "Название 2"
$hGui = GUICreate("Окно с чекбоксами", 400, 400) ; Создаёт окно в центре экрана

Global $ListView1 = GUICtrlCreateListView($NameColumn1 & "|" & $NameColumn2, 10, 10, 200, 300)
_GUICtrlListView_SetExtendedListViewStyle($ListView1, BitOR($LVS_EX_GRIDLINES, $LVS_EX_FULLROWSELECT, $LVS_EX_CHECKBOXES))

GUISetState() ; показывает созданное окно

GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY")

While 1
    $Msg = GUIGetMsg()
    Switch $Msg
        Case $GUI_EVENT_CLOSE
            ExitLoop
    EndSwitch
WEnd

Func WM_NOTIFY($hWnd, $iMsg, $iwParam, $ilParam)
    Local $hWndFrom, $iIDFrom, $iCode, $tNMHDR, $hWndListView, $tInfo
;~     Local $aSort[_GUICtrlListView_GetColumnCount($ListView1)]
    $hWndListView = GUICtrlGetHandle($ListView1)
    $tNMHDR = DllStructCreate($tagNMHDR, $ilParam)
    $hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom"))
    $iIDFrom = DllStructGetData($tNMHDR, "IDFrom")
    $iCode = DllStructGetData($tNMHDR, "Code")
    Switch $hWndFrom
        Case $hWndListView
            Switch $iCode
                Case $LVN_COLUMNCLICK ; Клик на заголовке колонки
                    $tInfo = DllStructCreate($tagNMLISTVIEW, $ilParam)
                    $aCol = _GUICtrlListView_GetColumn($ListView1, DllStructGetData($tInfo, "SubItem"))
                    ConsoleWrite($aCol[5] & @LF)
;~                     _GUICtrlListView_SimpleSort($hWndListView, $aSort, DllStructGetData($tInfo, "SubItem"))
            EndSwitch
    EndSwitch
EndFunc   ;==>WM_NOTIFY
 
Автор
D

DyadyaGenya

Знающий
Сообщения
300
Репутация
10
Спасибо. Жаль, что нет встроенной функции для ListView. Но работает хорошо.
Сообщение автоматически объединено:

И ещё, пока плохо ориентируюсь, но почему не WM_COMMAND?
 
Последнее редактирование:

Khaibit

Осваивающий
Сообщения
103
Репутация
25
И ещё, пока плохо ориентируюсь, но почему не WM_COMMAND?
Потому что, тут WM_COMMAND не справится, для простой кнопки хватило бы, тут же речь про часть элемента ListView (заголовок колонки);
WM_NOTIFY может нести больше информации (через указатель на структуру).
 
Верх