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

📄 brw_unit.c

📁 好记星的控件,包括button,list,对文件操作
💻 C
📖 第 1 页 / 共 2 页
字号:
/**************************************************************************
                                                                          
              Copyright (C) 2005 SHENZHEN MEIJIN CO.LTD                   
                                                                          
 FILE NAME:   brw_unit.C                                                      
 MODULE NAME: browser                                                        
 DESCRIPTION: 提供了浏览器单元处理函数
 对外函数声明:
	BrowserUnitLegality			Unit合法性
	BrowserJudgeUserFont		判断为自造字
	BrowserGetOneUnit			获取一个单元
	BrowserDrawOneUnit			画一个单元
	BrowserDefaultRule			浏览器默认的内部单元处理函数

	

		
**************************************************************************
    DTAE       AUTHOR     VERSION                 REMARKS                 
 =========== ==========  =========  ======================================
 2006-3-5    gaolinhui    V1.0					create                               
***************************************************************************/
#include "kernel.h"
#include "BrowserIn.h"


/************************************************************************/
/* 函数名称: BrowserUnitLegality	                                        */
/* 函数描述: unit合法性		                                            */
/* 当前版本: 1.0                                                        */
/* 作    者: gaolinhui                                                      */
/* 输入参数:                                                            */
/*			pChar			- 数据指针									*/
/* 输出参数:                                                            */
/*          NONE					                                    */
/* 返回值  :                                                            */
/*          TRUE/FALSE	                                                */
/* 更改记录:                                                            */
/* =====================================================================*/
/*    日期       人员       版本   描述                                 */
/* =====================================================================*/
/* 2006-3-1    gaolinhui      1.0    创建	                                */
/************************************************************************/
BOOL BrowserUnitLegality(UINT8 *pChar)
{
	if (*pChar & 0x80)
	{
		return TRUE;
	}
	if ((*pChar >= '0') && (*pChar <= '9'))
	{
		return TRUE;
	}
	if ((*pChar >= 'a') && (*pChar <= 'z'))
	{
		return TRUE;
	}
	if ((*pChar >= 'A') && (*pChar <= 'Z'))
	{
		return TRUE;
	}
	if ((*pChar == 0x27) || (*pChar == '-'))
	{
		return TRUE;
	}
	return FALSE;
}



/************************************************************************/
/* 函数名称: BrowserJudgeUserFont                                         */
/* 函数描述: 判断是否为自造字                                           */
/* 当前版本: 1.0                                                        */
/* 作    者: gaolinhui                                                      */
/* 输入参数:                                                            */
/*			pData				- 数据指针								*/
/* 输出参数:                                                            */
/*          NONE					                                    */
/* 返回值  :                                                            */
/*          TRUE/FALSE	                                                */
/* 更改记录:                                                            */
/* =====================================================================*/
/*    日期       人员       版本   描述                                 */
/* =====================================================================*/
/* 2006-3-1    gaolinhui      1.0    创建	                                */
/************************************************************************/
BOOL BrowserJudgeUserFont(UINT8 *pData)
{
	UINT16 wFont;
	UINT8 high,low;

	high = *pData;
	low = *(pData + 1);
	wFont = high;
	wFont <<= 8;
	wFont += low;
	return IsSmallFont(wFont);
	//return IsUserFont(wFont);
}

//判断是否为组合字
BOOL __BViewIsCombinedFont(UINT8 const * const pFont)
{
	UINT16 wFont = MAKEWORD(*(pFont+1),*pFont);
	return FontIsComposeFont(wFont);
}

