Что нового

При скрытии изображение исчезает

Нубокодер

Новичок
Сообщения
75
Репутация
0
Вывожу изображение вот так:
Код:
#include <GUIConstantsEx.au3>
#include <GDIPlus.au3>
#include <ScreenCapture.au3>

$s_Dir = @ScriptDir & '/'

_Main()

Func _Main()
	Local $hGUI, $hImage, $hGraphic

	$hGUI = GUICreate("Окно теста", 400, 300)
    GUISetState(@SW_SHOW)

    InetGet ( "http://galerey-room.ru/images_thumb/0_65b19_99e27abe_XXXL.png", $s_Dir & "img_girl.png", 17, 0 ) ; читаем рисунок с инета и записываем в файл *.png

	_GDIPlus_Startup () ; старт GDI+
    $hImage = _GDIPlus_ImageLoadFromFile ($s_Dir & "img_girl.png")
	$hGraphic = _GDIPlus_GraphicsCreateFromHWND ($hGUI)
    _GDIPlus_GraphicsDrawImageRectRect ($hGraphic, $hImage, 0, 0, 128, 79, 0, 0, 128, 79) ; выводим изображение

; Освобождаем ресурсы
	_GDIPlus_GraphicsDispose ($hGraphic)
    _GDIPlus_ImageDispose ($hImage)
    _GDIPlus_Shutdown ()

    ; Цикл выполняется, пока окно не будет закрыто
    Do
    Until GUIGetMsg() = $GUI_EVENT_CLOSE

EndFunc   ;==>_Main


Но если свернуть окно и открыть снова, изображение исчезает. Как сделать чтоб оно не пропадало?
 

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
можно сделать иначе
Код:
#include <GUIConstantsEx.au3>
#include <Icons.au3>

$s_Dir = @ScriptDir & '\img_girl.png'

$hGUI = GUICreate("Окно теста", 400, 300)
$Pic = GUICtrlCreatePic('', 0, 0, 128, 79)
GUISetState(@SW_SHOW)

InetGet("http://galerey-room.ru/images_thumb/0_65b19_99e27abe_XXXL.png", $s_Dir, 17, 0)
_SetImage($Pic, $s_Dir)

Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE

библиотека во вложении



Добавлено:
Сообщение автоматически объединено:

если , все-таки, использовать вариант из первого сообщения, то нужно делать прорисовку
собрал на примере из справки. все весьма примерно, но работает

Код:
#include <GDIPlus.au3>
#include <GUIConstantsEx.au3>
#include <WinAPIGdi.au3>
#include <WinAPIShellEx.au3>
#include <WindowsConstants.au3>

Local $s_Dir = @ScriptDir & '\img_girl.png'
Global $g_iCount = 0
Global $hGUI = GUICreate("Окно теста", 400, 300)
GUISetState(@SW_SHOW)
InetGet("http://galerey-room.ru/images_thumb/0_65b19_99e27abe_XXXL.png", $s_Dir, 17, 0)
_SetImage($s_Dir, $hGUI)
Global $g_hDll = DllCallbackRegister('_WinProc', 'ptr', 'hwnd;uint;wparam;lparam')
Local $pDll = DllCallbackGetPtr($g_hDll)
Global $g_hProc = _WinAPI_SetWindowLong($hGUI, $GWL_WNDPROC, $pDll)
While 1
	Switch GUIGetMsg()
		Case $GUI_EVENT_CLOSE
			OnAutoItExit()
			Exit
	EndSwitch
WEnd
Func _SetImage($Image, $hGUI)
	_GDIPlus_Startup() ; старт GDI+
	$hImage = _GDIPlus_ImageLoadFromFile($Image)
	$hGraphic = _GDIPlus_GraphicsCreateFromHWND($hGUI)
	_GDIPlus_GraphicsDrawImageRectRect($hGraphic, $hImage, 0, 0, 128, 79, 0, 0, 128, 79)
	_GDIPlus_GraphicsDispose($hGraphic)
	_GDIPlus_ImageDispose($hImage)
	_GDIPlus_Shutdown()
EndFunc   ;==>_SetImage
Func _WinProc($hWnd, $iMsg, $wParam, $lParam)
	Switch $iMsg
		Case $WM_PAINT
			If $g_iCount = 0 Then
				Local $tPAINTSTRUCT, $hDC
				$g_iCount += 1
				$hDC = _WinAPI_BeginPaint($hWnd, $tPAINTSTRUCT)
				_SetImage($s_Dir, $hGUI)
				_WinAPI_EndPaint($hWnd, $tPAINTSTRUCT)
				$g_iCount -= 1
				Return 0
			EndIf
	EndSwitch
	Return _WinAPI_CallWindowProc($g_hProc, $hWnd, $iMsg, $wParam, $lParam)
EndFunc   ;==>_WinProc

Func OnAutoItExit()
	_WinAPI_SetWindowLong($hGUI, $GWL_WNDPROC, $g_hProc)
	DllCallbackFree($g_hDll)
EndFunc   ;==>OnAutoItExit
 

Вложения

  • Icons.au3
    41.9 КБ · Просмотры: 3
Верх