Что нового

Как перерисовать окно после _GUIImageList_Draw

musicstashall

Знающий
Сообщения
322
Репутация
7
Всем доброго.
Рисую на окне иконку с помощью _GUIImageList_Draw. Иконка меняется, в зависимости от положения окна. Рисунки накладываются друг на друга, хочу, чтобы такого не было. Функция _WinAPI_RedrawWindow($hWnd) очищает окно от предыдущего рисунка, но потом рисунок на окне, после применения этой функции, больше не рисуется. Как поступить?? Важно, чтобы окно перерисовывалось во время перемещения, то есть захваченное мышью. Разкомментируйте функцию _WinAPI_RedrawWindow($hWnd), чтобы увидеть данную проблему.

Код:
#include <GuiImageList.au3>
#Include <WindowsConstants.au3>
#include <Misc.au3>
#include <WinAPIGdi.au3>
Global $Switch = False, $enable = False
$iGui=GUICreate('',128,128,-1,-1,$WS_POPUP, BitOR($WS_EX_TOOLWINDOW, $WS_EX_TOPMOST, $WS_EX_CONTROLPARENT))

$hfImage = _GUIImageList_Create(128, 128, 5, 3)
_GUIImageList_AddIcon($hfImage, "imageres.dll", -22,True)
_GUIImageList_AddIcon($hfImage, "imageres.dll", -1027,True)
GUISetState()

GUIRegisterMsg($WM_PAINT, 'WM_PAINT')
_SetDragIcon($iGui, 0)
While 1
   If _IsPressed('1B') Then Exit
   If Not $enable Then $enable = True
WEnd

Func WM_PAINT()
   If Not $enable Then Return
   IF Not $Switch Then
	  $Switch = True
	  _SetDragIcon($iGui, 1)
   Else
	  $Switch = False
	  _SetDragIcon($iGui, 0)
   EndIf
   $enable = False
EndFunc

Func _SetDragIcon($hWnd, $index)
   ;_WinAPI_RedrawWindow($hWnd)
	Local $hDC = _WinAPI_GetWindowDC($hWnd)
	_GUIImageList_Draw($hfImage, $index, $hDC, 0, 0)
	_WinAPI_ReleaseDC($hWnd, $hDC)
EndFunc


ПС: переместите окно за границы экрана, чтобы вызвать событие перерисовки (WM_PAINT) — рисунок изменится. Во время перетаскивания окна, цикл While останавливается, поэтому, между попытками отпускайте окно, чтобы переменная $enable переключилась.
 
Верх