Что нового

[Окна, Диалоги] Как свернуть в трей, чтобы изображение загруженное через GDIPlus не пропадало?

reset86

Чайник
Сообщения
47
Репутация
0
Как свернуть приложение в трей, развернуть и чтобы изображение загруженное через GDIPlus.au3 не пропадало?

Код:
; Это пример кода.

#NoTrayIcon
#include <WindowsConstants.au3>
#include <GUIConstantsEx.au3>
#include <GDIPlus.au3>

$hForm = GUICreate('', 164, 164, -1, -1, $WS_POPUP, BitOR($WS_EX_LAYERED, $WS_EX_TOPMOST, $WS_EX_TOOLWINDOW))
GUICtrlSetState(-1, $GUI_DISABLE)
WinSetTrans($hForm, '', 160)
GUISetBkColor(0x111111)

$Label35 = GUICtrlCreateLabel("__", 134, 94, 15, 15)
GUICtrlSetColor(-1, 0xFFFFFF)
GUICtrlSetCursor (-1, 0)

$Label36 = GUICtrlCreateLabel("X", 134, 137, 15, 15)
GUICtrlSetColor(-1, 0xFFFFFF)
GUICtrlSetCursor (-1, 0)

GUISetState(@SW_SHOW)

_GDIPlus_StartUp()
$hImage   = _GDIPlus_ImageLoadFromFile(@ScriptDir & "\img.png")
$hGraphic = _GDIPlus_GraphicsCreateFromHWND($hForm)
_GDIPlus_GraphicsDrawImage($hGraphic, $hImage, 0, 0)
_GDIPlus_GraphicsDispose($hGraphic)
_GDIPlus_ImageDispose($hImage)
_GDIPlus_ShutDown()

While 1
$nMsg = GUIGetMsg()
Switch $nMsg

Case $Label35

Case $Label36
Exit

EndSwitch
WEnd
 

InnI

AutoIT Гуру
Сообщения
4 214
Репутация
1 115
См. пример в оригинальной справке к версии 3.3.14.+ по функции
Код:
_GDIPlus_BitmapCreateDIBFromBitmap()
 
Автор
reset86

reset86

Чайник
Сообщения
47
Репутация
0
Как, в моем случае мне применить _GDIPlus_BitmapCreateDIBFromBitmap()?
В справке посмотрел пример, он не подходит под данный код, что я привел в примере.
 

InnI

AutoIT Гуру
Сообщения
4 214
Репутация
1 115
reset86
он не подходит под данный код
Да ладно. Чё, совсем не подходит? Прям никак?

А так пробовали?
Код:
; Это пример кода.

#NoTrayIcon
#include <WindowsConstants.au3>
#include <GUIConstantsEx.au3>
#include <GDIPlus.au3>

$hForm = GUICreate('', 164, 164, -1, -1, $WS_POPUP, BitOR($WS_EX_LAYERED, $WS_EX_TOPMOST, $WS_EX_TOOLWINDOW))

_GUICtrlPic_Create(@ScriptDir & "\img.png", 0, 0) ; <========== функция из примера
GUICtrlSetState(-1, $GUI_DISABLE)

WinSetTrans($hForm, '', 160)
GUISetBkColor(0x111111)

$Label35 = GUICtrlCreateLabel("__", 134, 94, 15, 15)
GUICtrlSetColor(-1, 0xFFFFFF)
GUICtrlSetCursor (-1, 0)

$Label36 = GUICtrlCreateLabel("X", 134, 137, 15, 15)
GUICtrlSetColor(-1, 0xFFFFFF)
GUICtrlSetCursor (-1, 0)

GUISetState(@SW_SHOW)

While 1
$nMsg = GUIGetMsg()
Switch $nMsg

Case $Label35

Case $Label36
Exit

EndSwitch
WEnd

