gdilib.c

来自「深圳市微逻辑电子有限公司 巨果&#8226 Kingmos&reg 系统核心」· C语言 代码 · 共 2,460 行 · 第 1/5 页

C
2,460
字号
typedef HBITMAP ( WINAPI * PGDI_CREATEDIBSECTION )( 
						 HDC hdc, 
						 CONST BITMAPINFO *lpbmi,
						 UINT iUsage,         //must = DIB_PAL_COLORS
						 VOID ** lppvBits,
						 HANDLE hSection,  // must = NULL
						 DWORD dwOffset   // = 0
						 );
HBITMAP WINAPI Gdi_CreateDIBSection ( 
						 HDC hdc, 
						 CONST BITMAPINFO *lpbmi,
						 UINT iUsage,         //must = DIB_PAL_COLORS
						 VOID ** lppvBits,
						 HANDLE hSection,  // must = NULL
						 DWORD dwOffset   // = 0
						 )
{
#ifdef CALL_TRAP
    CALLTRAP cs;
    cs.apiInfo = CALL_API( API_GDI, GDI_CREATEDIBSECTION, 6 );
    cs.arg0 = (DWORD)hdc;
    return (HBITMAP)CALL_SERVER( &cs, lpbmi, iUsage, lppvBits, hSection, dwOffset );
#else

	PGDI_CREATEDIBSECTION pCreateDIBSection;// = (PGDI_CREATEDIBSECTION)lpGDIAPI[GDI_CREATEDIBSECTION];

	HBITMAP retv = NULL;
	CALLSTACK cs;

	if( API_Enter( API_GDI, GDI_CREATEDIBSECTION, &pCreateDIBSection, &cs ) )
	{
		lpbmi = MapProcessPtr( lpbmi, (LPPROCESS)cs.lpvData );
		lppvBits = MapProcessPtr( lppvBits, (LPPROCESS)cs.lpvData );

		retv = pCreateDIBSection( hdc, lpbmi, iUsage, lppvBits, hSection, dwOffset );
		API_Leave(  );
	}
	return retv;
#endif
}

typedef int ( WINAPI * PGDI_SETDIBITS )(
						 HDC hdc,                  
						 HBITMAP hbmp,             
						 UINT uStartScan,          
						 UINT cScanLines,          
						 CONST VOID *lpvBits,      
						 CONST BITMAPINFO *lpbmi,  
						 UINT fuColorUse           
						 );
int WINAPI Gdi_SetDIBits(
						 HDC hdc,                  
						 HBITMAP hbmp,             
						 UINT uStartScan,          
						 UINT cScanLines,          
						 CONST VOID *lpvBits,      
						 CONST BITMAPINFO *lpbmi,  
						 UINT fuColorUse           
						 )
{
#ifdef CALL_TRAP
    CALLTRAP cs;
    cs.apiInfo = CALL_API( API_GDI, GDI_SETDIBITS, 7 );
    cs.arg0 = (DWORD)hdc;
    return (DWORD)CALL_SERVER( &cs, hbmp, uStartScan, cScanLines, lpvBits, lpbmi, fuColorUse );
#else

	PGDI_SETDIBITS pSetDIBits;// = (PGDI_SETDIBITS)lpGDIAPI[GDI_SETDIBITS];

	int retv = 0;
	CALLSTACK cs;

	if( API_Enter( API_GDI, GDI_SETDIBITS, &pSetDIBits, &cs ) )
	{
		lpvBits = MapProcessPtr( lpvBits, (LPPROCESS)cs.lpvData );
		lpbmi = MapProcessPtr( lpbmi, (LPPROCESS)cs.lpvData );

		retv = pSetDIBits( hdc, hbmp, uStartScan, cScanLines, lpvBits, lpbmi, fuColorUse );
		API_Leave(  );
	}
	return retv;
#endif
}

typedef HBITMAP ( WINAPI * PGDI_CREATEDIBITMAP )(
								  HDC hdc,                        
								  CONST BITMAPINFOHEADER *lpbmih, 
								  DWORD fdwInit,                  
								  CONST VOID *lpbInit,            
								  CONST BITMAPINFO *lpbmi,        
								  UINT fuUsage                    
								  );
