Функция _GUICtrlHeader_Create

         Описание функции


_GUICtrlHeader_Create

Создает элемент Header

#include <GuiHeader.au3>
_GUICtrlHeader_Create($hWnd [, $iStyle = 0x00000046])

Параметры

$hWnd Дескриптор родительского окна или окна владельца
$iStyle [необязательный] Стили элемента:
    $HDS_BUTTONS - Каждый пункт в элементе выглядит и ведёт себя как кнопка
    $HDS_DRAGDROP - Позволяет перетаскивать пункты в заголовке, меняя их порядок
    $HDS_FILTERBAR - Включает панель фильтра как часть стандартного заголовка
    $HDS_FLAT - Заголовок имеет плоский вид
    $HDS_FULLDRAG - Элемент отображает содержимое колонки при изменении её ширины
    $HDS_HIDDEN - Скрывает элемент Header
    $HDS_HORZ - Создает элемент Header с горизонтальной ориентацией
    $HDS_HOTTRACK - Активирует горячее отслеживание
    По умолчанию: $HDS_BUTTONS, $HDS_HOTTRACK, $HDS_DRAGDROP
    Принудительно : $WS_CHILD, $WS_VISIBLE

Возвращаемое значение

Успех:Возвращает дескриптор элемента Header
Ошибка:Возвращает 0

См. также

_GUICtrlHeader_Destroy

Пример

#include <GUIConstantsEx.au3>
#include <GuiHeader.au3>
#include <WindowsConstants.au3>

$Debug_HDR = False ; Проверяет ClassName передаваемый в функции. Установите True и используйте дескриптор от другого элемента, чтобы увидеть как это работает

Global $hHeader

_Main()

Func _Main()
    Local $hGUI

    ; Создаёт GUI
    $hGUI = GUICreate(StringTrimRight(@ScriptName, 4), 400, 300)
    $hHeader = _GUICtrlHeader_Create ($hGUI)
    _GUICtrlHeader_SetUnicodeFormat ($hHeader, True)
    GUISetState()

    GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY")

    ; Добавляет колонки
    _GUICtrlHeader_AddItem ($hHeader, "Колонка 1", 100)
    _GUICtrlHeader_AddItem ($hHeader, "Колонка 2", 100)
    _GUICtrlHeader_AddItem ($hHeader, "Колонка 3", 100)
    _GUICtrlHeader_AddItem ($hHeader, "Колонка 4", 100)

    ; Очищает все фильтры
    _GUICtrlHeader_ClearFilterAll ($hHeader)

    ; Цикл выполняется, пока окно не будет закрыто
    Do
    Until GUIGetMsg() = $GUI_EVENT_CLOSE
EndFunc   ;==>_Main

Func WM_NOTIFY($hWnd, $iMsg, $iwParam, $ilParam)
    #forceref $hWnd, $iMsg, $iwParam
    Local $hWndFrom, $iCode ; , $iIDFrom
    Local $tNMHDR, $tNMHEADER, $tNMHDFILTERBTNCLICK, $tNMHDDISPINFO

    $tNMHDR = DllStructCreate($tagNMHDR, $ilParam)
    $hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom"))
    ; $iIDFrom = DllStructGetData($tNMHDR, "IDFrom")
    $iCode = DllStructGetData($tNMHDR, "Code")
    Switch $hWndFrom
        Case $hHeader
            Switch $iCode
                Case $HDN_BEGINDRAG ; Высылается элементом Header, когда началась операция перетаскивания с одним из его пунктов
                    $tNMHEADER = DllStructCreate($tagNMHEADER, $ilParam)
                    _DebugPrint("$HDN_BEGINDRAG" & @LF & "--> hWndFrom:" & @TAB & DllStructGetData($tNMHEADER, "hWndFrom") & @LF & _
                            "-->IDFrom:" & @TAB & DllStructGetData($tNMHEADER, "IDFrom") & @LF & _
                            "-->Code:" & @TAB & DllStructGetData($tNMHEADER, "Code") & @LF & _
                            "-->Item:" & @TAB & DllStructGetData($tNMHEADER, "Item") & @LF & _
                            "-->Button:" & @TAB & DllStructGetData($tNMHEADER, "Button"))
                    Return False ; Разрешает элементу Header автоматически управлять операцией перетаскивания (drag-and-drop)
