NeoAutoit Posted January 10, 2011 Posted January 10, 2011 Hello all, I am relatively new with Autoit (6 month). Thanks to this forum I have been able to develop scripts with Autoit but today I post a message because I found a problem, but did not find the solution in the forum. I want to display a window with an image inside, and do a kind of image display as the Windows One. I want to display .wmf files. So I am using GDI+ UDF to display them in a window. The problem is the repainting. If the image I load is a jpg, the repainting is working correctly. If the image is a wmf, it happens that, when the window must repaint the image, the wmf image is not completely repainted and areas of the previous foreground is stil visible. What is the problem ? Attach is the test program and an image of the issue. Thanks for your help ! Laurent expandcollapse popupGlobal Const $SP_WS_CAPTION = 0x00C00000 Global Const $SP_WS_POPUP = 0x80000000 Global Const $SP_WS_MINIMIZEBOX = 0x00020000 Global Const $SP_WS_VISIBLE = 0x10000000 Global Const $SP_WS_SYSMENU = 0x00080000 Global Const $SP_DS_SETFOREGROUND = 0x00000200 #include <StaticConstants.au3> #include <GUIConstantsEx.au3> #include <WindowsConstants.au3> #include <GDIPlus.au3> #Include <WinAPI.au3> #include <ButtonConstants.au3> #include <EditConstants.au3> Global $InstallDir = @ScriptDir & "\" ; GDI+ variables Global $SlidesGraphics, $SlideImage ; Main window $SlideWindowID = GUICreate("Background vs GDI+", 800, 660, -1, -1, BitOr($SP_WS_CAPTION, $SP_WS_POPUP, $SP_WS_MINIMIZEBOX, $SP_WS_VISIBLE, $SP_DS_SETFOREGROUND, $SP_WS_SYSMENU) ) ; will create a dialog box that when displayed is centered GUISetBkColor(0x00FF00) GUISetState(@SW_SHOW) _GDIPlus_StartUp() ; Graphics creation $SlidesGraphics = _GDIPlus_GraphicsCreateFromHWND($SlideWindowID) ; Procedure to redraw if necessary GUIRegisterMsg($WM_PAINT, "RepaintSlide") ; Load WMF image $SlideImage = _GDIPlus_ImageLoadFromFile("image.wmf") _GDIPlus_GraphicsDrawImageRect($SlidesGraphics, $SlideImage, 0, 0, 800, 600) ; Loop until user exits Do Until GUIGetMsg() = $GUI_EVENT_CLOSE ; Draw GDI image Func RepaintSlide($hWnd, $Msg, $wParam, $lParam) _WinAPI_RedrawWindow($SlideWindowID, 0, 0, $RDW_UPDATENOW) _GDIPlus_GraphicsDrawImageRect($SlidesGraphics, $SlideImage, 0, 0, 800, 600) _WinAPI_RedrawWindow($SlideWindowID, 0, 0, $RDW_VALIDATE) Return $GUI_RUNDEFMSG EndFunc
NeoAutoit Posted January 11, 2011 Author Posted January 11, 2011 After some investigation, it seems that the native WM_PAINT handler of Autoit is somewhat buggy... See Is anybody knows what is going on ?
NeoAutoit Posted January 15, 2011 Author Posted January 15, 2011 Still no idea ? I have writen a simple example that works with Jpeg images but NOT WMF ? Why ? Is anybody displaying WMF or EMF with Autoit ? If not with GDI+, then how to make a simple wmf viewer with autoit ? expandcollapse popup#include <GuiConstantsEx.au3> #include <GDIPlus.au3> #include <ScreenCapture.au3> #include <WindowsConstants.au3> Global $InstallDir = @ScriptDir & "\" Global $SlideDir = $InstallDir & "Slides\" Global $SlidesGraphics, $SlideImage, $SlideWindowID ; Create main GUI $SlideWindowID = GUICreate("GDI+", 400, 300) GUISetBkColor(0xFF0000,$SlideWindowID) GUISetState(@SW_SHOW,$SlideWindowID) ; Initialize GDI+ library _GDIPlus_Startup () ; Loading ;$SlideImage = _GDIPlus_ImageLoadFromFile($SlideDir & "IMG_000.JPG") $SlideImage = _GDIPlus_ImageLoadFromFile($SlideDir & "Accueil.wmf") ; Graphics from Window $SlidesGraphics = _GDIPlus_GraphicsCreateFromHWND($SlideWindowID) ; Drawing in the graphics _GDIPlus_GraphicsDrawImageRect($SlidesGraphics, $SlideImage, 0, 0, 800, 600) GUIRegisterMsg($WM_PAINT, "RepaintSlide"); Register PAINT-Event 0x000F = $WM_PAINT (WindowsConstants.au3) ; Loop until user exits Do Until GUIGetMsg() = $GUI_EVENT_CLOSE ; Shut down GDI+ library _GDIPlus_ShutDown () Func RepaintSlide($hWnd, $Msg, $wParam, $lParam) _GDIPlus_GraphicsDrawImageRect($SlidesGraphics, $SlideImage, 0, 0, 800, 600) _WinAPI_RedrawWindow($SlideWindowID, "", "", $RDW_VALIDATE) Return $GUI_RUNDEFMSG EndFunc
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