HBITMAP WINAPI Gdi_CreateDIBitmap(
								  HDC hdc,                        
								  CONST BITMAPINFOHEADER *lpbmih, 
								  DWORD fdwInit,                  
								  CONST VOID *lpbInit,            
								  CONST BITMAPINFO *lpbmi,        
								  UINT fuUsage                    
								  )
{
#ifdef CALL_TRAP
    CALLTRAP cs;
    cs.apiInfo = CALL_API( API_GDI, GDI_CREATEDIBITMAP, 6 );
    cs.arg0 = (DWORD)hdc;
    return (HBITMAP)CALL_SERVER( &cs, lpbmih, fdwInit, lpbInit, lpbmi, fuUsage );
#else

	PGDI_CREATEDIBITMAP pCreateDIBitmap;// = (PGDI_CREATEDIBITMAP)lpGDIAPI[GDI_CREATEDIBITMAP];

	HBITMAP retv = NULL;
	CALLSTACK cs;

	if( API_Enter( API_GDI, GDI_CREATEDIBITMAP, &pCreateDIBitmap, &cs ) )
	{
		lpbmih = MapProcessPtr( lpbmih, (LPPROCESS)cs.lpvData );
		lpbInit = MapProcessPtr( lpbInit, (LPPROCESS)cs.lpvData );
		lpbmi = MapProcessPtr( lpbmi, (LPPROCESS)cs.lpvData );

		retv = pCreateDIBitmap( hdc, lpbmih, fdwInit, lpbInit, lpbmi, fuUsage );
		API_Leave(  );
	}
	return retv;
#endif
}

typedef HGDIOBJ ( WINAPI * PGDI_GETSTOCKOBJECT )( int fObject );
HGDIOBJ WINAPI Gdi_GetStockObject( int fObject )
{
#ifdef CALL_TRAP
    CALLTRAP cs;
    cs.apiInfo = CALL_API( API_GDI, GDI_GETSTOCKOBJECT, 1 );
    cs.arg0 = (DWORD)fObject ;
    return (HGDIOBJ)CALL_SERVER( &cs );
#else

	PGDI_GETSTOCKOBJECT pGetStockObject;// = (PGDI_GETSTOCKOBJECT)lpGDIAPI[GDI_GETSTOCKOBJECT];

	HGDIOBJ retv = NULL;
	CALLSTACK cs;

	if( API_Enter( API_GDI, GDI_GETSTOCKOBJECT, &pGetStockObject, &cs ) )
	{
		retv = pGetStockObject( fObject );
		API_Leave(  );
	}
	return retv;
#endif
}

typedef BOOL ( WINAPI * PGDI_GETTEXTMETRICS )( HDC hdc, LPTEXTMETRIC lptm );
BOOL WINAPI Gdi_GetTextMetrics( HDC hdc, LPTEXTMETRIC lptm )
{
#ifdef CALL_TRAP
    CALLTRAP cs;
    cs.apiInfo = CALL_API( API_GDI, GDI_GETTEXTMETRICS, 2 );
    cs.arg0 = (DWORD)hdc;
    return (DWORD)CALL_SERVER( &cs, lptm );
#else

	PGDI_GETTEXTMETRICS pGetTextMetrics;// = (PGDI_GETTEXTMETRICS)lpGDIAPI[GDI_GETTEXTMETRICS];

	BOOL retv = FALSE;
	CALLSTACK cs;

	if( API_Enter( API_GDI, GDI_GETTEXTMETRICS, &pGetTextMetrics, &cs ) )
	{
		lptm = MapProcessPtr( lptm, (LPPROCESS)cs.lpvData );

		retv = pGetTextMetrics( hdc, lptm );
		API_Leave(  );
	}
	return retv;
#endif
}

typedef BOOL ( WINAPI * PGDI_GETCHARWIDTH )( HDC hdc, WORD iFirst, WORD iLast, LPINT lpiBuf );
BOOL WINAPI Gdi_GetCharWidth( HDC hdc, WORD iFirst, WORD iLast, LPINT lpiBuf )
{
#ifdef CALL_TRAP
    CALLTRAP cs;
    cs.apiInfo = CALL_API( API_GDI, GDI_GETCHARWIDTH, 4 );
    cs.arg0 = (DWORD)hdc;
    return (DWORD)CALL_SERVER( &cs, iFirst, iLast, lpiBuf );
#else

	PGDI_GETCHARWIDTH pGetCharWidth;// = (PGDI_GETCHARWIDTH)lpGDIAPI[GDI_GETCHARWIDTH];

	BOOL retv = FALSE;
	CALLSTACK cs;

	if( API_Enter( API_GDI, GDI_GETCHARWIDTH, &pGetCharWidth, &cs ) )
	{
		lpiBuf = MapProcessPtr( lpiBuf, (LPPROCESS)cs.lpvData );

		retv = pGetCharWidth( hdc, iFirst, iLast, lpiBuf );
		API_Leave(  );
	}
	return retv;
#endif
}

typedef HANDLE ( WINAPI * PGDI_LOADIMAGE )( 
                     HINSTANCE hinst,
                     LPCTSTR lpszName, 
                     UINT uType, 
                     int cxDesired, 
                     int cyDesired, 
                     UINT fuLoad 
                     );
HANDLE WINAPI Gdi_LoadImage( 
                     HINSTANCE hinst,
                     LPCTSTR lpszName, 
                     UINT uType, 
                     int cxDesired, 
                     int cyDesired, 
                     UINT fuLoad 
                     )
{
#ifdef CALL_TRAP
    CALLTRAP cs;
    cs.apiInfo = CALL_API( API_GDI, GDI_LOADIMAGE, 6 );
    cs.arg0 = (DWORD)hinst;
    return (HANDLE)CALL_SERVER( &cs, lpszName, uType, cxDesired, cyDesired, fuLoad );
#else

	PGDI_LOADIMAGE pLoadImage;// = (PGDI_LOADIMAGE)lpGDIAPI[GDI_LOADIMAGE];

	HANDLE retv = NULL;
	CALLSTACK cs;

	if( API_Enter( API_GDI, GDI_LOADIMAGE, &pLoadImage, &cs ) )
	{
		lpszName = MapProcessPtr( lpszName, (LPPROCESS)cs.lpvData );

		retv = pLoadImage( hinst, lpszName, uType, cxDesired, cyDesired, fuLoad );
		API_Leave(  );
	}
	return retv;
#endif
}

typedef HICON ( WINAPI * PGDI_LOADICON )(  HINSTANCE hInstance, LPCTSTR lpIconName );
HICON WINAPI Gdi_LoadIcon(  HINSTANCE hInstance, LPCTSTR lpIconName )
{
#ifdef CALL_TRAP
    CALLTRAP cs;
    cs.apiInfo = CALL_API( API_GDI, GDI_LOADICON, 2 );
    cs.arg0 = (DWORD)hInstance;
    return (HICON)CALL_SERVER( &cs, lpIconName );
#else

	PGDI_LOADICON pLoadIcon;// = (PGDI_LOADICON)lpGDIAPI[GDI_LOADICON];

	HICON retv = NULL;
	CALLSTACK cs;

	if( API_Enter( API_GDI, GDI_LOADICON, &pLoadIcon, &cs ) )
	{
		lpIconName = MapProcessPtr( lpIconName, (LPPROCESS)cs.lpvData );

		retv = pLoadIcon( hInstance, lpIconName );
		API_Leave(  );
	}
	return retv;
#endif
}