;~                      Return True  ; Определяет внешнее (ручное) управление операцией перетаскивания (drag-and-drop), разрешая владельцу элемента предоставить пользовательский функционал в рамках операции перетаскивания
                Case $HDN_BEGINTRACK, $HDN_BEGINTRACKW ; Уведомление высылается элементом Header родительскому окну о том, что пользователь начал перетаскивание разделителя между колонками
                    $tNMHEADER = DllStructCreate($tagNMHEADER, $ilParam)
                    _DebugPrint("$HDN_BEGINTRACK" & @LF & "--> hWndFrom:" & @TAB & DllStructGetData($tNMHEADER, "hWndFrom") & @LF & _
                            "-->IDFrom:" & @TAB & DllStructGetData($tNMHEADER, "IDFrom") & @LF & _
                            "-->Code:" & @TAB & DllStructGetData($tNMHEADER, "Code") & @LF & _
                            "-->Item:" & @TAB & DllStructGetData($tNMHEADER, "Item") & @LF & _
                            "-->Button:" & @TAB & DllStructGetData($tNMHEADER, "Button"))
                    Return False ; Разрешает отслеживание разделителя
;~                      Return True  ; Предотвращает отслеживание
                Case $HDN_DIVIDERDBLCLICK, $HDN_DIVIDERDBLCLICKW ; Уведомление высылается элементом Header родительскому окну о том, что пользователь сделал двойной клик в области разделителя между колонками
                    $tNMHEADER = DllStructCreate($tagNMHEADER, $ilParam)
                    _DebugPrint("$HDN_DIVIDERDBLCLICK" & @LF & "--> hWndFrom:" & @TAB & DllStructGetData($tNMHEADER, "hWndFrom") & @LF & _
                            "-->IDFrom:" & @TAB & DllStructGetData($tNMHEADER, "IDFrom") & @LF & _
                            "-->Code:" & @TAB & DllStructGetData($tNMHEADER, "Code") & @LF & _
                            "-->Item:" & @TAB & DllStructGetData($tNMHEADER, "Item") & @LF & _
                            "-->Button:" & @TAB & DllStructGetData($tNMHEADER, "Button"))
                    ; Нет возвращаемых значений
                Case $HDN_ENDDRAG ; Высылается элементом Header, когда закончилась операция перетаскивания одного из его пунктов
                    $tNMHEADER = DllStructCreate($tagNMHEADER, $ilParam)
                    _DebugPrint("$HDN_ENDDRAG" & @LF & "--> hWndFrom:" & @TAB & DllStructGetData($tNMHEADER, "hWndFrom") & @LF & _
                            "-->IDFrom:" & @TAB & DllStructGetData($tNMHEADER, "IDFrom") & @LF & _
                            "-->Code:" & @TAB & DllStructGetData($tNMHEADER, "Code") & @LF & _
                            "-->Item:" & @TAB & DllStructGetData($tNMHEADER, "Item") & @LF & _
                            "-->Button:" & @TAB & DllStructGetData($tNMHEADER, "Button"))
                    Return False ; Разрешает элементу автоматически помещать и изменять порядок пунктов