/************************************************************************/
/* 函数名称: BrowserGetOneUnit                                          */
/* 函数描述: 得到一个显示单元                                           */
/* 当前版本: 1.0                                                        */
/* 作    者: gaolinhui                                                      */
/* 输入参数:                                                            */
/*			handle			- 对象句柄									*/
/*			pSur			- 数据指针									*/
/*			wStartCol		- 起始列									*/
/* 输出参数:                                                            */
/*          pDes			- 字符串                                    */
/*			wMoveLen		- 内存长度									*/
/* 返回值  :                                                            */
/*          显示宽度                                                    */
/* 更改记录:                                                            */
/* =====================================================================*/
/*    日期       人员       版本   描述                                 */
/* =====================================================================*/
/* 2006-3-1    gaolinhui      1.0    创建	                                */
/************************************************************************/
UINT16 BrowserGetOneUnit(MBrowser *handle,UINT8 *pSur,UINT8 *pDes,
						 UINT16 *wMoveLen,UINT uOption)
{
	BOOL	bFirst;
	UINT16	wMemLen;
	FontInfo fontInfo;
	UINT8 *pUnitBuff,*pBuff,*p;
	UINT16 wUnitWidth,wUnitHeight;
	UINT16 ww,hh;
	UINT16 i;
	MUnitInfo* pUnitInfo;
	UINT type;
	UINT	CodeWidth = 0;
	UINT (*ProcessRule)(MBrowser *handle,UINT8*,UINT,MUnitInfo*);
	
	ProcessRule = handle->pBrwInfo->fpProcessRule;
	if (!ProcessRule)
	{
		return 0;
	}

	//申请内存
	pBuff = BROWSER_STACK_ALLOC(handle,BROWSER_UNIT_MAXLEN);
	pUnitInfo = BROWSER_STACK_ALLOC(handle,sizeof(MUnitInfo));
		
	if ((uOption != BROWSER_LOADING) && (uOption != BROWSER_DRAWING))
	{
		uOption = BROWSER_SCANNING;
	}
	/*变量初始化*/
	wMemLen = 0;
	*wMoveLen = 0;
	/*设置工作指针*/
	if (pDes)
	{
		pUnitBuff = pDes;
	}
	else
	{
		pUnitBuff = pBuff;
	}
	p = pUnitBuff;

reScan:
	type = ProcessRule(handle,pSur,uOption,pUnitInfo);
	BrowserSetFontID(handle);
	if (type == BROWSER_UNIT_SYMBOL)
	{
		pSur += pUnitInfo->uMemLen;
		(*wMoveLen) += pUnitInfo->uMemLen;
		goto reScan;
	}
	else if (type == BROWSER_UNIT_TRANSFER)
	{
		UINT8 code;

		(*wMoveLen) += 4;
		code = pUnitInfo->mResource.szString[0];
		*pUnitBuff = code;
		*(pUnitBuff + 1) = 0;
		/*得到字符宽度*/
		if(!FontGetCharInfo(FontGetLib(),code,&fontInfo,NULL))
		{
			*pUnitBuff = ' ';
			FontGetCharInfo(FontGetLib(),' ',&fontInfo,NULL);
		}
		
		BROWSER_STACK_FREE(handle,sizeof(MUnitInfo));
		BROWSER_STACK_FREE(handle,BROWSER_UNIT_MAXLEN);

		return (UINT16)fontInfo.wFontWidth;
	}
	else if (type == BROWSER_UNIT_CONTROL)
	{
		if (pUnitInfo->mResource.uCtrlType == UNIT_CTRL_END)
		{
			BROWSER_STACK_FREE(handle,sizeof(MUnitInfo));
			BROWSER_STACK_FREE(handle,BROWSER_UNIT_MAXLEN);

			return 0;
		}
		else if (pUnitInfo->mResource.uCtrlType == UNIT_CTRL_RETURN)
		{
			*wMoveLen += pUnitInfo->uMemLen;
			BROWSER_STACK_FREE(handle,sizeof(MUnitInfo));
			BROWSER_STACK_FREE(handle,BROWSER_UNIT_MAXLEN);
			
			return -1;
		}
		else
		{
			pSur += pUnitInfo->uMemLen;
			(*wMoveLen) += pUnitInfo->uMemLen;
			goto reScan;
		}
	}
	else if (type == BROWSER_UNIT_STRING)
	{
		if (!BrowserUnitLegality(pSur))
		{
			/*unit分割符*/
			*wMoveLen += 1;
			*pUnitBuff = *pSur;
			*(pUnitBuff + 1) = 0;
			/*得到字符宽度*/
//			if (!FontGetCharInfo(handle->pBrwInfo->wFontID,*pSur,&fontInfo,NULL) )
			if (!FontGetCharInfo(FontGetLib(),*pSur,&fontInfo,NULL) )
			{
				*pUnitBuff = ' ';
				/*得到字符宽度*/
				FontGetCharInfo(FontGetLib(),' ',&fontInfo,NULL);
			}
			BROWSER_STACK_FREE(handle,sizeof(MUnitInfo));
			BROWSER_STACK_FREE(handle,BROWSER_UNIT_MAXLEN);

⌨️ 快捷键说明

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