Function Reference

_GUICtrlTreeView_CreateDragImage

指定されたアイテムのドラッグ用ビットマップを作成します。

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

 

パラメータ

$hWnd コントロールのハンドル
$hItem アイテムのハンドル

 

返し値

成功: ドラッグ用ビットマップが追加された画像リストのハンドル
失敗: 0

 

注意

コントロールを関連する画像リストなしに作成した場合、この関数を使ってドラッグ操作中に表示される画像を作成することはできません。
従ってドラッグカーソルを作成するための独自の関数を実装する必要があります。
必要なくなった場合、画像リストは破棄する必要があります。

 

関連

 


#AutoIt3Wrapper_au3check_parameters=-d -w 1 -w 2 -w 3 -w 4 -w 5 -w 6
#include <GuiConstantsEx.au3>
#include <GuiTreeView.au3>
#include <GuiImageList.au3>
#include <WinAPI.au3>
#include <WindowsConstants.au3>

Opt('MustDeclareVars', 1)

$Debug_TV = False ; 関数に渡されるClassNameを調べる。動作を確認するにはTrueを設定し、他のコントロールのハンドルを使用

_Main()

Func _Main()

    Local $GUI, $hItemChild, $hImage, $iImage, $hItem, $fDragging = False, $aDrag, $hTreeView
    Local $iStyle = BitOR($TVS_EDITLABELS, $TVS_HASBUTTONS, $TVS_HASLINES, $TVS_LINESATROOT, $TVS_SHOWSELALWAYS, $TVS_CHECKBOXES)
   
    $GUI = GUICreate("TreeView Create Drage Image", 400, 300)
    $hTreeView = GUICtrlGetHandle(GUICtrlCreateTreeView(2, 2, 396, 268, $iStyle, $WS_EX_CLIENTEDGE))
   
    _GUICtrlTreeView_SetUnicodeFormat($hTreeView, False)
    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] New Item", $x), $iImage, $iImage)
        For $y = 1 To Random(2, 10, 1)
            $iImage = Random(0, 8, 1)
            $hItemChild = _GUICtrlTreeView_AddChild($hTreeView, $hItem, StringFormat("[%02d] New Child", $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