Функция _GUICtrlTreeView_CreateDragImage

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


_GUICtrlTreeView_CreateDragImage

Создает перетаскиваемый bitmap для указанного пункта

#include <GuiTreeView.au3>
_GUICtrlTreeView_CreateDragImage($hWnd, $hItem)

Параметры

$hWnd Дескриптор или идентификатор элемента
$hItem Дескриптор пункта

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

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

Примечания

Если вы создаете TreeView без связанного с ним списка изображений, то вы не можете использовать эту функцию для создания изображения отображаемого при перетаскивании. Вы должны реализовать свой собственный метод создания перетаскиваемого курсора. На вас ложится ответственность за удаление списка изображений, когда он больше не нужен.

Пример

#include <GUIConstantsEx.au3>
#include <GuiTreeView.au3>
#include <GuiImageList.au3>
#include <WinAPI.au3>
#include <WindowsConstants.au3>

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

_Main()

Func _Main()

    Local $GUI, $hImage, $iImage, $hItem, $fDragging = False, $aDrag, $hTreeView
    Local $iStyle = BitOR($TVS_EDITLABELS, $TVS_HASBUTTONS, $TVS_HASLINES, $TVS_LINESATROOT, $TVS_SHOWSELALWAYS, $TVS_CHECKBOXES)

    $GUI = GUICreate("Создаёт перетаскиваемое изображение", 400, 300)
    $hTreeView = GUICtrlGetHandle(GUICtrlCreateTreeView(2, 2, 396, 268, $iStyle, $WS_EX_CLIENTEDGE))

    GUISetState()

    ; Загружает изображения
    $hImage = _GUIImageList_Create(16, 16, 5, 3)
    _GUIImageList_AddIcon($hImage, "shell32.dll", 110)
    _GUIImageList_AddIcon($hImage, "shell32.dll", 131)
    _GUIImageList_AddIcon($hImage, "shell32.dll", 165)
    _GUIImageList_AddIcon($hImage, "shell32.dll", 168)
    _GUIImageList_AddIcon($hImage, "shell32.dll", 137)
    _GUIImageList_AddIcon($hImage, "shell32.dll", 146)
    _GUIImageList_Add($hImage, _GUICtrlTreeView_CreateSolidBitMap($hTreeView, 0xFF0000, 16, 16))
    _GUIImageList_Add($hImage, _GUICtrlTreeView_CreateSolidBitMap($hTreeView, 0x00FF00, 16, 16))
    _GUIImageList_Add($hImage, _GUICtrlTreeView_CreateSolidBitMap($hTreeView, 0x0000FF, 16, 16))
    _GUICtrlTreeView_SetNormalImageList($hTreeView, $hImage)

    _GUICtrlTreeView_BeginUpdate($hTreeView)
    For $x = 1 To Random(2, 10, 1)
        $iImage = Random(0, 8, 1)
        $hItem = _GUICtrlTreeView_Add($hTreeView, 0, StringFormat("[%02d] Новый пункт", $x), $iImage, $iImage)
        For $y = 1 To Random(2, 10, 1)
            $iImage = Random(0, 8, 1)
            _GUICtrlTreeView_AddChild($hTreeView, $hItem, StringFormat("[%02d] Новый дочерний пункт", $y), $iImage, $iImage)
        Next
    Next
    _GUICtrlTreeView_EndUpdate($hTreeView)
    _GUICtrlTreeView_SelectItem($hTreeView, 0)

    ; Цикл выполняется, пока окно не будет закрыто
    While 1
        Switch GUIGetMsg()
            Case $GUI_EVENT_MOUSEMOVE
                If $fDragging Then DrawDragImage($hTreeView, $aDrag)

            Case $GUI_EVENT_PRIMARYDOWN
                Local $hSelected = _GUICtrlTreeView_GetSelection($hTreeView)
                If $hSelected Then
                    $fDragging = True
                    ; Создаёт перетаскиваемое изображение
                    $aDrag = _GUICtrlTreeView_CreateDragImage($hTreeView, $hSelected)
                    DrawDragImage($hTreeView, $aDrag)
                EndIf

            Case $GUI_EVENT_PRIMARYUP
                If $fDragging Then
                    $fDragging = False
                    ; удаляет список изображений
                    _GUIImageList_Destroy($aDrag)
                    _WinAPI_InvalidateRect($hTreeView)
                    _WinAPI_InvalidateRect(HWnd($GUI))
                EndIf
            Case $GUI_EVENT_CLOSE
                ExitLoop
        EndSwitch
    WEnd
    GUIDelete()
EndFunc   ;==>_Main

; Рисует перетаскиваемое изображение
Func DrawDragImage(ByRef $hControl, ByRef $aDrag)
    Local $tPoint, $hDC
    $hDC = _WinAPI_GetWindowDC($hControl)
    $tPoint = _WinAPI_GetMousePos(True, $hControl)
    _WinAPI_InvalidateRect($hControl)
    _GUIImageList_Draw($aDrag, 0, $hDC, DllStructGetData($tPoint, "X"), DllStructGetData($tPoint, "Y"))
    _WinAPI_ReleaseDC($hControl, $hDC)
EndFunc   ;==>DrawDragImage