typedef HCURSOR ( WINAPI * PGDI_LOADCURSOR )( HINSTANCE hInstance, LPCTSTR lpCursorName );
HCURSOR WINAPI Gdi_LoadCursor( HINSTANCE hInstance, LPCTSTR lpCursorName )
{
#ifdef CALL_TRAP
    CALLTRAP cs;
    cs.apiInfo = CALL_API( API_GDI, GDI_LOADCURSOR, 2 );
    cs.arg0 = (DWORD)hInstance;
    return (HCURSOR)CALL_SERVER( &cs, lpCursorName );
#else

	PGDI_LOADCURSOR pLoadCursor;// = (PGDI_LOADCURSOR)lpGDIAPI[GDI_LOADCURSOR];

	HCURSOR retv = NULL;
	CALLSTACK cs;

	if( API_Enter( API_GDI, GDI_LOADCURSOR, &pLoadCursor, &cs ) )
	{
		lpCursorName = MapProcessPtr( lpCursorName, (LPPROCESS)cs.lpvData );

		retv = pLoadCursor( hInstance, lpCursorName );
		API_Leave(  );
	}
	return retv;
#endif
}

typedef int ( WINAPI * PGDI_SETDIBITSTODEVICE )(
						 HDC hdc,
						 int xDest,
						 int yDest,
						 DWORD dwWidth,
						 DWORD dwHeight,
						 int xSrc,
						 int ySrc,
						 UINT uStartScan,
						 UINT cScanLines,
						 CONST VOID *lpvBits,
						 CONST BITMAPINFO *lpbmi,
						 UINT fuColorUse );
													
int WINAPI Gdi_SetDIBitsToDevice(
						 HDC hdc,
						 int xDest,
						 int yDest,
						 DWORD dwWidth,

						 DWORD dwHeight,
						 int xSrc,
						 int ySrc,
						 UINT uStartScan,

						 UINT cScanLines,
						 CONST VOID *lpvBits,
						 CONST BITMAPINFO *lpbmi,
						 UINT fuColorUse
						 )
{
#ifdef CALL_TRAP
    CALLTRAP cs;
    cs.apiInfo = CALL_API( API_GDI, GDI_SETDIBITSTODEVICE, 12 );
    cs.arg0 = (DWORD)
						  hdc;
    return (DWORD)CALL_SERVER( &cs,
						  xDest,
						  yDest,
						  dwWidth,
						  dwHeight,
						  xSrc,
						  ySrc,
						  uStartScan,
						  cScanLines,
						  lpvBits,
						  lpbmi,
						  fuColorUse );
#else

	PGDI_SETDIBITSTODEVICE pfn;// = (PGDI_LOADCURSOR)lpGDIAPI[GDI_LOADCURSOR];

	int retv = 0;
	CALLSTACK cs;

	if( API_Enter( API_GDI, GDI_SETDIBITSTODEVICE, &pfn, &cs ) )
	{
		lpvBits = MapProcessPtr( lpvBits, (LPPROCESS)cs.lpvData );
		lpbmi = MapProcessPtr( lpbmi, (LPPROCESS)cs.lpvData );

		retv = pfn(	hdc,
					xDest,
					yDest,
					dwWidth,
					dwHeight,
					xSrc,
					ySrc,
					uStartScan,
					cScanLines,
					lpvBits,
					lpbmi,
					fuColorUse );
		API_Leave();
	}
	return retv;
#endif
}


typedef int ( WINAPI * PGDI_GETMAPMODE )( HDC hdc );
int WINAPI Gdi_GetMapMode( HDC hdc )
{
#ifdef CALL_TRAP
    CALLTRAP cs;
    cs.apiInfo = CALL_API( API_GDI, GDI_GETMAPMODE, 1 );
    cs.arg0 = (DWORD)hdc ;
    return (DWORD)CALL_SERVER( &cs );
#else

	PGDI_GETMAPMODE pfn;// = (PGDI_GETTEXTMETRICS)lpGDIAPI[GDI_GETTEXTMETRICS];

	int retv = 0;
	CALLSTACK cs;

	if( API_Enter( API_GDI, GDI_GETMAPMODE, &pfn, &cs ) )
	{
		retv = pfn( hdc );
		API_Leave(  );
	}
	return retv;
#endif
}


