📄 imageobj.c
字号:
CONST VOID *lpbInit, // initialization data
CONST BITMAPINFO *lpbmi, // color-format data
UINT fuUsage // color-data usage
)
{
HBITMAP hBitmap;
int iHeight = lpbmih->biHeight;
if( iHeight < 0 )
iHeight = -iHeight;
//创建位图对象
hBitmap = WinGdi_CreateCompatibleBitmap( hdc, lpbmih->biWidth, iHeight );
if( hBitmap && fdwInit == CBM_INIT )
{ //初始化位图图形数据
if( WinGdi_SetDIBits( hdc, hBitmap, 0, iHeight, lpbInit, lpbmi, fuUsage ) == 0 )
{ //失败,释放之前创建的对象
WinGdi_DeleteObject( hBitmap );
hBitmap = NULL;
}
}
return hBitmap;
}
// **************************************************
// 声明:HFONT WinGdi_CreateFontIndirect( const LOGFONT *lplf )
// 参数:
// IN lplf - LOGFONT 结构指针,包含字体数据
// 返回值:
// 假如成功,返回TRUE;否则,返回FALSE
// 功能描述:
// 创建逻辑字体对象
// 引用:
// 系统API
// ************************************************
HFONT WinGdi_CreateFontIndirect( const LOGFONT *lplf )
{
return NULL;
}
// **************************************************
// 声明:static HPEN _CreatePen(
// DWORD dwStyle,
// int iWidth,
// COLORREF clrColor,
// DWORD dwObjFlag,
// _LPPENDATA * lppPen )
// 参数:
// IN dwStyle-笔风格,包含:
// PS_SOLID-实心线
// PS_DOT-点线
// PS_CENTER-中心线
// PS_DASHED-破折线
// PS_NULL-笔不可见
// IN iWidth - 笔宽度(2点以上仅支持PS_SOLID笔风格)
// IN clrColor - 笔颜色
// IN dwObjFlag - 对象标志
// OUT lppPen - 用于接受笔对象指针
// 返回值:
// 假如成功,返回笔对象句柄;否则,返回NULL
// 功能描述:
// 创建笔对象
// 引用:
//
// ************************************************
static HPEN _CreatePen( DWORD dwStyle, int iWidth, COLORREF clrColor, DWORD dwObjFlag, _LPPENDATA * lppPen )
{
_LPPENDATA lpPen = (_LPPENDATA)BlockHeap_Alloc( hgwmeBlockHeap, 0, sizeof(_PENDATA) );//malloc( sizeof( _PENDATA ) );
// _LPPENDATA lpPen = (_LPPENDATA)BLK_Alloc( 0, sizeof(_PENDATA) );//malloc( sizeof( _PENDATA ) );
if( lpPen )
{ //初始化对象数据
lpPen->penAttrib.pattern = (BYTE)dwStyle;
lpPen->penAttrib.width = (BYTE)iWidth;
lpPen->penAttrib.clrRef = clrColor;
lpPen->penAttrib.color = lpDrvDisplayDefault->lpRealizeColor( clrColor, NULL, 0, 0 );
AddToObjMgr( &lpPen->obj, OBJ_PEN|dwObjFlag, (ULONG)GetCallerProcess() );
if( lppPen )
*lppPen = lpPen;
return (HPEN)PTR_TO_HANDLE( lpPen );
}
return NULL;
}
// **************************************************
// 声明:HPEN WINAPI WinGdi_CreatePenIndirect(const LOGPEN * lpPenData)
// 参数:
// IN lpPenData-指向LOGPEN结构
// 返回值:
// 假如成功,返回笔对象句柄;否则,返回NULL
// 功能描述:
// 创建逻辑笔
// 引用:
// 系统API
// ************************************************
HPEN WINAPI WinGdi_CreatePenIndirect(const LOGPEN * lpPenData)
{
return _CreatePen( lpPenData->lognStyle, lpPenData->lognWidth.x, lpPenData->lognColor, 0, NULL );
}
// **************************************************
// 声明:HPEN WINAPI WinGdi_CreatePen( int style, int width, COLORREF color )
// 参数:
// IN style-笔风格,包含:
// PS_SOLID-实心线
// PS_DOT-点线
// PS_CENTER-中心线
// PS_DASHED-破折线
// PS_NULL-笔不可见
// IN width-笔宽度(2点以上仅支持PS_SOLID笔风格)
// IN color-笔颜色
// 返回值:
// 假如成功,返回笔对象句柄;否则,返回NULL
// 功能描述:
// 创建逻辑笔
// 引用:
// 系统API
// ************************************************
HPEN WINAPI WinGdi_CreatePen( int style, int width, COLORREF color )
{
return _CreatePen( style, width, color, 0, NULL );
}
//define stock brush
static const BYTE _pattern[STOCK_BRUSH_NUM][8] = {
{ 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00 },//HS_HORIZONTAL /* ----- */
{ 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa },//HS_VERTICAL /* ||||| */
{ 0x88, 0x44, 0x22, 0x11, 0x88, 0x44, 0x22, 0x11 },//HS_FDIAGONAL /* \\\\\ */
{ 0x11, 0x22, 0x44, 0x88, 0x11, 0x22, 0x44, 0x88 },//HS_BDIAGONAL /* ///// */
{ 0x55, 0xff, 0x55, 0xff, 0x55, 0xff, 0x55, 0xff },//HS_CROSS /* +++++ */
{ 0xaa, 0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa, 0x55 }// HS_DIAGCROSS /* xxxxx */
};
// **************************************************
// 声明:static HBRUSH _CreateBrush(
// DWORD dwStyle,
// COLORREF color,
// DWORD dwHatch,
// DWORD dwObjFlag,
// _LPBRUSHDATA * lppBrush )
// 参数:
// IN dwStyle - 刷子风格
// IN color - 颜色值
// IN dwHatch - 阴影线类型,包含
// HS_HORIZONTAL - 象 -----
// HS_VERTICAL - 象 |||||
// HS_FDIAGONAL - 象 \\\\\
// HS_BDIAGONAL - 象 /////
// HS_CROSS - 象 +++++
// HS_DIAGCROSS - 象 xxxxx
// IN dwObjFlag - 对象标志
// OUT lppBrush - 用于接受刷子对象指针
// 返回值:
// 假如成功,返回刷子对象句柄;否则,返回NULL
// 功能描述:
// 创建刷子
// 引用:
//
// ************************************************
static HBRUSH _CreateBrush( DWORD dwStyle, COLORREF color, DWORD dwHatch, DWORD dwObjFlag, _LPBRUSHDATA * lppBrush )
{ //分配对象
_LPBRUSHDATA lpBrush = (_LPBRUSHDATA)BlockHeap_Alloc( hgwmeBlockHeap, 0, sizeof(_BRUSHDATA) );//malloc( sizeof( _BRUSHDATA ) );
// _LPBRUSHDATA lpBrush = (_LPBRUSHDATA)BLK_Alloc( 0, sizeof(_BRUSHDATA) );//malloc( sizeof( _BRUSHDATA ) );
if( lpBrush )
{ //初始化数据
lpBrush->brushAttrib.style = (BYTE)dwStyle;
lpBrush->brushAttrib.origin.x = lpBrush->brushAttrib.origin.y = 0;
lpBrush->brushAttrib.clrRef = color;
lpBrush->brushAttrib.color = lpDrvDisplayDefault->lpRealizeColor( color, NULL, 0, 0 );
if( dwStyle == BS_HATCHED )
{ //阴影线风格
lpBrush->brushAttrib.style = BS_HATCHED;
lpBrush->brushAttrib.hatch = (BYTE)(dwHatch % STOCK_BRUSH_NUM);
if( lpBrush->brushAttrib.hatch != BS_NULL )
memcpy( lpBrush->brushAttrib.pattern, _pattern[lpBrush->brushAttrib.hatch], 8 );
}
else
{ //纯色类型 BS_SOLID
lpBrush->brushAttrib.style = (BYTE)dwStyle;
lpBrush->brushAttrib.hatch = 0;
memset( lpBrush->brushAttrib.pattern, 0xffffffff, 8 );
//
}
//加入对象管理链表
AddToObjMgr( &lpBrush->obj, OBJ_BRUSH|dwObjFlag, (ULONG)GetCallerProcess() );
if( lppBrush )
*lppBrush = lpBrush;
return (HBRUSH)PTR_TO_HANDLE( lpBrush );
}
return NULL;
}
// **************************************************
// 声明:HBRUSH WINAPI WinGdi_CreateHatchBrush(int style, COLORREF color)
// 参数:
// IN style - 阴影线类型,包含
// HS_HORIZONTAL - 象 -----
// HS_VERTICAL - 象 |||||
// HS_FDIAGONAL - 象 \\\\\
// HS_BDIAGONAL - 象 /////
// HS_CROSS - 象 +++++
// HS_DIAGCROSS - 象 xxxxx
// 返回值:
// 假如成功,返回刷子对象句柄;否则,返回NULL
// 功能描述:
// 创建刷子
// 引用:
// 系统API
// ************************************************
HBRUSH WINAPI WinGdi_CreateHatchBrush(int style, COLORREF color)
{
return _CreateBrush( BS_HATCHED, color, (DWORD)style, 0, NULL );
}
// **************************************************
// 声明:HBRUSH WINAPI WinGdi_CreateBrushIndirect(const LOGBRUSH *lpBrushData)
// 参数:
// IN lpBrushData-指向LOGBRUSH结构指针
// 返回值:
// 假如成功,返回刷子对象句柄;否则,返回NULL
// 功能描述:
// 创建刷子
// 引用:
// 系统API
// ************************************************
HBRUSH WINAPI WinGdi_CreateBrushIndirect(const LOGBRUSH *lpBrushData)
{
return _CreateBrush( lpBrushData->lbStyle, lpBrushData->lbColor, (DWORD)lpBrushData->lbHatch, 0, NULL );
}
// **************************************************
// 声明:HBRUSH WINAPI WinGdi_CreateSolidBrush( COLORREF color )
// 参数:
// IN color - 刷子颜色
// 返回值:
// 假如成功,返回刷子对象句柄;否则,返回NULL
// 功能描述:
// 创建纯色刷子
// 引用:
// 系统API
// ************************************************
HBRUSH WINAPI WinGdi_CreateSolidBrush( COLORREF color )
{
return _CreateBrush( BS_SOLID, color, 0, 0, NULL );
}
// **************************************************
// 声明:HBRUSH _CreateSysBrush( COLORREF color, UINT uiStyle )
// 参数:
// IN color - 刷子颜色
// IN uiStyle - 刷子风格
// 返回值:
// 假如成功,返回刷子对象句柄;否则,返回NULL
// 功能描述:
// 创建系统刷子
// 引用:
//
// ************************************************
HBRUSH _CreateSysBrush( COLORREF color, UINT uiStyle )
{
return _CreateBrush( uiStyle, color, 0, OBJ_FREE_DISABLE, NULL );
}
// **************************************************
// 声明:void _DeleteSysSolidBrush( HBRUSH hBrush )
// 参数:
// IN hBrush - 刷子句柄
// 返回值:
// 无
// 功能描述:
// 删除刷子
// 引用:
//
// ************************************************
void _DeleteSysSolidBrush( HBRUSH hBrush )
{
_LPBRUSHDATA lpBrush;
EnterCriticalSection( &csGdiObjList );
lpBrush = _GetHBRUSHPtr( hBrush );
if( lpBrush )
{ //从对象管理链表移出
RemoveFromObjMgr( (LPOBJLIST)lpBrush );
//删除
BlockHeap_Free( hgwmeBlockHeap, 0, lpBrush, sizeof(_BRUSHDATA) );
// BLK_Free( 0, lpBrush, sizeof(_BRUSHDATA) );
}
LeaveCriticalSection( &csGdiObjList );
}
// **************************************************
// 声明:BOOL _SetSysSolidBrushColor( HBRUSH hBrush , COLORREF color )
// 参数:
// IN hBrush - 刷子对象句柄
// IN color - 颜色
// 返回值:
// 假如成功,返回TRUE;否则,返回FALSE
// 功能描述:
// 设置刷子的颜色
// 引用:
//
// ************************************************
BOOL _SetSysSolidBrushColor( HBRUSH hBrush , COLORREF color )
{
_LPBRUSHDATA lpBrush = _GetHBRUSHPtr( hBrush );
if( lpBrush )
{
lpBrush->brushAttrib.clrRef = color;
lpBrush->brushAttrib.color = lpDrvDisplayDefault->lpRealizeColor( color, NULL, 0, 0 );
return TRUE;
}
return FALSE;
}
// **************************************************
// 声明:HPEN _CreateSysPen( COLORREF color, UINT uiStyle )
// 参数:
// IN color - 笔颜色
// IN uiStyle - 笔风格
// 返回值:
// 假如成功,返回笔对象句柄;否则,返回NULL
// 功能描述:
// 创建系统笔
// 引用:
//
// ************************************************
HPEN _CreateSysPen( COLORREF color, UINT uiStyle )
{
return _CreatePen( uiStyle, 1, color, OBJ_FREE_DISABLE, NULL );
}
// **************************************************
// 声明:HFONT _CreateSysFont( UINT id )
// 参数:
// IN id - 字体对象ID
// 返回值:
// 假如成功,返回字体对象句柄;否则,返回NULL
// 功能描述:
// 创建系统字体对象
// 引用:
//
// ************************************************
HFONT _CreateSysFont( UINT id )
{
extern const _FONTDRV FAR * _lpSYSFontDrv;
extern const _FONTDRV FAR _ROM8x8Drv;
extern const _FONTDRV FAR _ROM8x6Drv;
extern const _FONTDRV FAR _PhoneticDrv;
extern const _FONTDRV FAR _SymbolDrv;
extern const _FONTDRV FAR _SYSFont16Drv;
extern const _FONTDRV FAR _SYSFont24Drv;
_FONT * lpFont;
LOGFONT logFont;
LOGFONT * lpLogfont = NULL;
//分配字体对象
lpFont = BlockHeap_Alloc( hgwmeBlockHeap, 0, sizeof(_FONT) );
// lpFont = BLK_Alloc( 0, sizeof(_FONT) );
if( lpFont )
{ //初始化对象数据
memset( lpFont, 0, sizeof(_FONT) );
lpFont->obj.objType = OBJ_FONT|OBJ_FREE_DISABLE;
lpFont->handle = (HANDLE)1;
lpFont->dwData = 1;
switch( id )
{
//case SYSTEM_FONT:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -