gdilib.c
来自「深圳市微逻辑电子有限公司 巨果• Kingmos® 系统核心」· 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 + -
显示快捷键?