musicstashall
Знающий
- Сообщения
- 322
- Репутация
- 7
Всем доброго. Имеются следующие функции для рисования иконки при перетаскивании элементов TreeView. Хотел добавить еще одну иконку в лист для рисования ее в запрещенных зонах TreeView.
Добавлять пытаюсь иконку $hMemBmpInvalid. Потом хочу использовать таким образом:
Не рисуется вторая иконка. Помогайте, народ
Код:
Func TreeCreateDragImage($hWnd, $hItem)
;if treeview has imagelist, use image from it
If _GUICtrlTreeView_GetNormalImageList($hWnd) <> 0 Then Return _GUICtrlTreeView_CreateDragImage($hWnd, $hItem)
;if not, create a bitmap of dragitem's text rectangle and put it into imagelist.
Local $aItemRect = _GUICtrlTreeView_DisplayRect($hWnd, $hItem, True)
Local $iImgW = $aItemRect[2]-$aItemRect[0]
Local $iImgH = $aItemRect[3]-$aItemRect[1]
Local $hTreeDC = _WinAPI_GetDC($hWnd)
Local $hMemDC = _WinAPI_CreateCompatibleDC($hTreeDC)
Local $hMemBmp = _WinAPI_CreateCompatibleBitmap($hTreeDC, $iImgW, $iImgH)
Local $hMemBmpInvalid = _WinAPI_Create32BitHBITMAP(_WinAPI_ShellExtractIcon(@SystemDir & '\shell32.dll', 131, $iImgW, $iImgH), 1, 1) ; вторая иконка
Local $hMemBmpOld = _WinAPI_SelectObject($hMemDC, $hMemBmp)
_WinAPI_BitBlt($hMemDC, 0, 0, $iImgW, $iImgH, $hTreeDC, $aItemRect[0], $aItemRect[1], $SRCCOPY)
_WinAPI_SelectObject($hMemDC, $hMemBmpOld)
_WinAPI_ReleaseDC($hWnd, $hTreeDC)
_WinAPI_DeleteDC($hMemDC)
Local $hImgList = _GUIImageList_Create($iImgW, $iImgH, 6)
_GUIImageList_Add($hImgList, $hMemBmp)
_GUIImageList_Add($hImgList, $hMemBmpInvalid)
_WinAPI_DeleteObject($hMemBmp)
_WinAPI_DeleteObject($hMemBmpInvalid)
Return $hImgList
EndFunc
; Draw drag image
; by Gary Frost (gafrost) (?)
Func DrawDragImage(ByRef $hControl, ByRef $aDrag, $Index = 0)
Local $tPoint, $hDC
$hDC = _WinAPI_GetWindowDC($hControl)
$tPoint = _WinAPI_GetMousePos(True, $hControl)
_WinAPI_InvalidateRect($hControl)
_GUIImageList_Draw($aDrag, $Index, $hDC, DllStructGetData($tPoint, "X")-10, DllStructGetData($tPoint, "Y")-8)
_WinAPI_ReleaseDC($hControl, $hDC)
EndFunc ;==>DrawDragImage
Добавлять пытаюсь иконку $hMemBmpInvalid. Потом хочу использовать таким образом:
Код:
$hTreeDragImage = TreeCreateDragImage($hTree, $hDragItem)
If $DragIsList And Not $HoverIsList Then ; условие
DrawDragImage($hTree, $hTreeDragImage, 1) ; рисуется вторая иконка
Else
DrawDragImage($hTree, $hTreeDragImage) ; рисуется первая иконка
EndIf
Не рисуется вторая иконка. Помогайте, народ
