Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   AutoIt (http://forum.oszone.net/forumdisplay.php?f=103)
-   -   [решено] GDIPlus - стирание нарисованого на форме при появлении окошек над формой (http://forum.oszone.net/showthread.php?t=147455)

crashtuak 08-08-2009 19:05 1188898

GDIPlus - стирание нарисованого на форме при появлении окошек над формой
 
Вложений: 1
Вот есть код:
Код:

#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 1188928

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

Ой, ашипка :)

crashtuak 08-08-2009 19:54 1188935

Цитата:

Цитата Nik_rus
влаг Always on top »

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

crashtuak 08-08-2009 20:20 1188959

Нашлось решение: http://www.autoitscript.com/forum/in...howtopic=92675. Штука помогает обычным GUICtrlCreatePic создать на форме png рисунок, и никаких заморочок с GDIPlus.

SyDr 08-08-2009 20:23 1188961

Цитата:

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


Время: 21:03.

Время: 21:03.
© OSzone.net 2001-