#include "hbclass.ch"
#include "GdiPlus.ch"
#define VK_CONTROL 17
#define VK_SHIFT 聽 16
#define VK_TAB 聽 聽 聽9
#define CRLF 聽 聽 聽 Chr( 9 ) + Chr( 13 )
#xcommand DEFAULT <uVar> := <uVal> => IF <uVar> == NIL; <uVar> := <uVal>; ENDIF
//-----------------------------------------------------------------------------------------------//
INIT PROC C5ImageGdiPlus
聽 聽RegisterClass()
聽 聽RETURN
//-----------------------------------------------------------------------------------------------//
CLASS TImageGdiPlus From TControl
聽 聽DATA oImage
聽 聽DATA nLeft 聽 聽 聽 聽 聽 聽 聽 INIT 010
聽 聽DATA nTop 聽 聽 聽 聽 聽 聽 聽 聽INIT 010
聽 聽DATA nWidth 聽 聽 聽 聽 聽 聽 聽INIT 200
聽 聽DATA nHeight 聽 聽 聽 聽 聽 聽 INIT 200
聽 聽DATA nX 聽 聽 聽 聽 聽 聽 聽 聽 聽INIT 000
聽 聽DATA nY 聽 聽 聽 聽 聽 聽 聽 聽 聽INIT 000
聽 聽DATA nZoom 聽 聽 聽 聽 聽 聽 聽 INIT 001
聽 聽DATA nStep 聽 聽 聽 聽 聽 聽 聽 INIT 010 聽 聽 // pixeles que se va a mover cada que presionas una tecla de movimiento
聽 聽DATA nFactSpeed 聽 聽 聽 聽 聽INIT 003 聽 聽 // Factor por el que se va a multiplicar cuando hagas GoXXXX( .T. )
聽 聽DATA nFactZoom 聽 聽 聽 聽 聽 INIT 0.005
聽 聽DATA nMaxZoom 聽 聽 聽 聽 聽 聽INIT 002
聽 聽DATA nMinZoom 聽 聽 聽 聽 聽 聽INIT 0.500
聽 聽DATA nColorRect 聽 聽 聽 聽 聽INIT 0x10FF0000
聽 聽DATA aColorRect 聽 聽 聽 聽 聽INIT { 0, 0, 0, 0 }
聽 聽DATA nAjusteX 聽 聽 聽 聽 聽 聽INIT 0
聽 聽DATA nAjusteY 聽 聽 聽 聽 聽 聽INIT 0
聽 聽DATA nAngle 聽 聽 聽 聽 聽 聽 聽INIT 0
聽 聽DATA nFactAngle 聽 聽 聽 聽 聽INIT 0.10
聽 聽METHOD New()
聽 聽METHOD SetImage( oImage, lEnd )
聽 聽Method SetImage2( cImage )
聽 聽METHOD OnPaint()
聽 聽METHOD GoLeft()
聽 聽METHOD GoRight()
聽 聽METHOD GoUp()
聽 聽METHOD GoDown()
聽 聽METHOD ZoomPlus() 聽 聽 聽 聽INLINE ::nZoom += Min( ::nFactZoom, ::nMaxZoom - ::nZoom )
聽 聽METHOD ZoomMinus() 聽 聽 聽 INLINE ::nZoom -= Min( ::nFactZoom, ::nZoom - ::nMinZoom )
聽 聽METHOD SetPos( nX, nY ) 聽INLINE ::nX := nX, ::nY := nY, ::Refresh()
聽 聽DATA bKeyDown
聽 聽METHOD OnKeyDown()
聽 聽METHOD Redefine()
聽 聽METHOD Initiate()
聽 聽METHOD Link()
聽 聽DATA lMouseMark 聽 聽 聽 聽 聽INIT .F.
聽 聽DATA aMouseMark 聽 聽 聽 聽 聽INIT { 0, 0, 0, 0 }
聽 聽DATA nMouseMark 聽 聽 聽 聽 聽INIT 0x40FF0000
聽 聽DATA lButtonDown 聽 聽 聽 聽 INIT .F.
聽 聽DATA nMouseX 聽 聽 聽 聽 聽 聽 INIT 0
聽 聽DATA nMouseY 聽 聽 聽 聽 聽 聽 INIT 0
聽 聽DATA lDestroy 聽 聽 聽 聽 聽 聽INIT .T.
聽 聽METHOD OnMouseMove()
聽 聽METHOD OnLButtonDown()
聽 聽METHOD OnLButtonUp()
聽 聽METHOD OnRButtonUp()
聽 聽METHOD AllPage()
聽 聽Method OnNCDestroy()
聽 聽Method SetImage()
ENDCLASS
//-----------------------------------------------------------------------------------------------//
Method OnNCDestroy()
聽 聽if ::oImage != NIL .AND. ::lDestroy
聽 聽 聽 ::oImage:End()
聽 聽Endif
聽 聽RETURN NIL
//-----------------------------------------------------------------------------------------------//
METHOD OnLButtonUp()
聽 聽IF ::lMouseMark
聽 聽 聽 ::lButtonDown := .F.
聽 聽ENDIF
聽 聽IF GetKeyState( VK_CONTROL )
聽 聽 聽 ::nX 聽 聽:= ::aMouseMark[01] * -1
聽 聽 聽 ::nY 聽 聽:= ::aMouseMark[02] * -1
聽 聽 聽 ::nZoom := 1
聽 聽 聽 ::Refresh()
聽 聽ENDIF
聽 聽RETURN NIL
//-----------------------------------------------------------------------------------------------//
METHOD OnRButtonUp()
聽 聽IF ::lMouseMark
聽 聽 聽 IF ::aMouseMark[03] != 0
聽 聽 聽 聽 聽::nX := ::aMouseMark[01] * -1
聽 聽 聽 聽 聽::nY := ::aMouseMark[02] * -1
聽 聽 聽 聽 聽::nZoom := 1
聽 聽 聽 聽 聽::nZoom := Min( ::GetCliRect:nWidth() / ::aMouseMark[03],;
聽 聽 聽 聽 聽 聽 ::GetCliRect():nHeight() / ::aMouseMark[04] )
聽 聽 聽 聽 聽::aMouseMark := { 0, 0, 0, 0 }
聽 聽 聽 ENDIF
聽 聽 聽 ::Refresh()
聽 聽ENDIF
聽 聽RETURN NIL
//-----------------------------------------------------------------------------------------------//
METHOD AllPage()
聽 聽::nX := 0
聽 聽::nY := 0
聽 聽::nZoom := Min( ::GetCliRect():nWidth / ::oImage:GetWidth(),;
聽 聽 聽 ::GetCliRect():nHeight / ::oImage:GetHeight )
聽 聽RETURN NIL
//-----------------------------------------------------------------------------------------------//
METHOD OnLButtonDown()
聽 聽IF ::lMouseMark
聽 聽 聽 ::aMouseMark[01] := ::nMouseX
聽 聽 聽 ::aMouseMark[02] := ::nMouseY
聽 聽 聽 ::lButtonDown 聽 聽:= .T.
聽 聽ENDIF
聽 聽RETURN NIL
//-----------------------------------------------------------------------------------------------//
METHOD OnMouseMove( nX, nY )
聽 聽LOCAL a
聽 聽IF ::lMouseMark
聽 聽 聽 ::nMouseX := ( ::nX * -1 ) + ( nX / ::nZoom )
聽 聽 聽 ::nMouseY := ( ::nY * -1 ) + ( nY / ::nZoom )
聽 聽 聽 IF ::lButtonDown
聽 聽 聽 聽 聽::aMouseMark[03] := ::nMouseX - ::aMouseMark[01]
聽 聽 聽 聽 聽::aMouseMark[04] := ::nMouseY - ::aMouseMark[02]
聽 聽 聽 聽 聽::Refresh()
聽 聽 聽 ENDIF
聽 聽 聽 a := ::aMouseMark
聽 聽ENDIF
聽 聽RETURN NIL
//-----------------------------------------------------------------------------------------------//
METHOD Redefine( oWnd, nId )
聽 聽::oWnd := oWnd
聽 聽::nId 聽:= nId
聽 聽::oWnd:AddControl( SELF )
聽 聽RETURN SELF
//-----------------------------------------------------------------------------------------------//
METHOD Initiate()
聽 聽::hWnd := GetDlgItem( ::oWnd:hWnd, ::nId )
聽 聽::Link( ::hWnd )
聽 聽RETURN NIL
//-----------------------------------------------------------------------------------------------//
METHOD OnKeyDown( nKey )
聽 聽LOCAL lSpeed
聽 聽IF nKey == 119 // VK_F8
聽 聽 聽 ::GoLeft( .T. )
聽 聽 聽 ::Refresh()
聽 聽ENDIF
聽 聽IF nKey == 120 // VK_F9
聽 聽 聽 ::GoRight( .T. )
聽 聽 聽 ::Refresh()
聽 聽ENDIF
聽 聽IF !GetKeyState( VK_CONTROL )
聽 聽 聽 RETURN NIL
聽 聽ENDIF
聽 聽IF GetKeyState( VK_CONTROL ) .AND. GetKeyState( 65 )
聽 聽 聽 DO CASE
聽 聽 聽 聽 聽CASE nKey == 37
聽 聽 聽 聽 聽 聽 ::nAjusteX += 05
聽 聽 聽 聽 聽CASE nKey == 38
聽 聽 聽 聽 聽 聽 ::nAjusteY += 05
聽 聽 聽 聽 聽CASE nKey == 39
聽 聽 聽 聽 聽 聽 ::nAjusteX -= 05
聽 聽 聽 聽 聽CASE nKey == 40
聽 聽 聽 聽 聽 聽 ::nAjusteY -= 05
聽 聽 聽 聽 聽CASE nKey == 107
聽 聽 聽 聽 聽 聽 IF ::nAngle < 聽45; ::nAngle += ::nFactAngle; ENDIF
聽 聽 聽 聽 聽CASE nKey == 109
聽 聽 聽 聽 聽 聽 IF ::nAngle > -45; ::nAngle -= ::nFactAngle; ENDIF
聽 聽 聽 ENDCASE
聽 聽 聽 ::Refresh()
聽 聽 聽 RETURN NIL
聽 聽ENDIF
聽 聽IF GetKeyState( VK_SHIFT )
聽 聽 聽 lSpeed := .T.
聽 聽ENDIF
聽 聽DO CASE
聽 聽 聽 CASE nKey == 80
聽 聽 聽 聽 聽::AllPage()
聽 聽 聽 CASE nKey == 37
聽 聽 聽 聽 聽::GoLeft ( lSpeed )
聽 聽 聽 CASE nKey == 38
聽 聽 聽 聽 聽::GoUp 聽 ( lSpeed )
聽 聽 聽 CASE nKey == 39
聽 聽 聽 聽 聽::GoRight( lSpeed )
聽 聽 聽 CASE nKey == 40
聽 聽 聽 聽 聽::GoDown ( lSpeed )
聽 聽 聽 CASE nKey == 107 // +
聽 聽 聽 聽 聽::ZoomPlus()
聽 聽 聽 CASE nKey == 109 // -
聽 聽 聽 聽 聽::ZoomMinus()
聽 聽ENDCASE
聽 聽::Refresh()
聽 聽RETURN NIL
//-----------------------------------------------------------------------------------------------//
METHOD GoLeft( lSpeed )
聽 聽LOCAL nSt
聽 聽DEFAULT lSpeed := .F.
聽 聽nSt := ::nStep * IF( lSpeed, ::nFactSpeed, 1 )
聽 聽::nX += Min( nSt, Abs( ::nX ) )
聽 聽RETURN NIL
//-----------------------------------------------------------------------------------------------//
METHOD GoRight( lSpeed )
聽 聽LOCAL oRC := ::GetCliRect()
聽 聽LOCAL nSt
聽 聽DEFAULT lSpeed := .F.
聽 聽nSt := ::nStep * IF( lSpeed, ::nFactSpeed, 1 )
聽 聽::nX -= Min( nSt, ::oImage:GetWidth() - Abs( ::nX ) - ( oRC:nWidth / ::nZoom ) )
聽 聽RETURN NIL
//-----------------------------------------------------------------------------------------------//
METHOD GoUp( lSpeed )
聽 聽LOCAL nSt
聽 聽DEFAULT lSpeed := .F.
聽 聽nSt := ::nStep * IF( lSpeed, ::nFactSpeed, 1 )
聽 聽::nY += Min( nSt, Abs( ::nY ) )
聽 聽RETURN NIL
//-----------------------------------------------------------------------------------------------//
METHOD GoDown( lSpeed )
聽 聽LOCAL oRC := ::GetCliRect()
聽 聽LOCAL nSt
聽 聽DEFAULT lSpeed := .F.
聽 聽nSt := ::nStep * IF( lSpeed, ::nFactSpeed, 1 )
聽 聽::nY -= Min( nSt, ::oImage:GetHeight() - Abs( ::nY ) - ( oRC:nHeight / ::nZoom ) )
聽 聽RETURN NIL
//-----------------------------------------------------------------------------------------------//
METHOD SetImage( oImage, lEnd )
聽 聽LOCAL oImageTmp
聽 聽DEFAULT lEnd := .T.
聽 聽IF ::oImage != NIL
聽 聽 聽 oImageTmp := ::oImage
聽 聽ENDIF
聽 聽::oImage := oImage
聽 聽IF lEnd .AND. oImageTmp != NIL
聽 聽 聽 oImageTmp:END()
聽 聽ENDIF
聽 聽RETURN SELF
//-----------------------------------------------------------------------------------------------//
METHOD SetImage2( cImage )
聽 聽Local oImage, oImageTmp
聽 聽oImage := Image( cImage )
聽 聽if ::oImage != NIL
聽 聽 聽 oImageTmp := ::oImage
聽 聽Endif
聽 聽::oImage := oImage:GetThumbnailImage( oImage:GetWidth(), oImage:GetHeight() )
聽 聽if oImageTmp != NIL
聽 聽 聽 oImageTmp:End()
聽 聽Endif
聽 聽oImage:End()
聽 聽Return NIL
//-----------------------------------------------------------------------------------------------//
METHOD New( oWnd, nLeft, nTop, nWidth, nHeight )
聽 聽::oWnd := oWnd
聽 聽DEFAULT nLeft 聽 := ::nLeft
聽 聽DEFAULT nTop 聽 聽:= ::nTop
聽 聽DEFAULT nWidth 聽:= ::nWidth
聽 聽DEFAULT nHeight := ::nHeight
聽 聽::nLeft 聽 := nLeft
聽 聽::nTop 聽 聽:= nTop
聽 聽::nWidth 聽:= nWidth
聽 聽::nHeight := nHeight
聽 聽::hWnd := CreateWindowEx( ::nLeft, ::nTop, ::nWidth, ::nHeight, ::oWnd:hWnd, SELF )
聽 聽::bKeyDown := { |nKey| ::OnKeyDown( nKey ) }
聽 聽RETURN SELF
//-----------------------------------------------------------------------------------------------//
METHOD OnPaint( hDC )
聽 聽LOCAL oG, oRC, oBM, FontFamily, Font, RectF, stringformat, solidbrush, string, aPoints, nAngle
聽 聽LOCAL nL, nT, nW, nH, nRadA, nRadB, oBitmap, oGraphics
聽 聽oRC := ::GetCliRect()
聽 聽// Doble Buffer
聽 聽oBitmap := BITMAP( oRC:nWidth, oRC:nHeight )
聽 聽oG := Graphics( oBitmap )
聽 聽// Eof Doble Buffer
聽 聽oG:Clear( oG:Color( 255, 230, 230, 230 ) )
聽 聽IF ::oImage != NIL
聽 聽 聽 IF ::nAngle == 0
聽 聽 聽 聽 聽oG:DrawImage( ::oImage, ( ::nX + ::nAjusteX ) * ::nZoom, ( ::nY + ::nAjusteY ) * ::nZoom, ::oImage:GetWidth() * ::nZoom,;
聽 聽 聽 聽 聽 聽 ::oImage:GetHeight() * ::nZoom )
聽 聽 聽 ELSE
聽 聽 聽 聽 聽// Rotacion de la imagen -45 a 45 Grados
聽 聽 聽 聽 聽nAngle := ::nAngle
聽 聽 聽 聽 聽nL 聽 聽 := ( ::nX + ::nAjusteX ) * ::nZoom
聽 聽 聽 聽 聽nT 聽 聽 := ( ::nY + ::nAjusteY ) * ::nZoom
聽 聽 聽 聽 聽nW 聽 聽 := ::oImage:GetWidth() 聽 * ::nZoom
聽 聽 聽 聽 聽nH 聽 聽 := ::oImage:GetHeight() 聽* ::nZoom
聽 聽 聽 聽 聽IF nAngle > 0
聽 聽 聽 聽 聽 聽 nRadB 聽:= nAngle * ( 3.14159265 / 180 )
聽 聽 聽 聽 聽 聽 nRadA 聽:= ( 180 - nAngle - 90 ) * ( 3.14159265 / 180 )
聽 聽 聽 聽 聽 聽 aPoints := { { nL, nT },;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽{ nL + ( nW * sin( nRadA ) ), nT + ( nW * sin( nRadB ) ) },;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽{ nL - ( nH * sin( nRadB ) ), nT + ( nH * sin( nRadA ) ) } }
聽 聽 聽 聽 聽ELSE
聽 聽 聽 聽 聽 聽 nAngle := nAngle * - 1
聽 聽 聽 聽 聽 聽 nRadB 聽:= nAngle * ( 3.14159265 / 180 )
聽 聽 聽 聽 聽 聽 nRadA 聽:= ( 180 - nAngle - 90 ) * ( 3.14159265 / 180 )
聽 聽 聽 聽 聽 聽 aPoints := { { nL, nT },;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽{ nL + ( nW * sin( nRadA ) ), nT - ( nW * sin( nRadB ) ) },;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽{ nL + ( nH * sin( nRadB ) ), nT + ( nH * sin( nRadA ) ) } }
聽 聽 聽 聽 聽ENDIF
聽 聽 聽 聽 聽oG:DrawImage( ::oImage, aPoints, 3 )
聽 聽 聽 ENDIF
聽 聽ENDIF
聽 聽// Cuadro
聽 聽IF ::aColorRect != NIL
聽 聽 聽 oG:FillRectangle( oG:SolidBrush( oG:Color( ::nColorRect ) ),;
聽 聽 聽 聽 聽oG:RectF( ( ::aColorRect[1] + ::nX ) * ::nZoom, ( ::aColorRect[2] + ::nY ) * ::nZoom,;
聽 聽 聽 聽 聽::aColorRect[3] * ::nZoom, ::aColorRect[4] * ::nZoom ) )
聽 聽ENDIF
聽 聽// Marca
聽 聽IF ::lMouseMark
聽 聽 聽 oG:FillRectangle( oG:SolidBrush( oG:Color( ::nMouseMark ) ),;
聽 聽 聽 聽 聽oG:RectF( ( ::aMouseMark[1] + ::nX ) * ::nZoom, ( ::aMouseMark[2] + ::nY ) * ::nZoom,;
聽 聽 聽 聽 聽::aMouseMark[3] * ::nZoom, ::aMouseMark[4] * ::nZoom ) )
聽 聽ENDIF
聽 聽IF GetKeyState( VK_TAB ) .AND. GetKeyState( VK_CONTROL )
聽 聽 聽 fontFamily 聽 聽 := oG:FontFamily( "Arial" )
聽 聽 聽 font 聽 聽 聽 聽 聽 := oG:Font( fontFamily, 12, FontStyleBold, UnitPoint )
聽 聽 聽 rectF 聽 聽 聽 聽 聽:= oG:RectF( 0, 0, oRC:nWidth, oRC:nHeight )
聽 聽 聽 stringFormat 聽 := StringFormat()
聽 聽 聽 solidBrush 聽 聽 := SolidBrush( oG:Color( 255, 255, 0, 0 ) )
聽 聽 聽 stringFormat:SetAlignment( StringAlignmentCenter )
聽 聽 聽 stringFormat:SetLineAlignment( StringAlignmentCenter )
聽 聽 聽 string := ;
聽 聽 聽 聽 聽 聽 聽 聽 "Step:" + Str( ::nStep ) + " Factor Speed:" + Str( ::nFactSpeed ) + CRLF +;
聽 聽 聽 聽 聽 聽 聽 聽 "Posicion X:" + Str( ::nX ) + " Posicion Y:" + Str( ::nY ) + CRLF +;
聽 聽 聽 聽 聽 聽 聽 聽 "Zoom: " + Str( ::nZoom ) + " Zoom Minimo: " + Str( ::nMinZoom ) + " Zoom Maximo: " + Str( ::nMaxZoom )
聽 聽 聽 oG:DrawString( string, -1, font, rectF, stringFormat, solidBrush )
聽 聽ENDIF
聽 聽oG:END()
聽 聽// Volcado DobleBuffer
聽 聽oGraphics := Graphics( hDC )
聽 聽oGraphics:DrawImage( oBitmap, 0, 0, oRC:nWidth, oRC:nHeight )
聽 聽oGraphics:END()
聽 聽oBitmap:END()
聽 聽// Eof Volcado Doble Buffer
聽 聽RETURN NIL
//-----------------------------------------------------------------------------------------------//
#pragma BEGINDUMP
聽 聽#include <hbvm.h>
聽 聽#include <hbapi.h>
聽 聽#include <windows.h>
聽 聽#include <hbapiitm.h>
/*-----------------------------------------------------------------------------------------------*/
聽 聽LRESULT CALLBACK ImageGdiPlus_WindowProcedure( HWND hWnd, UINT iMsg, WPARAM wParam, LPARAM lParam )
聽 聽{
聽 聽 聽 switch( iMsg )
聽 聽 聽 {
聽 聽 聽 聽 聽case WM_NCCREATE:
聽 聽 聽 聽 聽{
聽 聽 聽 聽 聽 聽 if ((PHB_ITEM)(((LPCREATESTRUCT)lParam)->lpCreateParams))
聽 聽 聽 聽 聽 聽 {
聽 聽 聽 聽 聽 聽 聽 聽PHB_ITEM pSelf = hb_itemNew( ( PHB_ITEM ) ( ( ( LPCREATESTRUCT ) lParam ) -> lpCreateParams ) );
聽 聽 聽 聽 聽 聽 聽 聽SetProp( hWnd, "C5OBJECT", pSelf );
聽 聽 聽 聽 聽 聽 聽 聽return TRUE;
聽 聽 聽 聽 聽 聽 }
聽 聽 聽 聽 聽 聽 else
聽 聽 聽 聽 聽 聽 聽 聽return FALSE;
聽 聽 聽 聽 聽}
聽 聽 聽 聽 聽case WM_PAINT:
聽 聽 聽 聽 聽{
聽 聽 聽 聽 聽 聽 PHB_ITEM pSelf;
聽 聽 聽 聽 聽 聽 HDC hdc;
聽 聽 聽 聽 聽 聽 PAINTSTRUCT ps;
聽 聽 聽 聽 聽 聽 pSelf = 聽(PHB_ITEM) GetProp( hWnd, "C5OBJECT" );
聽 聽 聽 聽 聽 聽 hdc = BeginPaint( hWnd, &ps );
聽 聽 聽 聽 聽 聽 if( pSelf )
聽 聽 聽 聽 聽 聽 {
聽 聽 聽 聽 聽 聽 聽 聽hb_vmPushSymbol( hb_dynsymSymbol( hb_dynsymFind( "ONPAINT" ) ) );
聽 聽 聽 聽 聽 聽 聽 聽hb_vmPush( pSelf );
聽 聽 聽 聽 聽 聽 聽 聽hb_vmPushLong( (long) hdc );
聽 聽 聽 聽 聽 聽 聽 聽hb_vmDo( 1 );
聽 聽 聽 聽 聽 聽 }
聽 聽 聽 聽 聽 聽 EndPaint( hWnd, &ps );
聽 聽 聽 聽 聽 聽 return 1;
聽 聽 聽 聽 聽}
聽 聽 聽 聽 聽case WM_ERASEBKGND:
聽 聽 聽 聽 聽 聽 return 1;
聽 聽 聽 聽 聽case WM_RBUTTONUP:
聽 聽 聽 聽 聽{
聽 聽 聽 聽 聽 聽 PHB_ITEM pSelf;
聽 聽 聽 聽 聽 聽 pSelf = 聽(PHB_ITEM) GetProp( hWnd, "C5OBJECT" );
聽 聽 聽 聽 聽 聽 if( pSelf )
聽 聽 聽 聽 聽 聽 {
聽 聽 聽 聽 聽 聽 聽 聽hb_vmPushSymbol( hb_dynsymSymbol( hb_dynsymFind( "ONRBUTTONUP" ) ) );
聽 聽 聽 聽 聽 聽 聽 聽hb_vmPush( pSelf );
聽 聽 聽 聽 聽 聽 聽 聽hb_vmDo( 0 );
聽 聽 聽 聽 聽 聽 }
聽 聽 聽 聽 聽 聽 break;
聽 聽 聽 聽 聽}
聽 聽 聽 聽 聽case WM_NCDESTROY:
聽 聽 聽 聽 聽{
聽 聽 聽 聽 聽 聽 PHB_ITEM pSelf;
聽 聽 聽 聽 聽 聽 pSelf = 聽(PHB_ITEM) GetProp( hWnd, "C5OBJECT" );
聽 聽 聽 聽 聽 聽 if( pSelf )
聽 聽 聽 聽 聽 聽 {
聽 聽 聽 聽 聽 聽 聽 聽hb_vmPushSymbol( hb_dynsymSymbol( hb_dynsymFind( "ONNCDESTROY" ) ) );
聽 聽 聽 聽 聽 聽 聽 聽hb_vmPush( pSelf );
聽 聽 聽 聽 聽 聽 聽 聽hb_vmDo( 0 );
聽 聽 聽 聽 聽 聽 }
聽 聽 聽 聽 聽 聽 break;
聽 聽 聽 聽 聽}
聽 聽 聽 聽 聽case WM_LBUTTONDOWN:
聽 聽 聽 聽 聽{
聽 聽 聽 聽 聽 聽 PHB_ITEM pSelf;
聽 聽 聽 聽 聽 聽 pSelf = 聽(PHB_ITEM) GetProp( hWnd, "C5OBJECT" );
聽 聽 聽 聽 聽 聽 if( pSelf )
聽 聽 聽 聽 聽 聽 {
聽 聽 聽 聽 聽 聽 聽 聽hb_vmPushSymbol( hb_dynsymSymbol( hb_dynsymFind( "ONLBUTTONDOWN" ) ) );
聽 聽 聽 聽 聽 聽 聽 聽hb_vmPush( pSelf );
聽 聽 聽 聽 聽 聽 聽 聽hb_vmDo( 0 );
聽 聽 聽 聽 聽 聽 }
聽 聽 聽 聽 聽 聽 break;
聽 聽 聽 聽 聽}
聽 聽 聽 聽 聽case WM_LBUTTONUP:
聽 聽 聽 聽 聽{
聽 聽 聽 聽 聽 聽 PHB_ITEM pSelf;
聽 聽 聽 聽 聽 聽 pSelf = 聽(PHB_ITEM) GetProp( hWnd, "C5OBJECT" );
聽 聽 聽 聽 聽 聽 if( pSelf )
聽 聽 聽 聽 聽 聽 {
聽 聽 聽 聽 聽 聽 聽 聽hb_vmPushSymbol( hb_dynsymSymbol( hb_dynsymFind( "ONLBUTTONUP" ) ) );
聽 聽 聽 聽 聽 聽 聽 聽hb_vmPush( pSelf );
聽 聽 聽 聽 聽 聽 聽 聽hb_vmDo( 0 );
聽 聽 聽 聽 聽 聽 }
聽 聽 聽 聽 聽 聽 break;
聽 聽 聽 聽 聽}
聽 聽 聽 聽 聽case WM_MOUSEMOVE:
聽 聽 聽 聽 聽{
聽 聽 聽 聽 聽 聽 PHB_ITEM pSelf;
聽 聽 聽 聽 聽 聽 pSelf = 聽(PHB_ITEM) GetProp( hWnd, "C5OBJECT" );
聽 聽 聽 聽 聽 聽 if( pSelf )
聽 聽 聽 聽 聽 聽 {
聽 聽 聽 聽 聽 聽 聽 聽hb_vmPushSymbol( hb_dynsymSymbol( hb_dynsymFind( "ONMOUSEMOVE" ) ) );
聽 聽 聽 聽 聽 聽 聽 聽hb_vmPush( pSelf );
聽 聽 聽 聽 聽 聽 聽 聽hb_vmPushInteger( LOWORD( lParam ) );
聽 聽 聽 聽 聽 聽 聽 聽hb_vmPushInteger( HIWORD( lParam ) );
聽 聽 聽 聽 聽 聽 聽 聽hb_vmDo( 2 );
聽 聽 聽 聽 聽 聽 }
聽 聽 聽 聽 聽 聽 break;
聽 聽 聽 聽 聽}
聽 聽 聽 }
聽 聽 聽 if ( GetProp( hWnd, "C5OLDPROC" ) )
聽 聽 聽 聽 聽CallWindowProc( (WNDPROC) GetProp( hWnd, "C5OLDPROC" ), hWnd, iMsg, wParam, lParam );
聽 聽 聽 return DefWindowProc( hWnd, iMsg, wParam, lParam );
聽 聽}
/*-----------------------------------------------------------------------------------------------*/
聽 聽HB_FUNC_STATIC( REGISTERCLASS )
聽 聽{
聽 聽 聽 WNDCLASS wndClass;
聽 聽 聽 ZeroMemory(&wndClass, sizeof(WNDCLASS));
聽 聽 聽 wndClass.style 聽 聽 聽 聽 = CS_HREDRAW | CS_VREDRAW;
聽 聽 聽 wndClass.lpfnWndProc 聽 = ImageGdiPlus_WindowProcedure;
聽 聽 聽 wndClass.cbClsExtra 聽 聽= 0;
聽 聽 聽 wndClass.cbWndExtra 聽 聽= 0;
聽 聽 聽 wndClass.hCursor 聽 聽 聽 = LoadCursor(0,IDC_ARROW);
聽 聽 聽 wndClass.hbrBackground = NULL;
聽 聽 聽 wndClass.lpszClassName = "C5IMAGEGDIPLUS";
聽 聽 聽 hb_retnl( RegisterClass(&wndClass) );
聽 聽}
/*-----------------------------------------------------------------------------------------------*/
聽 聽HB_FUNC_STATIC( TIMAGEGDIPLUS_LINK )
聽 聽{
聽 聽 聽 SetProp( (HWND)hb_parnl( 1 ), "C5OBJECT", hb_itemNew( hb_param( 0, HB_IT_OBJECT ) ) );
聽 聽 聽 SetProp( (HWND)hb_parnl( 1 ), "C5OLDPROC", (HANDLE)SetWindowLong( (HWND)hb_parnl( 1 ), GWL_WNDPROC,
聽 聽 聽 聽 聽(long)ImageGdiPlus_WindowProcedure ) );
聽 聽}
/*-----------------------------------------------------------------------------------------------*/
聽 聽HB_FUNC_STATIC( CREATEWINDOWEX )
聽 聽{
聽 聽 聽 hb_retnl( (long) CreateWindowEx( 0, "C5IMAGEGDIPLUS", "", WS_CHILD | WS_VISIBLE | WS_BORDER,
聽 聽 聽 聽 聽hb_parni( 1 ), hb_parni( 2 ), hb_parni( 3 ), hb_parni( 4 ), (HWND)hb_parnl( 5 ),
聽 聽 聽 聽 聽(HMENU)-1, GetModuleHandle( 0 ), hb_param( 6, HB_IT_OBJECT ) ) );
聽 聽}
/*
聽* Gdi+
聽* Lira Lira Oscar Joel [oSkAr]
聽* Francisco Garcia Fernandez [Paco]
聽* Julio 6 del 2007
聽* CopyRight Todos los Derechos Reservados CanalFive 2007
聽* Ultima Actualizacion: :>: 11/15/2007 14:07 by :(Oscar):
聽*
聽* <!-- m --><a class="postlink" href="http://msdn2.microsoft.com/en-us/library/ms533799.aspx">http://msdn2.microsoft.com/en-us/library/ms533799.aspx</a><!-- m -->
聽*/
#include "hbclass.ch"
#include "GdiPlus.ch"
#xcommand DEFAULT <uVar> := <uVal> => IF <uVar> == NIL; <uVar> := <uVal>; ENDIF
INIT PROC GdiPlus
聽 聽C5GP_StartUp()
聽 聽RETURN
/*
聽* GdiPlusBase
/*-----------------------------------------------------------------------------------------------*/
/*-----------------------------------------------------------------------------------------------*/
CLASS GdiPlusBase
聽 聽PROTECTED:
聽 聽 聽 DATA 聽 聽 聽pObj
聽 聽 聽 DATA 聽 聽 聽aObj 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽INIT {}
聽 聽 聽 METHOD 聽 聽AddObj( oObj ) 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽INLINE AAdd( ::aObj, oObj ), oObj
聽 聽 聽 CLASSDATA nCls
聽 聽PUBLIC:
聽 聽 聽 METHOD nGetCls() 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽INLINE ::nCls
聽 聽 聽 METHOD End() 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽INLINE AEval( ::aObj, { |o| o:END() } ), C5GP_DELETE( ::pObj, ::nCls )
聽 聽 聽 METHOD GetLastStatus() 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽INLINE C5GP_GETLASTSTATUS( ::pObj, ::nCls )
聽 聽 聽 METHOD AdjustableArrowCap( nHeight, nWidth, lIsFilled ) 聽 聽 聽 聽 INLINE ::AddObj( AdjustableArrowCap( nHeight, nWidth, lIsFilled ) 聽 聽)
聽 聽 聽 METHOD Font( oFFcFN, nSize, nStyle, nUnit, oCollection ) 聽 聽 聽 聽INLINE ::AddObj( Font( oFFcFN, nSize, nStyle, nUnit, oCollection ) 聽 )
聽 聽 聽 METHOD RectF( nL, nT, nW, nH ) 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽INLINE ::AddObj( RectF( nL, nT, nW, nH ) 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 )
聽 聽 聽 METHOD Color( nA, nR, nG, nB ) 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽INLINE ::AddObj( Color( nA, nR, nG, nB ) 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 )
聽 聽 聽 METHOD LinearGradientBrush( oRectF, oC1, oC2, iMode, p5 ) 聽 聽 聽 INLINE ::AddObj( LinearGradientBrush( oRectF, oC1, oC2, iMode, p5 ) 聽)
聽 聽 聽 METHOD StringFormat() 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 INLINE ::AddObj( StringFormat() 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽)
聽 聽 聽 METHOD SolidBrush( oColor ) 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 INLINE ::AddObj( SolidBrush( oColor ) 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽)
聽 聽 聽 METHOD Image( cImage ) 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽INLINE ::AddObj( Image( cImage ) 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 )
聽 聽 聽 METHOD Pen( oColor_oBrush, nWidth ) 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 INLINE ::AddObj( Pen( oColor_oBrush, nWidth ) 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽)
聽 聽 聽 METHOD HatchBrush( nType, oColor1, oColor2 ) 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽INLINE ::AddObj( HatchBrush( nType, oColor1, oColor2 ) 聽 聽 聽 聽 聽 聽 聽 )
聽 聽 聽 METHOD PointF( nX, nY ) 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 INLINE ::AddObj( PointF( nX, nY ) 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽)
聽 聽 聽 METHOD Matrix( p1, p2, p3, p4, p5, p6 ) 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 INLINE ::AddObj( Matrix( p1, p2, p3, p4, p5, p6 ) 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽)
聽 聽 聽 METHOD FontFamily( cFamily, oFontCollection ) 聽 聽 聽 聽 聽 聽 聽 聽 聽 INLINE ::AddObj( FontFamily( cFamily, oFontCollection ) 聽 聽 聽 聽 聽 聽 聽)
聽 聽 聽 METHOD GraphicsPath( nFillMode ) 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽INLINE ::AddObj( GraphicsPath( nFillMode ) 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 )
聽 聽 聽 METHOD TextureBrush( p1, p2, p3, p4, p5, p6 ) 聽 聽 聽 聽 聽 聽 聽 聽 聽 INLINE ::AddObj( TextureBrush( p1, p2, p3, p4, p5, p6 ) 聽 聽 聽 聽 聽 聽 聽)
聽 聽 聽 METHOD BITMAP( p1, p2, p3 ) 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 INLINE ::AddObj( BITMAP( p1, p2, p3 ) )
聽 聽 聽 METHOD ImageAttributes() 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽INLINE ::AddObj( ImageAttributes() )
ENDCLASS
/*
聽* Font
/*-----------------------------------------------------------------------------------------------*/
/*-----------------------------------------------------------------------------------------------*/
CLASS Font From GdiPlusBase
聽 聽PROTECTED:
聽 聽 聽 CLASSDATA nCls 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽INIT 聽 C5CLS_FONT
聽 聽PUBLIC:
聽 聽 聽 METHOD New( cFam, nSize, nStyle, nUnit ) 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽CONSTRUCTOR
ENDCLASS
/*-----------------------------------------------------------------------------------------------*/
METHOD New( oFontFamily_cFontFamily, nSize, nStyle, nUnit, oFontCollection )
聽 聽DEFAULT nStyle := FontStyleRegular
聽 聽DEFAULT nUnit 聽:= UnitPoint
聽 聽IF ValType( oFontFamily_cFontFamily ) == "C"
聽 聽 聽 oFontFamily_cFontFamily := ::FontFamily( oFontFamily_cFontFamily, oFontCollection )
聽 聽ENDIF
聽 聽::pObj := C5GP_FONT( oFontFamily_cFontFamily:pObj, nSize, nStyle, nUnit )
聽 聽RETURN SELF
/*
聽* RectF
/*-----------------------------------------------------------------------------------------------*/
/*-----------------------------------------------------------------------------------------------*/
CLASS RectF From GdiPlusBase
聽 聽PROTECTED:
聽 聽 聽 CLASSDATA nCls 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽INIT 聽 C5CLS_RECTF
聽 聽PUBLIC:
聽 聽 聽 METHOD New( nL, nT, nW, nH ) 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽CONSTRUCTOR
ENDCLASS
/*-----------------------------------------------------------------------------------------------*/
METHOD New( nL, nT, nW, nH )
聽 聽::pObj := C5GP_RECTF( nL, nT, nW, nH )
聽 聽RETURN SELF
/*
聽* LinearGradientBrush
/*-----------------------------------------------------------------------------------------------*/
/*-----------------------------------------------------------------------------------------------*/
CLASS LinearGradientBrush From Brush
聽 聽PROTECTED:
聽 聽 聽 CLASSDATA nCls 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽INIT 聽 C5CLS_LINEARGRADIENTBRUSH
聽 聽PUBLIC:
聽 聽 聽 METHOD New( oRF, oC1, oC2, nMode ) 聽CONSTRUCTOR
聽 聽 聽 METHOD SetTransform( oMatrix ) 聽 聽 聽INLINE C5GP_LINEARGRADIENTBRUSH_SETTRANSFORM( ::pObj, oMatrix:pObj )
ENDCLASS
/*-----------------------------------------------------------------------------------------------*/
METHOD New( oRF, oC1, oC2, nMode, p5 )
聽 聽IF p5 != NIL
聽 聽 聽 ::pObj := C5GP_LINEARGRADIENTBRUSH( 0x001, oRF:pObj, oC1:pObj, oC2:pObj, nMode, p5 )
聽 聽ELSE
聽 聽 聽 ::pObj := C5GP_LINEARGRADIENTBRUSH( 0x002, oRF:pObj, oC1:pObj, oC2:pObj, nMode )
聽 聽ENDIF
聽 聽RETURN SELF
/*
聽* StringFormat
/*-----------------------------------------------------------------------------------------------*/
/*-----------------------------------------------------------------------------------------------*/
CLASS StringFormat From GdiPlusBase
聽 聽PROTECTED:
聽 聽 聽 CLASSDATA nCls 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽INIT 聽 C5CLS_STRINGFORMAT
聽 聽PUBLIC:
聽 聽 聽 METHOD New( nFormatFlag ) 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 CONSTRUCTOR
聽 聽 聽 METHOD SetAlignMent( nAlig ) 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 INLINE IF( Empty( ::pObj ), ::New(), NIL ), C5GP_SETALIGNMENT( ::pObj, ::nCls, nAlig )
聽 聽 聽 METHOD SetLineAlignMent( nAlig ) 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 INLINE IF( Empty( ::pObj ), ::New(), NIL ), C5GP_STRINGFORMAT_SETLINEALIGNMENT( ::pObj, nAlig )
聽 聽 聽 METHOD END() 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽INLINE IF( Empty( ::pObj ), ::New(), NIL ), Super():END()
ENDCLASS
/*-----------------------------------------------------------------------------------------------*/
METHOD New( nFormatFlag )
聽 聽::pObj := C5GP_STRINGFORMAT( nFormatFlag )
聽 聽RETURN SELF
/*
聽* Image
/*-----------------------------------------------------------------------------------------------*/
/*-----------------------------------------------------------------------------------------------*/
CLASS Image From GdiPlusBase
聽 聽PROTECTED:
聽 聽 聽 CLASSDATA nCls 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 INIT 聽 C5CLS_IMAGE
聽 聽PUBLIC:
聽 聽 聽 METHOD New( cImage ) 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 CONSTRUCTOR
聽 聽 聽 METHOD GetWidth() 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽INLINE C5GP_IMAGE_GETWIDTH( ::pObj )
聽 聽 聽 METHOD GetHeight() 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 INLINE C5GP_IMAGE_GETHEIGHT( ::pObj )
聽 聽 聽 METHOD GetThumbnailImage()
聽 聽 聽 METHOD GetFrameDimensionsCount() 聽 聽 聽 聽 聽 聽 聽 聽 INLINE C5GP_IMAGE_GETFRAMEDIMENSIONSCOUNT( ::pObj )
聽 聽 聽 METHOD GetFrameDimensionsList( pList, nCount ) 聽 INLINE C5GP_IMAGE_GETFRAMEDIMENSIONSLIST( ::pObj, @pList, nCount )
聽 聽 聽 METHOD GetFrameCount( pList, nIndex ) 聽 聽 聽 聽 聽 聽INLINE C5GP_IMAGE_GETFRAMECOUNT( ::pObj, pList, nIndex )
聽 聽 聽 METHOD SelectActiveFrame( pList, nList, nFrame ) INLINE C5GP_IMAGE_SELECTACTIVEFRAME( ::pObj, pList, nList, nFrame )
聽 聽 聽 METHOD FreeDimensionList( pList ) 聽 聽 聽 聽 聽 聽 聽 聽INLINE C5GP_IMAGE_FREEDIMENSIONLIST( pList )
聽 聽 聽 METHOD CountFrames()
聽 聽 聽 METHOD SetFrame( nFrame )
聽 聽 聽 METHOD RotateFlip( nType ) 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 INLINE C5GP_IMAGE_ROTATEFLIP( ::pObj, nType )
ENDCLASS
/*-----------------------------------------------------------------------------------------------*/
METHOD CountFrames()
聽 聽LOCAL pList, nDims, nFrames := 0
聽 聽nDims := ::GetFrameDimensionsCount()
聽 聽IF nDims > 0
聽 聽 聽 ::GetFrameDimensionsList( @pList, 1 )
聽 聽 聽 nFrames := ::GetFrameCount( pList, 1 )
聽 聽 聽 ::FreeDimensionList( pList )
聽 聽ENDIF
聽 聽RETURN nFrames
/*-----------------------------------------------------------------------------------------------*/
METHOD SetFrame( nFrame )
聽 聽LOCAL pList, nDims, nFrames := 0
聽 聽nDims := ::GetFrameDimensionsCount()
聽 聽IF nDims > 0
聽 聽 聽 ::GetFrameDimensionsList( @pList, 1 )
聽 聽 聽 ::SelectActiveFrame( pList, 1, nFrame )
聽 聽 聽 ::FreeDimensionList( pList )
聽 聽ENDIF
/*-----------------------------------------------------------------------------------------------*/
METHOD GetThumbnailImage( nWidth, nHeight )
聽 聽LOCAL oImage := Image()
聽 聽oImage:pObj := C5GP_IMAGE_GETTHUMBNAILIMAGE( ::pObj, nWidth, nHeight )
聽 聽RETURN oImage
/*-----------------------------------------------------------------------------------------------*/
METHOD New( cImage )
聽 聽::pObj = C5GP_IMAGE( cImage )
聽 聽RETURN SELF
/*
聽* Pen
/*-----------------------------------------------------------------------------------------------*/
/*-----------------------------------------------------------------------------------------------*/
CLASS Pen From GdiPlusBase
聽 聽PROTECTED:
聽 聽 聽 CLASSDATA nCls 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 INIT 聽 C5CLS_PEN
聽 聽PUBLIC:
聽 聽 聽 METHOD New( oColor_oBrush, nWidth ) 聽 聽 聽 聽CONSTRUCTOR
聽 聽 聽 METHOD SetAlignment( nAlig ) 聽 聽 聽 聽 聽 聽 聽 INLINE C5GP_SETALIGNMENT( ::pObj, ::nCls, nAlig )
聽 聽 聽 METHOD SetCustomEndCap( oCustomLineCap ) 聽 INLINE C5GP_PEN_SETCUSTOMENDCAP 聽( ::pObj, oCustomLineCap:pObj )
聽 聽 聽 METHOD SetCustomStartCap( oCustomLineCap ) INLINE C5GP_PEN_SETCUSTOMSTARTCAP( ::pObj, oCustomLineCap:pObj )
聽 聽 聽 METHOD SetStartCap( nCap ) 聽 聽 聽 聽 聽 聽 聽 聽 INLINE C5GP_PEN_SETSTARTCAP( ::pObj, nCap )
聽 聽 聽 METHOD SetEndCap( nCap ) 聽 聽 聽 聽 聽 聽 聽 聽 聽 INLINE C5GP_PEN_SETENDCAP 聽( ::pObj, nCap )
聽 聽 聽 METHOD SetLineJoin( nModeJoin ) 聽 聽 聽 聽 聽 聽INLINE C5GP_PEN_SETLINEJOIN( ::pObj, nModeJoin )
聽 聽 聽 METHOD SetDashPattern( aDash, nCount ) 聽 聽 INLINE C5GP_PEN_SetDashPattern( ::pObj, aDash, nCount )
ENDCLASS
/*-----------------------------------------------------------------------------------------------*/
METHOD New( oColor_oBrush, nWidth )
聽 聽::pObj := C5GP_PEN( oColor_oBrush:pObj, oColor_oBrush:nGetCls(), nWidth )
聽 聽RETURN SELF
/*
聽* CustomLineCap
/*-----------------------------------------------------------------------------------------------*/
CLASS CustomLineCap From GdiPlusBase
ENDCLASS
/*
聽* PointF
/*-----------------------------------------------------------------------------------------------*/
CLASS PointF From GdiPlusBase
聽 聽PROTECTED:
聽 聽 聽 CLASSDATA nCls INIT 聽 C5CLS_POINTF
聽 聽PUBLIC:
聽 聽 聽 METHOD New() 聽 CONSTRUCTOR
ENDCLASS
/*-----------------------------------------------------------------------------------------------*/
METHOD New( nX, nY )
聽 聽::pObj := C5GP_POINTF( nX, nY )
聽 聽RETURN SELF
/*
聽* Matrix
/*-----------------------------------------------------------------------------------------------*/
CLASS Matrix From GdiPlusBase
聽 聽PROTECTED:
聽 聽 聽 CLASSDATA nCls INIT 聽 C5CLS_MATRIX
聽 聽PUBLIC:
聽 聽 聽 METHOD New() 聽 CONSTRUCTOR
ENDCLASS
/*-----------------------------------------------------------------------------------------------*/
METHOD New( p1, p2, p3, p4, p5, p6 )
聽 聽::pObj := C5GP_MATRIX( p1, p2, p3, p4, p5, p6 )
聽 聽RETURN SELF
/*
聽* FontFamily
/*-----------------------------------------------------------------------------------------------*/
CLASS FontFamily From GdiPlusBase
聽 聽PROTECTED:
聽 聽 聽 CLASSDATA nCls INIT 聽 C5CLS_FONTFAMILY
聽 聽PUBLIC:
聽 聽 聽 METHOD New() 聽 聽 聽 聽 聽 CONSTRUCTOR
ENDCLASS
/*-----------------------------------------------------------------------------------------------*/
METHOD New( cFamily, oFontCollection )
聽 聽::pObj := C5GP_FONTFAMILY( cFamily, oFontCollection )
聽 聽RETURN SELF
/*
聽* GraphicsPath
/*-----------------------------------------------------------------------------------------------*/
CLASS GraphicsPath From GdiPlusBase
聽 聽PROTECTED:
聽 聽 聽 CLASSDATA nCls INIT 聽 聽 聽 聽 聽C5CLS_GRAPHICSPATH
聽 聽 聽 METHOD Ck() 聽 聽 聽 聽 聽 聽 聽 聽 聽INLINE IF( ::pObj == NIL, ::New(), NIL )
聽 聽PUBLIC:
聽 聽 聽 METHOD New() 聽 聽 聽 聽 聽 聽 聽 聽 CONSTRUCTOR
聽 聽 聽 METHOD StartFigure() 聽 聽 聽 聽 INLINE ::Ck(), C5GP_GraphicsPath_StartFigure( ::pObj )
聽 聽 聽 METHOD AddLine( oRF1, oRF2 ) INLINE ::Ck(), C5GP_GraphicsPath_AddLine( ::pObj, oRF1:pObj, oRF2:pObj )
ENDCLASS
/*-----------------------------------------------------------------------------------------------*/
METHOD New( nFillMode )
聽 聽DEFAULT nFillMode := FillModeAlternate
聽 聽::pObj := C5GP_GRAPHICSPATH( nFillMode )
聽 聽RETURN SELF
/*-----------------------------------------------------------------------------------------------*/
CLASS TextureBrush From Brush
聽 聽PROTECTED:
聽 聽 聽 CLASSDATA nCls 聽 聽 聽 聽 聽 聽 聽 聽 INIT 聽 聽 聽 聽 聽C5CLS_TEXTUREBRUSH
聽 聽PUBLIC:
聽 聽 聽 METHOD New() 聽 聽 聽 聽 聽 聽 聽 聽 聽 CONSTRUCTOR
聽 聽 聽 METHOD SetTransForm( oMatrix ) INLINE 聽 聽 聽 聽C5GP_TEXTUREBRUSH_SETTRANSFORM( ::pObj, oMatrix:pObj )
聽 聽 聽 METHOD SetWrapMode( nMode ) 聽 聽INLINE 聽 聽 聽 聽C5GP_TEXTUREBRUSH_SETWRAPMODE( ::pObj, nMode )
ENDCLASS
/*-----------------------------------------------------------------------------------------------*/
METHOD New( p1, p2, p3, p4, p5, p6 )
聽 聽DO CASE
聽 聽 聽 CASE ValType( p3 ) == "O" .AND. p3:nGetCls == C5CLS_RECTF
聽 聽 聽 聽 聽::pObj := C5GP_TEXTUREBRUSH( 3, p1:pObj, p2, p3:pObj )
聽 聽 聽 CASE p6 != NIL
聽 聽 聽 聽 聽p3 := ::RectF( p3, p4, p5, p6 )
聽 聽 聽 聽 聽::pObj := C5GP_TEXTUREBRUSH( 3, p1:pObj, p2, p3:pObj )
聽 聽 聽 CASE ValType( p2 ) == "O" .AND. p2:nGetCls == C5CLS_RECTF
聽 聽 聽 聽 聽::pObj := C5GP_TEXTUREBRUSH( 2, p1:pObj, p2:pObj, p3 )
聽 聽 聽 OTHERWISE
聽 聽 聽 聽 聽DEFAULT p2 := WrapModeTile
聽 聽 聽 聽 聽::pObj := C5GP_TEXTUREBRUSH( 1, p1:pObj, p2 )
聽 聽ENDCASE
聽 聽RETURN SELF
// Bitmap
/*-----------------------------------------------------------------------------------------------*/
CLASS BITMAP From Image
聽 聽PROTECTED:
聽 聽 聽 CLASSDATA nCls 聽 聽 聽 聽 聽 聽 聽 聽 INIT 聽 聽 聽 聽 聽C5CLS_BITMAP
聽 聽PUBLIC:
聽 聽 聽 METHOD New() 聽 聽 聽 聽 聽 聽 聽 聽 聽 CONSTRUCTOR
聽 聽 聽 METHOD GetPixel( nX, nY, oColor ) INLINE C5GP_BITMAP_GETPIXEL( ::pObj, nX, nY, oColor:pObj )
聽 聽 聽 METHOD SetPixel( nX, nY, oColor ) INLINE C5GP_BITMAP_SETPIXEL( ::pObj, nX, nY, oColor:pObj )
ENDCLASS
/*-----------------------------------------------------------------------------------------------*/
METHOD New( p1, p2, p3 )
聽 聽DEFAULT p3 := PixelFormat32bppARGB
聽 聽IF ValType( p1 ) == "C"
聽 聽 聽 DEFAULT p2 := .F.
聽 聽 聽 ::pObj := C5GP_BITMAP( 1, p1, p2 )
聽 聽ELSE
聽 聽 聽 ::pObj := C5GP_BITMAP( 2, p1, p2, p3 )
聽 聽ENDIF
聽 聽RETURN SELF
// ImageAtributes
/*-----------------------------------------------------------------------------------------------*/
CLASS ImageAttributes From GdiPlusBase
聽 聽PROTECTED:
聽 聽 聽 CLASSDATA nCls 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽INIT 聽 聽 聽 聽 聽C5CLS_IMAGEATTRIBUTES
聽 聽 聽 METHOD Ck() 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 INLINE IF( ::pObj == NIL, ::New(), NIL )
聽 聽PUBLIC:
聽 聽 聽 METHOD New() 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽CONSTRUCTOR
聽 聽 聽 METHOD SetColorMatrix( aClrMatrix, nMode, nType ) 聽 INLINE ::Ck(), C5GP_IMAGEATTRIBUTES_SETCOLORMATRIX( ::pObj, aClrMatrix, nMode, nType )
ENDCLASS
/*-----------------------------------------------------------------------------------------------*/
METHOD New()
聽 聽::pObj := C5GP_IMAGEATTRIBUTES()
聽 聽RETURN SELF