_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