Lazegalli Posted August 9, 2012 Share Posted August 9, 2012 (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): expandcollapse popup#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: I'm extremely grateful for any help, because my application should be finished until the end of the week. Edited August 9, 2012 by Lazegalli Link to comment Share on other sites More sharing options...
UEZ Posted August 9, 2012 Share Posted August 9, 2012 (edited) If you don't draw a GDI+ animation I would use a pic control rather than a GDI+ graphic handle. expandcollapse popup#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 August 9, 2012 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!¯\_(ツ)_/¯ ٩(●̮̮̃•̃)۶ ٩(-̮̮̃-̃)۶ૐ Link to comment Share on other sites More sharing options...
Lazegalli Posted August 9, 2012 Author Share Posted August 9, 2012 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. Link to comment Share on other sites More sharing options...
Lazegalli Posted August 10, 2012 Author Share Posted August 10, 2012 It's working perfectly!!! Thanks a lot again Link to comment Share on other sites More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now