musicstashall
Знающий
- Сообщения
- 322
- Репутация
- 7
Всем доброго.
Рисую на окне иконку с помощью _GUIImageList_Draw. Иконка меняется, в зависимости от положения окна. Рисунки накладываются друг на друга, хочу, чтобы такого не было. Функция _WinAPI_RedrawWindow($hWnd) очищает окно от предыдущего рисунка, но потом рисунок на окне, после применения этой функции, больше не рисуется. Как поступить?? Важно, чтобы окно перерисовывалось во время перемещения, то есть захваченное мышью. Разкомментируйте функцию _WinAPI_RedrawWindow($hWnd), чтобы увидеть данную проблему.
ПС: переместите окно за границы экрана, чтобы вызвать событие перерисовки (WM_PAINT) — рисунок изменится. Во время перетаскивания окна, цикл While останавливается, поэтому, между попытками отпускайте окно, чтобы переменная $enable переключилась.
Рисую на окне иконку с помощью _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 переключилась.