⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 imageobj.c

📁 深圳市微逻辑电子有限公司 巨果&#8226 Kingmos&reg 系统核心
💻 C
📖 第 1 页 / 共 4 页
字号:
								  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 + -