Функция _GUICtrlHeader_CreateDragImage

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


_GUICtrlHeader_CreateDragImage

Создает полупрозрачную версию изображения пункта для использования его в качестве перетаскиваемого изображения

#include <GuiHeader.au3>
_GUICtrlHeader_CreateDragImage($hWnd, $iIndex)

Параметры

$hWnd Дескриптор элемента
$iIndex Индекс пункта, отсчёт от 0. Изображение, назначенное пункту является основой для прозрачного изображения.

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

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

См. также

_GUICtrlHeader_GetImageList

Пример

#include <GUIConstantsEx.au3>
#include <GuiHeader.au3>
#include <GuiImageList.au3>
#include <WinAPI.au3>

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

Global $iMemo
_Main()

Func _Main()
    Local $hGUI, $hHeader, $hImage, $iMsg, $aSize, $tPos, $tRect, $hDC

    ; Создаёт GUI
    $hGUI = GUICreate(StringTrimRight(@ScriptName, 4), 400, 300)
    $hHeader = _GUICtrlHeader_Create ($hGUI)
    _GUICtrlHeader_SetUnicodeFormat ($hHeader, True)
    $iMemo = GUICtrlCreateEdit("", 2, 32, 396, 266, 0)
    GUISetState()

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

    ; Создаёт перетаскиваемое изображение
    $hImage = _GUICtrlHeader_CreateDragImage ($hHeader, 1)
    $aSize = _GUIImageList_GetIconSize ($hImage)
    $hDC = _WinAPI_GetDC ($hGUI)

    MemoWrite("Дескриптор перетаскиваемого изображения: " & "0x" & Hex($hImage) & @CRLF & _
    "IsPtr  = " & IsPtr($hImage) & @CRLF & _
    "IsHWnd  = " & IsHWnd($hImage))

    ; Показывает перетаскиваемое изображение в позиции курсора пока пользователь не завершит
    Do
        $iMsg = GUIGetMsg()
        If $iMsg = $GUI_EVENT_MOUSEMOVE Then
            If $tPos <> 0 Then
                $tRect = DllStructCreate($tagRECT)
                DllStructSetData($tRect, "Left", DllStructGetData($tPos, "X"))
                DllStructSetData($tRect, "Top", DllStructGetData($tPos, "Y"))
                DllStructSetData($tRect, "Right", DllStructGetData($tPos, "X") + $aSize[0])
                DllStructSetData($tRect, "Bottom", DllStructGetData($tPos, "Y") + $aSize[1])
                _WinAPI_InvalidateRect ($hGUI, $tRect)
            EndIf
            $tRect = _WinAPI_GetClientRect ($hGUI)
            $tPos = _WinAPI_GetMousePos (True, $hGUI)
            If _WinAPI_PtInRect ($tRect, $tPos) Then
                _GUIImageList_Draw ($hImage, 0, $hDC, DllStructGetData($tPos, "X"), DllStructGetData($tPos, "Y"))
            EndIf
        EndIf
    Until $iMsg = $GUI_EVENT_CLOSE
EndFunc   ;==>_Main

; Записывает строку в элемент для заметок
Func MemoWrite($sMessage)
    GUICtrlSetData($iMemo, $sMessage & @CRLF, 1)
EndFunc   ;==>MemoWrite