PDA

Показать полную графическую версию : [решено] GDIPlus - стирание нарисованого на форме при появлении окошек над формой


crashtuak
08-08-2009, 19:05
Вот есть код:
#include <GUIConstants.au3>
#include <WindowsConstants.au3>
#include <GDIPlus.au3>
#include <GuiConstantsEx.au3>
#include <ProgressConstants.au3>
#Include <Array.au3>

#Region ### START Koda GUI section ### Form=
Global $hGUI, $hImage, $hGraphic, $hImage1
$hGUI = GUICreate("Form1", @DesktopWidth, @DesktopHeight, 0, 0, $WS_POPUP)
GUISetState()
; Load PNG image
_GDIPlus_StartUp()
$hImage = _GDIPlus_ImageLoadFromFile(@ScriptDir & "\images\item.png")
$hImage1 = _GDIPlus_ImageLoadFromFile(@ScriptDir & "\images\background.bmp")
; Draw PNG image
$hGraphic = _GDIPlus_GraphicsCreateFromHWND($hGUI)
_GDIPlus_GraphicsDrawImageRect($hGraphic, $hImage1, 0, 0, @DesktopWidth, @DesktopHeight )
_GDIPlus_GraphicsDrawImage($hGraphic, $hImage, @DesktopWidth/2-336, @DesktopHeight/2-256)
; Draw PNG complete
$Progress1 = GUICtrlCreateProgress(@DesktopWidth/2-203, @DesktopHeight/2+10, 400, 25)
#EndRegion ### END Koda GUI section ###

#Region ### Do install ###
$sectionnames = IniReadSectionNames ( @ScriptDir & "\config.ini" )
$itemcount = _ArrayMax($sectionnames)
For $i = 1 to $itemcount Step 1
$runpath = @ScriptDir & "\install\" & IniRead ( @ScriptDir & "\config.ini", "Item_" & $i, "install", "default" )
RunWait ($runpath )
GUICtrlSetData ( $Progress1, GUICtrlRead ($Progress1)+ 100/$itemcount)
Next
MsgBox(0,"", "Установка завершена!")
#EndRegion ### End Install ###
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit

EndSwitch
WEnd
GDIPlus все рисует как надо, но когда над окном появляются какието другие окна или меседж боксы мы получаем то что видим на приатаченом скрине. Как избежать такой гадости?

Nik_rus
08-08-2009, 19:45
Сам с таким встречался, и незнаю что делать.
Я поставил все таки вместо PNG jpg/bmp/gif, с ними легче.
А если уж не хочется очень - прорисовывать PNG при WinActive = False или поставить флаг Always on top

Ой, ашипка :)

crashtuak
08-08-2009, 19:54
влаг Always on top »Не знаю как насчет влага, но флаг Always on top мне подойдет :). Но вопрос не снят. Может и найдем управу.

crashtuak
08-08-2009, 20:20
Нашлось решение: http://www.autoitscript.com/forum/index.php?showtopic=92675. Штука помогает обычным GUICtrlCreatePic создать на форме png рисунок, и никаких заморочок с GDIPlus.

SyDr
08-08-2009, 20:23
Существует ещё одна проблема. Дело в том, что, используя GDIPlus, вы рисуете непосредственно в окне формы, поэтому всё нарисованное вами затирается, если над формой перемещается другое окно. Если вы пробовали рисовать на форме при помощи методов Draw, Circle или Box, то наверняка сталкивались с таким эффектом. Другое дело, если изображение выводится в управляющем элементе, например, в ImageBox. Все визуальные управляющие элементы устроены таким образом, что они при необходимости сами себя перерисовывают. При использовании GDIPlus вы должны перехватывать сообщение Windows, посылаемое окну в момент перемещения над ним другого окна, и повторно рисовать всё нарисованное ранее.
http://www.foxclub.ru/vfpbook/gl23/toform.htm




© OSzone.net 2001-2012