Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [решено] GDIPlus - стирание нарисованого на форме при появлении окошек над формой

Ответить
Настройки темы
[решено] GDIPlus - стирание нарисованого на форме при появлении окошек над формой

Аватара для crashtuak

Старожил


Сообщения: 467
Благодарности: 25


Конфигурация

Профиль | Отправить PM | Цитировать


Изображения
Тип файла: jpg screen.jpg
(46.0 Kb, 14 просмотров)
Вот есть код:
Код: Выделить весь код
#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 все рисует как надо, но когда над окном появляются какието другие окна или меседж боксы мы получаем то что видим на приатаченом скрине. Как избежать такой гадости?

Отправлено: 19:05, 08-08-2009

 

Аватара для Nik_rus

Пользователь


Сообщения: 92
Благодарности: 8

Профиль | Отправить PM | Цитировать


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

Ой, ашипка

-------
Бу! Мерзкий любитель кенгуру!


Последний раз редактировалось Nik_rus, 08-08-2009 в 20:06.


Отправлено: 19:45, 08-08-2009 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для crashtuak

Старожил


Сообщения: 467
Благодарности: 25

Профиль | Отправить PM | Цитировать


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

-------
Мне надо не так много "Полезных сообщений", чтоб сровнять их количество с моими постами :).


Отправлено: 19:54, 08-08-2009 | #3


Аватара для crashtuak

Старожил


Сообщения: 467
Благодарности: 25

Профиль | Отправить PM | Цитировать


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

-------
Мне надо не так много "Полезных сообщений", чтоб сровнять их количество с моими постами :).


Отправлено: 20:20, 08-08-2009 | #4


Аватара для SyDr

Старожил


Сообщения: 215
Благодарности: 62

Профиль | Отправить PM | Цитировать


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

-------

"Что мы думаем, знаем или во что верим в конце концов не так уж и важно.
Важно лишь то, что мы делаем."
Джон Раскин


Отправлено: 20:23, 08-08-2009 | #5



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [решено] GDIPlus - стирание нарисованого на форме при появлении окошек над формой

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Разное - При появлении трафика тормозит система Windows Vista 64 bezikus Microsoft Windows Vista 2 21-10-2009 21:29
[решено] Как выкл перезагрузку при появлении BSOD Bullet-Avalon Хочу все знать 1 19-05-2009 11:48
Установка - при инсталяции Vista Business зависает при появлении ProgressBar. _ib_ Microsoft Windows Vista 5 18-09-2008 05:17
[решено] как при нажатии кнопки в форме открыть новое окно vagner_HATE Вебмастеру 2 12-10-2007 16:29
[решено] Стирание разделов при установке legioner_rf Автоматическая установка Windows 2000/XP/2003 3 09-08-2007 13:53




 
Переход