Здравствуйте, уважаемые участники форума.
Пишу вам с таким вопросом:
Есть некое layered окно, на нем необходимо нарисовать png изображение. Беда в том, что в GDI я не силен, поэтому прошу помощи у вас :suicide:
обратите внимание на ф-цию _DrawImage что с ней не так? (честно, немного копипастил и что там делается не слишком понимаю :-[).
если можна оставьте к исправленной ф-ции пару комментариев, чтобы я понимал что и как, спасибо.
Пишу вам с таким вопросом:
Есть некое layered окно, на нем необходимо нарисовать png изображение. Беда в том, что в GDI я не силен, поэтому прошу помощи у вас :suicide:
Код:
#NoTrayIcon
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <GDIPlus.au3>
#Include <WinAPIEx.au3>
#Include <Icons.au3>
Global $pName = "", _
$hImage[6][2]
Global $width = 180, $height = 80
$hImage[1][0] = "1.png"
$hImage[2][0] = "2.png"
_GDIPlus_Startup()
$hPng = _GDIPlus_BitmapCreateFromFile(@ScriptDir & "\" & $hImage[1][0])
$hBitmap = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hPng)
_GDIPlus_BitmapDispose($hPng)
$hTrans = GUICreate($pName, 300, 100, -1, -1, $WS_POPUPWINDOW, $WS_EX_LAYERED)
$hForm = GUICreate($pName, $width, $height, -1, -1, $WS_POPUPWINDOW, $WS_EX_LAYERED, $hTrans)
GUISetBkColor(0xFF00DC)
$Pos = WinGetPos($hTrans)
WinMove($hForm, "", $Pos[0]+110, $Pos[1]+10)
_WinAPI_UpdateLayeredWindowEx($hTrans, $hBitmap, 225)
_WinAPI_SetLayeredWindowAttributes($hForm, 0xFF00DC)
GUIRegisterMsg($WM_MOVE, "WM_MOVE")
GUIRegisterMsg($WM_NCHITTEST, "WM_NCHITTEST")
_DrawImage()
GUISetState(@SW_SHOW, $hTrans)
GUISetState(@SW_SHOW, $hForm)
While 1
Switch GUIGetMsg()
Case $GUI_EVENT_CLOSE
_GDIPlus_Shutdown()
Exit
EndSwitch
WEnd
Func _DrawImage()
Local $hGraphic1 = _GDIPlus_GraphicsCreateFromHWND($hForm)
Local $hBitmap = _GDIPlus_BitmapCreateFromGraphics($width, $height, $hGraphic1)
Local $hGraphic2 = _GDIPlus_ImageGetGraphicsContext($hBitmap)
Local $Image = _GDIPlus_BitmapCreateFromFile($hImage[2][0])
Local $w = _GDIPlus_ImageGetWidth($Image)
Local $h = _GDIPlus_ImageGetHeight($Image)
_GDIPlus_GraphicsDrawImageRect($hGraphic2, $Image, 0, 0, $w, $h)
_GDIPlus_GraphicsDispose($hGraphic2)
_GDIPlus_GraphicsDispose($hGraphic1)
EndFunc
Func WM_MOVE($hWnd, $iMsg, $wParam, $lParam)
Switch $hWnd
Case $hTrans
Local $Pos = WinGetPos($hTrans)
If IsArray($Pos) Then
WinMove($hForm, '', $Pos[0]+110, $Pos[1]+10)
EndIf
EndSwitch
Return $GUI_RUNDEFMSG
EndFunc ;==>WM_MOVE
Func WM_NCHITTEST($hWnd, $iMsg, $iwParam, $ilParam)
Switch $hWnd
Case $hTrans
Switch $iMsg
Case $WM_NCHITTEST
Return $HTCAPTION
EndSwitch
EndSwitch
Return $GUI_RUNDEFMSG
EndFunc ;==>WM_NCHITTEST
обратите внимание на ф-цию _DrawImage что с ней не так? (честно, немного копипастил и что там делается не слишком понимаю :-[).
если можна оставьте к исправленной ф-ции пару комментариев, чтобы я понимал что и как, спасибо.