Func _GUICtrlPic_Create($sFilename, $iLeft, $iTop, $iWidth = -1, $iHeight = -1, $iStyle = -1, $iExStyle = -1)
    _GDIPlus_Startup()
    Local $idPic = GUICtrlCreatePic("", $iLeft, $iTop, $iWidth, $iHeight, $iStyle, $iExStyle)
    Local $hBitmap = _GDIPlus_BitmapCreateFromFile($sFilename)
    If $iWidth = -1 Then $iWidth = _GDIPlus_ImageGetWidth($hBitmap)
    If $iHeight = -1 Then $iHeight = _GDIPlus_ImageGetHeight($hBitmap)
    Local $hBitmap_Resized = _GDIPlus_BitmapCreateFromScan0($iWidth, $iHeight)
    Local $hBMP_Ctxt = _GDIPlus_ImageGetGraphicsContext($hBitmap_Resized)
    _GDIPlus_GraphicsSetInterpolationMode($hBMP_Ctxt, $GDIP_INTERPOLATIONMODE_HIGHQUALITYBICUBIC)
    _GDIPlus_GraphicsDrawImageRect($hBMP_Ctxt, $hBitmap, 0, 0, $iWidth, $iHeight)
    Local $hHBitmap = _GDIPlus_BitmapCreateDIBFromBitmap($hBitmap_Resized)
    Local $hPrevImage = GUICtrlSendMsg($idPic, 0x0172, 0, $hHBitmap) ; $STM_SETIMAGE = 0x0172
    _WinAPI_DeleteObject($hPrevImage); Delete Prev image if any
    _GDIPlus_BitmapDispose($hBitmap)
    _GDIPlus_BitmapDispose($hBitmap_Resized)
    _GDIPlus_GraphicsDispose($hBMP_Ctxt)
    _WinAPI_DeleteObject($hHBitmap)
    _GDIPlus_Shutdown()
    Return $idPic
EndFunc   ;==>_GUICtrlPic_Create
 
Автор
reset86

reset86

Чайник
Сообщения
47
Репутация
0
Спасибо InnI, за помощь, была проблема с глюками изображения, проблему с глюками решил, вот конечный результат без глюков (может кому пригодится).

Код:
#NoTrayIcon
#include <WindowsConstants.au3>
#include <GUIConstantsEx.au3>
#include <GDIPlus.au3>
#include <StaticConstants.au3>

$hForm = GUICreate('', 164, 164, -1, -1, $WS_POPUP, BitOR($WS_EX_LAYERED, $WS_EX_TOPMOST, $WS_EX_TOOLWINDOW))
_GUICtrlPic_Create("img.png", 0, 0, 164, 164)
GUICtrlSetState(-1, $GUI_DISABLE)
WinSetTrans($hForm, '', 160)
GUISetBkColor(0x111111)

$Label35 = GUICtrlCreateLabel("__", 134, 94, 15, 15, $SS_SIMPLE)
GUICtrlSetColor(-1, 0xFFFFFF)
GUICtrlSetCursor (-1, 0)

$Label36 = GUICtrlCreateLabel("X", 134, 137, 15, 15, $SS_SIMPLE)
GUICtrlSetColor(-1, 0xFFFFFF)
GUICtrlSetCursor (-1, 0)

GUISetState(@SW_SHOW)

While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $Label35
Case $Label36
Exit
EndSwitch
WEnd

Func _GUICtrlPic_Create($sFilename, $iLeft, $iTop, $iWidth = -1, $iHeight = -1, $iStyle = -1, $iExStyle = -1)
_GDIPlus_Startup()
Local $idPic = GUICtrlCreatePic("", $iLeft, $iTop, $iWidth, $iHeight, $iStyle, $iExStyle)
Local $hBitmap = _GDIPlus_BitmapCreateFromFile($sFilename)
If $iWidth = -1 Then $iWidth = _GDIPlus_ImageGetWidth($hBitmap)
If $iHeight = -1 Then $iHeight = _GDIPlus_ImageGetHeight($hBitmap)
Local $hBitmap_Resized = _GDIPlus_BitmapCreateFromScan0($iWidth, $iHeight)
Local $hBMP_Ctxt = _GDIPlus_ImageGetGraphicsContext($hBitmap_Resized)
_GDIPlus_GraphicsSetInterpolationMode($hBMP_Ctxt, $GDIP_INTERPOLATIONMODE_HIGHQUALITYBICUBIC)
_GDIPlus_GraphicsDrawImageRect($hBMP_Ctxt, $hBitmap, 0, 0, $iWidth, $iHeight)
Local $hHBitmap = _GDIPlus_BitmapCreateDIBFromBitmap($hBitmap_Resized)
Local $hPrevImage = GUICtrlSendMsg($idPic, 0x0172, 0, $hHBitmap)
_WinAPI_DeleteObject($hPrevImage)
_GDIPlus_BitmapDispose($hBitmap)
_GDIPlus_BitmapDispose($hBitmap_Resized)
_GDIPlus_GraphicsDispose($hBMP_Ctxt)
_WinAPI_DeleteObject($hHBitmap)
_GDIPlus_Shutdown()
Return $idPic
EndFunc
 
Верх