;~                      Return True  ; Предотвращает тому, чтобы поместить пункт
                Case $HDN_ENDTRACK, $HDN_ENDTRACKW ; Уведомление высылается элементом Header родительскому окну о том, что пользователь закончил перетаскивание разделителя между колонками
                    $tNMHEADER = DllStructCreate($tagNMHEADER, $ilParam)
                    _DebugPrint("$HDN_ENDTRACK" & @LF & "--> hWndFrom:" & @TAB & DllStructGetData($tNMHEADER, "hWndFrom") & @LF & _
                            "-->IDFrom:" & @TAB & DllStructGetData($tNMHEADER, "IDFrom") & @LF & _
                            "-->Code:" & @TAB & DllStructGetData($tNMHEADER, "Code") & @LF & _
                            "-->Item:" & @TAB & DllStructGetData($tNMHEADER, "Item") & @LF & _
                            "-->Button:" & @TAB & DllStructGetData($tNMHEADER, "Button"))
                    ; Нет возвращаемых значений
                Case $HDN_FILTERBTNCLICK ; Уведомление высылается элементом Header родительскому окну при нажатии кнопки фильтра или в ответ на сообщение $HDM_SETITEM
                    $tNMHDFILTERBTNCLICK = DllStructCreate($tagNMHDFILTERBTNCLICK, $ilParam)
                    _DebugPrint("$HDN_FILTERBTNCLICK" & @LF & "--> hWndFrom:" & @TAB & DllStructGetData($tNMHDFILTERBTNCLICK, "hWndFrom") & @LF & _
                            "-->IDFrom:" & @TAB & DllStructGetData($tNMHDFILTERBTNCLICK, "IDFrom") & @LF & _
                            "-->Code:" & @TAB & DllStructGetData($tNMHDFILTERBTNCLICK, "Code") & @LF & _
                            "-->Item:" & @TAB & DllStructGetData($tNMHDFILTERBTNCLICK, "Item") & @LF & _
                            "-->Left:" & @TAB & DllStructGetData($tNMHDFILTERBTNCLICK, "Left") & @LF & _
                            "-->Top:" & @TAB & DllStructGetData($tNMHDFILTERBTNCLICK, "Top") & @LF & _
                            "-->Right:" & @TAB & DllStructGetData($tNMHDFILTERBTNCLICK, "Right") & @LF & _
                            "-->Bottom:" & @TAB & DllStructGetData($tNMHDFILTERBTNCLICK, "Bottom"))
;~                      Return True  ; Уведомление $HDN_FILTERCHANGE будет высылаться элементом Header родительскому окну
                    ; Это уведомление дает родительскому окну возможность синхронизировать свои элементы пользовательского интерфейса
                    Return False ; Если вы не хотите высылать уведомление
                Case $HDN_FILTERCHANGE ; Уведомление высылается элементом Header родительскому окну о том, что атрибуты фильтра изменяются или редактируются
                    $tNMHEADER = DllStructCreate($tagNMHEADER, $ilParam)
                    _DebugPrint("$HDN_FILTERCHANGE" & @LF & "--> hWndFrom:" & @TAB & DllStructGetData($tNMHEADER, "hWndFrom") & @LF & _
                            "-->IDFrom:" & @TAB & DllStructGetData($tNMHEADER, "IDFrom") & @LF & _
                            "-->Code:" & @TAB & DllStructGetData($tNMHEADER, "Code") & @LF & _
                            "-->Item:" & @TAB & DllStructGetData($tNMHEADER, "Item") & @LF & _
                            "-->Button:" & @TAB & DllStructGetData($tNMHEADER, "Button"))
                    ; Нет возвращаемых значений
                Case $HDN_GETDISPINFO, $HDN_GETDISPINFOW ; Высылается владельцу элемента Header, когда элемент нуждается в информации о callback header item
                    $tNMHDDISPINFO = DllStructCreate($tagNMHDDISPINFO, $ilParam)
                    _DebugPrint("$HDN_GETDISPINFO" & @LF & "--> hWndFrom:" & @TAB & DllStructGetData($tNMHDDISPINFO, "hWndFrom") & @LF & _
                            "-->IDFrom:" & @TAB & DllStructGetData($tNMHDDISPINFO, "IDFrom") & @LF & _
                            "-->Code:" & @TAB & DllStructGetData($tNMHDDISPINFO, "Code") & @LF & _
                            "-->Item:" & @TAB & DllStructGetData($tNMHDDISPINFO, "Item"))
;~                      Return LRESULT
                Case $HDN_ITEMCHANGED, $HDN_ITEMCHANGEDW ; Уведомление высылается элементом Header родительскому окну о том, что атрибуты пункта Header изменились
                    $tNMHEADER = DllStructCreate($tagNMHEADER, $ilParam)
                    _DebugPrint("$HDN_ITEMCHANGED" & @LF & "--> hWndFrom:" & @TAB & DllStructGetData($tNMHEADER, "hWndFrom") & @LF & _
                            "-->IDFrom:" & @TAB & DllStructGetData($tNMHEADER, "IDFrom") & @LF & _
                            "-->Code:" & @TAB & DllStructGetData($tNMHEADER, "Code") & @LF & _
                            "-->Item:" & @TAB & DllStructGetData($tNMHEADER, "Item") & @LF & _
                            "-->Button:" & @TAB & DllStructGetData($tNMHEADER, "Button"))
                    ; Нет возвращаемых значений
                Case $HDN_ITEMCHANGING, $HDN_ITEMCHANGINGW ; Уведомление высылается элементом Header родительскому окну о том, что атрибуты пункта Header собираются измениться
                    $tNMHEADER = DllStructCreate($tagNMHEADER, $ilParam)
                    _DebugPrint("$HDN_ITEMCHANGING" & @LF & "--> hWndFrom:" & @TAB & DllStructGetData($tNMHEADER, "hWndFrom") & @LF & _
                            "-->IDFrom:" & @TAB & DllStructGetData($tNMHEADER, "IDFrom") & @LF & _
                            "-->Code:" & @TAB & DllStructGetData($tNMHEADER, "Code") & @LF & _
                            "-->Item:" & @TAB & DllStructGetData($tNMHEADER, "Item") & @LF & _
                            "-->Button:" & @TAB & DllStructGetData($tNMHEADER, "Button"))
                    Return False ; Разрешает изменения
;~                      Return True  ; Предотвращает изменения
                Case $HDN_ITEMCLICK, $HDN_ITEMCLICKW ; Уведомление высылается элементом Header родительскому окну о том, что пользователь кликнул пункт
                    $tNMHEADER = DllStructCreate($tagNMHEADER, $ilParam)
                    _DebugPrint("$HDN_ITEMCLICK" & @LF & "--> hWndFrom:" & @TAB & DllStructGetData($tNMHEADER, "hWndFrom") & @LF & _
                            "-->IDFrom:" & @TAB & DllStructGetData($tNMHEADER, "IDFrom") & @LF & _
                            "-->Code:" & @TAB & DllStructGetData($tNMHEADER, "Code") & @LF & _
                            "-->Item:" & @TAB & DllStructGetData($tNMHEADER, "Item") & @LF & _
                            "-->Button:" & @TAB & DllStructGetData($tNMHEADER, "Button"))
                    ; Нет возвращаемых значений
                Case $HDN_ITEMDBLCLICK, $HDN_ITEMDBLCLICKW ; Уведомление высылается элементом Header родительскому окну о том, что пользователь сделал двойной клик на пункте
                    $tNMHEADER = DllStructCreate($tagNMHEADER, $ilParam)
                    _DebugPrint("$HDN_ITEMDBLCLICK" & @LF & "--> hWndFrom:" & @TAB & DllStructGetData($tNMHEADER, "hWndFrom") & @LF & _
                            "-->IDFrom:" & @TAB & DllStructGetData($tNMHEADER, "IDFrom") & @LF & _
                            "-->Code:" & @TAB & DllStructGetData($tNMHEADER, "Code") & @LF & _
                            "-->Item:" & @TAB & DllStructGetData($tNMHEADER, "Item") & @LF & _
                            "-->Button:" & @TAB & DllStructGetData($tNMHEADER, "Button"))
                    ; Нет возвращаемых значений
                Case $HDN_TRACK, $HDN_TRACKW ; Уведомление высылается элементом Header родительскому окну о том, что пользователь перетаскивает разделитель между колонками
                    $tNMHEADER = DllStructCreate($tagNMHEADER, $ilParam)
                    _DebugPrint("$HDN_TRACK" & @LF & "--> hWndFrom:" & @TAB & DllStructGetData($tNMHEADER, "hWndFrom") & @LF & _
                            "-->IDFrom:" & @TAB & DllStructGetData($tNMHEADER, "IDFrom") & @LF & _
                            "-->Code:" & @TAB & DllStructGetData($tNMHEADER, "Code") & @LF & _
                            "-->Item:" & @TAB & DllStructGetData($tNMHEADER, "Item") & @LF & _
                            "-->Button:" & @TAB & DllStructGetData($tNMHEADER, "Button"))
                    Return False ; Продолжать отслеживание разделителя
;~                      Return True  ; Прекратить отслеживание
            EndSwitch
    EndSwitch
    Return $GUI_RUNDEFMSG
EndFunc   ;==>WM_NOTIFY

Func _DebugPrint($s_text, $line = @ScriptLineNumber)
    ConsoleWrite( _
            "!===========================================================" & @LF & _
            "+======================================================" & @LF & _
            "-->Строка(" & StringFormat("%04d", $line) & "):" & @TAB & $s_text & @LF & _
            "+======================================================" & @LF)
EndFunc   ;==>_DebugPrint