typedef BOOL ( WINAPI * PGDI_TEXTOUTW )( HDC hdc, int x, int y, LPCTSTR lpcstr, int count );
BOOL WINAPI Gdi_TextOutW( HDC hdc, int x, int y, LPCTSTR lpcstr, int count )
{
#ifdef CALL_TRAP
    CALLTRAP cs;
    cs.apiInfo = CALL_API( API_GDI, GDI_TEXTOUTW, 4 );
    cs.arg0 = (DWORD)hdc;
    return (DWORD)CALL_SERVER( &cs, x, y, lpcstr, count );
#else

	PGDI_TEXTOUTW pTextOutW;// = (PGDI_TEXTOUT)lpGDIAPI[GDI_TEXTOUT];

	BOOL   retv = FALSE;
	CALLSTACK cs;

	if( API_Enter( API_GDI, GDI_TEXTOUTW, &pTextOutW, &cs ) )
	{
		lpcstr = MapProcessPtr( lpcstr, (LPPROCESS)cs.lpvData );

		retv = pTextOutW( hdc, x, y, lpcstr, count );
		API_Leave(  );
	}
	return retv;
#endif
}

typedef BOOL ( WINAPI * PGDI_GETTEXTEXTENTPOINT32W )( HDC hdc, LPCTSTR lpcstr, int nLength, LPSIZE lpSize );
BOOL WINAPI Gdi_GetTextExtentPoint32W( HDC hdc, 
								    LPCTSTR lpcstr, 
									int nLength, 
									LPSIZE lpSize )
{
#ifdef CALL_TRAP
    CALLTRAP cs;
    cs.apiInfo = CALL_API( API_GDI, GDI_GETTEXTEXTENTPOINT32W, 4 );
    cs.arg0 = (DWORD)hdc;
    return (DWORD)CALL_SERVER( &cs, lpcstr, nLength, lpSize );
#else

	PGDI_GETTEXTEXTENTPOINT32W pfn;

	BOOL  bRetv = FALSE;
    CALLSTACK cs;
	if( API_Enter( API_GDI, GDI_GETTEXTEXTENTPOINT32W, &pfn, &cs ) )
	{
		lpcstr = MapProcessPtr( lpcstr, (LPPROCESS)cs.lpvData );
		lpSize = MapProcessPtr( lpSize, (LPPROCESS)cs.lpvData );

		bRetv = pfn( hdc, lpcstr, nLength, lpSize );
		API_Leave();
	}
	return bRetv;
#endif
}

typedef HFONT ( WINAPI * PGDI_CREATEFONTINDIRECT )( CONST LOGFONT *lplf );
HFONT WINAPI Gdi_CreateFontIndirect( CONST LOGFONT *lplf )
{
#ifdef CALL_TRAP
    CALLTRAP cs;
    cs.apiInfo = CALL_API( API_GDI, GDI_CREATEFONTINDIRECT, 1 );
    cs.arg0 = (DWORD)lplf ;
    return (HFONT)CALL_SERVER( &cs );
#else

	PGDI_CREATEFONTINDIRECT pfn;// = (PGDI_CREATEBRUSHINDIRECT)lpGDIAPI[GDI_CREATEBRUSHINDIRECT];

	HFONT retv = NULL;
	CALLSTACK cs;

	if( API_Enter( API_GDI, GDI_CREATEFONTINDIRECT, &pfn, &cs ) )
	{
		lplf = MapProcessPtr( lplf, (LPPROCESS)cs.lpvData );

		retv = pfn( lplf );
		API_Leave(  );
	}
	return retv;
#endif
}

BOOL WINAPI Gdi_Pie(
  HDC hdc,         // handle to DC
  int nLeftRect,   // x-coord of upper-left corner of rectangle
  int nTopRect,    // y-coord of upper-left corner of rectangle
  int nRightRect,  // x-coord of lower-right corner of rectangle
  int nBottomRect, // y-coord of lower-right corner of rectangle
  int nXRadial1,   // x-coord of first radial's endpoint
  int nYRadial1,   // y-coord of first radial's endpoint
  int nXRadial2,   // x-coord of second radial's endpoint
  int nYRadial2    // y-coord of second radial's endpoint
)
{
	Messag

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?