Plateforme Level Extreme
Abonnement
Profil corporatif
Produits & Services
Support
Légal
English
What's wrong with this simple GDI+ program?
Message
De
09/07/2004 23:55:50
 
 
À
Tous
Information générale
Forum:
Visual FoxPro
Catégorie:
Fonctions Windows API
Titre:
What's wrong with this simple GDI+ program?
Divers
Thread ID:
00922905
Message ID:
00922905
Vues:
80
Hi,
I have written a simple program to try GDI+ function. It works without error but nothing shown. Any ideas?
PUBLIC loForm, loGraphics, loPen

loGraphics = CREATEOBJECT("gdiplus")
loColor = CREATEOBJECT("Color", 64,128,128,64)
loPen = CREATEOBJECT("Pen", loColor.Color, 4)

loForm = CREATEOBJECT("Form")
loForm.Show()

loGraphics._graphics(loForm.hWnd)

loGraphics.DrawEllipse(loPen.Pen, 1, 1, 50, 50)

DEFINE CLASS Color AS Custom
	color = 0
	
	PROCEDURE INIT
	LPARAMETERS tnAlpha, tnRed, tnGreen, tnBlue
	
		THIS.Color = THIS._color(tnAlpha, tnRed, tnGreen, tnBlue)
		
	PROCEDURE _color
	LPARAMETERS tnAlpha, tnRed, tnGreen, tnBlue
		RETURN BITLSHIFT(RGB(tnRed, tnGreen, tnBlue), 8) + tnAlpha
ENDDEFINE

DEFINE CLASS Pen AS Custom
	pen = 0
	errorcode = 0
	
	PROCEDURE INIT
	LPARAMETERS tnColor, tnWidth
	
		THIS.decl()
		THIS._pen(tnColor, tnWidth)
	ENDPROC
	
	PROCEDURE _pen
	LPARAMETERS tnColor, tnWidth
		LOCAL lnPen
		
		lnPen = 0
		
		THIS.errorcode = GdipCreatePen1(tnColor, tnWidth, 2, @lnPen)

		THIS.pen = lnPen
		
		RETURN (THIS.errorcode = 0)
	ENDPROC
	
	PROCEDURE decl
		DECLARE INTEGER GdipCreatePen1 IN gdiplus ;
			INTEGER color, INTEGER width, INTEGER unit, INTEGER @pen

		DECLARE INTEGER GdipCreatePen2 IN gdiplus ;
			INTEGER brush, INTEGER width, INTEGER unit, INTEGER @pen
ENDDEFINE

DEFINE CLASS gdiplus As Custom 
    hToken=0 
    graphics=0 
    initialized=.F. 
    errorcode=0 

PROCEDURE Init 
    THIS.decl 
    THIS.initialized = THIS.InitGDIplus() 

PROCEDURE Destroy 
    THIS.ReleaseGraphics 
    THIS.ReleaseGDIplus 

PROTECTED FUNCTION InitGDIplus 
    LOCAL hToken, cInput 
    hToken=0 
    cInput = PADR(CHR(1), 16,CHR(0)) 
    TRY 
        THIS.errorcode = GdiplusStartup(@hToken, @cInput, 0) 
    CATCH 
        THIS.errorcode = -1 
    ENDTRY 
    THIS.hToken=hToken 
RETURN (THIS.errorcode=0) 

PROTECTED PROCEDURE ReleaseGDIplus 
    IF THIS.hToken <> 0 
        = GdiplusShutdown(THIS.hToken) 
        THIS.hToken=0 
    ENDIF 

PROCEDURE ReleaseGraphics 
    IF THIS.graphics <> 0 
        = GdipDeleteGraphics(THIS.graphics) 
        THIS.graphics=0 
    ENDIF 

FUNCTION _graphics(p1, p2) 
#DEFINE OBJ_DC 3 
    THIS.ReleaseGraphics 

    LOCAL graphics, nObjType 
    graphics=0 
    nObjType = GetObjectType(m.p1) 

    DO CASE 
    CASE nObjType=0 AND IsWindow(m.p1)<>0 
        THIS.errorcode = GdipCreateFromHWND(m.p1, @graphics) 
    CASE nObjType=OBJ_DC AND PCOUNT()=1 
        THIS.errorcode = GdipCreateFromHDC(m.p1, @graphics) 
    CASE nObjType=OBJ_DC AND PCOUNT()=2 
        THIS.errorcode = GdipCreateFromHDC2(m.p1, m.p2, @graphics) 
    OTHERWISE 
        THIS.errorcode = -1 
        RETURN .F. 
    ENDCASE 

    THIS.graphics = m.graphics 
RETURN (THIS.errorcode=0) 

FUNCTION StringFromGUID(cGUID) 
    LOCAL cBuffer, nBufsize 
    nBufsize=128 
    cBuffer = REPLICATE(CHR(0), nBufsize*2) 
    = StringFromGUID2(cGUID, @cBuffer, nBufsize) 
    cBuffer = SUBSTR(cBuffer, 1, AT(CHR(0)+CHR(0), cBuffer)) 
RETURN STRCONV(cBuffer, 6) 

FUNCTION CLSIDFromString(cStr) 
    LOCAL cBuffer 
    cBuffer=REPLICATE(CHR(0),16) 
    = CLSIDFromString(THIS.ToWideChar(cStr), @cBuffer) 
RETURN m.cBuffer 

FUNCTION ToWideChar(cStr) 
RETURN STRCONV(m.cStr+CHR(0), 5) 

PROTECTED PROCEDURE decl 
    DECLARE INTEGER GdiplusStartup IN gdiplus; 
        INTEGER @token, STRING @input, INTEGER output 

    DECLARE INTEGER StringFromGUID2 IN ole32; 
        STRING rguid, STRING @lpsz, INTEGER cchMax 

    DECLARE INTEGER CLSIDFromString IN ole32; 
        STRING lpsz, STRING @pclsid 

    DECLARE INTEGER StringFromCLSID IN ole32; 
        STRING rclsid, STRING @ppsz 

    DECLARE GdiplusShutdown IN gdiplus INTEGER token 
    DECLARE INTEGER GetObjectType IN gdi32 INTEGER hObject 
    DECLARE INTEGER IsWindow IN user32 INTEGER hwnd 
    DECLARE INTEGER GdipDeleteGraphics IN gdiplus INTEGER graphics 

    DECLARE INTEGER GdipCreateFromHDC IN gdiplus; 
        INTEGER hdc, INTEGER @graphics 

    DECLARE INTEGER GdipCreateFromHWND IN gdiplus; 
        INTEGER hWindow, INTEGER @graphics 

    DECLARE INTEGER GdipCreateFromHDC2 IN gdiplus; 
        INTEGER hdc, INTEGER hDevice, INTEGER @graphics 

	DECLARE INTEGER GdipDrawEllipse IN gdiplus ;
		INTEGER graphics, INTEGER pen, INTEGER x, INTEGER y, ;
		INTEGER width, INTEGER height

PROCEDURE DrawEllipse
LPARAMETERS tnPen, tnX, tnY, tnWidth, tnHeight

	IF THIS.graphics # 0
	      THIS.ErrorCode = GdipDrawEllipse(THIS.Graphics, tnPen, tnX, tnY, tnWidth, tnHeight)
	ENDIF
	
	RETURN (THIS.ErrorCode = 0)
ENDDEFINE 
I am not the most powerful man in this world.
I am not the worst man in this world either.
I just as same as all of you.
I still need to learn from my mistakes...
Suivant
Répondre
Fil
Voir

Click here to load this message in the networking platform