Sign in to follow this  
Followers 0
Lazegalli

Problem with PNG Redraw

4 posts in this topic

#1 ·  Posted (edited)

Hello Guys,

I hope you can help me, because I'm getting crazy meanwhile!

I have a GUI with a PNG image as logo and a tab control. To redraw the PNG, I use a function which reacts to the Windows Message ID WM_PAINT...so far so good, works as expected but...if I switch now between the tabs, the redraw function will be executed again and again. The result is, that my logo get's darker and darker, because it's been redrawn all the time.

How can I prevent this?

Here a short example (switch the tabs and you see that the logo get's darker):

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

Global $hGUI, $hImage, $hGraphic, $hImage1

; Create GUI
$hGUI = GUICreate("Show PNG", 250, 250)
GUISetBkColor(0x00E0FFFF)

; Load PNG image
_GDIPlus_StartUp()
$hImage = _GDIPlus_ImageLoadFromFile(".\example.png")
$hGraphic = _GDIPlus_GraphicsCreateFromHWND($hGUI)

; Create GUI
$tab = GUICtrlCreateTab(10, 10, 200, 100)

$tab0 = GUICtrlCreateTabItem("tab0")
GUICtrlCreateLabel("label0", 30, 80, 50, 20)
$tab0OK = GUICtrlCreateButton("OK0", 20, 50, 50, 20)
$tab0input = GUICtrlCreateInput("default", 80, 50, 70, 20)

$tab1 = GUICtrlCreateTabItem("tab----1")
GUICtrlCreateLabel("label1", 30, 80, 50, 20)
$tab1combo = GUICtrlCreateCombo("", 20, 50, 60, 120)
GUICtrlSetData(-1, "Trids|CyberSlug|Larry|Jon|Tylo", "Jon")
$tab1OK = GUICtrlCreateButton("OK1", 80, 50, 50, 20)

$tab2 = GUICtrlCreateTabItem("tab2")
GUICtrlCreateLabel("label2", 30, 80, 50, 20)
$tab2OK = GUICtrlCreateButton("OK2", 140, 50, 50)

GUICtrlCreateTabItem("")

GUIRegisterMsg($WM_PAINT, "MY_WM_PAINT")

GUISetState()

; Loop until user exits
do
until GUIGetMsg() = $GUI_EVENT_CLOSE

; Clean up resources
_GDIPlus_GraphicsDispose($hGraphic)
_GDIPlus_ImageDispose($hImage)
_GDIPlus_ShutDown()

; Draw PNG image
Func MY_WM_PAINT($hWnd, $Msg, $wParam, $lParam)
_WinAPI_RedrawWindow($hGUI, 0, 0, $RDW_UPDATENOW)
_GDIPlus_GraphicsDrawImage($hGraphic, $hImage, 10, 150)
_WinAPI_RedrawWindow($hGUI, 0, 0, $RDW_VALIDATE)
Return $GUI_RUNDEFMSG
EndFunc

And here the PNG image used in the example:

post-59080-0-36200500-1344513691_thumb.p

I'm extremely grateful for any help, because my application should be finished until the end of the week.

Edited by Lazegalli

Share this post


Link to post
Share on other sites



#2 ·  Posted (edited)

If you don't draw a GDI+ animation I would use a pic control rather than a GDI+ graphic handle.

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

Global $hGUI, $hImage, $hGraphic, $hImage1
Global Const $IMAGE_BITMAP = 0
Global Const $STM_SETIMAGE = 0x0172

; Load PNG image
_GDIPlus_StartUp()
$hImage = _GDIPlus_ImageLoadFromFile(".example.png")

; Create GUI
$hGUI = GUICreate("Show PNG", 250, 250)
GUISetBkColor(0x00E0FFFF)
$idPic = GUICtrlCreatePic("", 10, 150, _GDIPlus_ImageGetWidth($hImage), _GDIPlus_ImageGetHeight($hImage))
$hHBitmap = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hImage)
_GDIPlus_ImageDispose($hImage)
_WinAPI_DeleteObject(GUICtrlSendMsg($idPic, $STM_SETIMAGE, $IMAGE_BITMAP, $hHBitmap))

; Create GUI
$tab = GUICtrlCreateTab(10, 10, 200, 100)

$tab0 = GUICtrlCreateTabItem("tab0")
GUICtrlCreateLabel("label0", 30, 80, 50, 20)
$tab0OK = GUICtrlCreateButton("OK0", 20, 50, 50, 20)
$tab0input = GUICtrlCreateInput("default", 80, 50, 70, 20)

$tab1 = GUICtrlCreateTabItem("tab----1")
GUICtrlCreateLabel("label1", 30, 80, 50, 20)
$tab1combo = GUICtrlCreateCombo("", 20, 50, 60, 120)
GUICtrlSetData(-1, "Trids|CyberSlug|Larry|Jon|Tylo", "Jon")
$tab1OK = GUICtrlCreateButton("OK1", 80, 50, 50, 20)

$tab2 = GUICtrlCreateTabItem("tab2")
GUICtrlCreateLabel("label2", 30, 80, 50, 20)
$tab2OK = GUICtrlCreateButton("OK2", 140, 50, 50)

GUICtrlCreateTabItem("")

GUISetState()

; Loop until user exits
do
until GUIGetMsg() = $GUI_EVENT_CLOSE

; Clean up resources
_WinAPI_DeleteObject($hHBitmap)
_GDIPlus_ShutDown()
GUIDelete()
Exit

Try this.

Br,

UEZ

Edited by UEZ

Please don't send me any personal message and ask for support! I will not reply!

Selection of finest graphical examples at Codepen.io

The own fart smells best!
Her 'sikim hıyar' diyene bir avuç tuz alıp koşma!
¯\_(ツ)_/¯  ٩(●̮̮̃•̃)۶ ٩(-̮̮̃-̃)۶ૐ

Share this post


Link to post
Share on other sites

Many thanks, it seems to work...at least in your example. I'll check it out in my real code and give you a feedback this evening.

Share this post


Link to post
Share on other sites

It's working perfectly!!!

Thanks a lot again

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!


Register a new account

Sign in

Already have an account? Sign in here.


Sign In Now
Sign in to follow this  
Followers 0