📄 brw_unit.c
字号:
return (UINT16)fontInfo.wFontWidth;
}
}
/*是否为遇到的第一个全角字的标记*/
bFirst = TRUE;
/*一个unit结束的标记有:空格,回车,数据结束,分割符*/
while (1)
{
CodeWidth = FontGetCharCodeWidth(pSur);
/*是否为全角字符*/
if (CodeWidth != 1)
{
/*是否为自造字*/
if (BrowserJudgeUserFont(pSur))
{
/*自造字当作字母看待*/
wMemLen = 2;
bFirst = FALSE;
}
else
{
if (bFirst)
{
if(CodeWidth == 2)
{/*全角字也是uint的结束标记*/
*p++ = *pSur++;
*p++ = *pSur++;
}
else if(CodeWidth == 4)
{
*p++ = *pSur++;
*p++ = *pSur++;
*p++ = *pSur++;
*p++ = *pSur++;
}
(*wMoveLen) += CodeWidth;
}
break;
}
}
else
{
if (BrowserUnitLegality(pSur))
{
wMemLen = 1;
bFirst = FALSE;
}
else
{
break;
}
}
/*复制字符到缓存*/
if ((*wMoveLen + wMemLen) >= BROWSER_UNIT_MAXLEN)
{
break;
}
for (i=0;i<wMemLen;i++)
{
*p++ = *pSur++;
(*wMoveLen) ++;
}
}
*p = 0;
/*计算显示长度,以点为单位 */
FontGetStringRect(&ww,&hh,pUnitBuff);
wUnitWidth = (UINT16)ww;
wUnitHeight = (UINT16)hh;
/*不可识别的字符,以' '替换*/
if (wUnitWidth == 0)
{
UINT32 sLen,j;
sLen = strlen(pUnitBuff);
for(j = 0;j< sLen;j ++)
{
*(pUnitBuff+j) = ' ';
}
FontGetStringRect(&ww,&hh,pUnitBuff);
wUnitHeight = (UINT16)hh;
wUnitWidth = (UINT16)ww;
}
/*返回字符串宽度*/
BROWSER_STACK_FREE(handle,sizeof(MUnitInfo));
BROWSER_STACK_FREE(handle,BROWSER_UNIT_MAXLEN);
return wUnitWidth;
}
/************************************************************************/
/* 函数名称: BrowserDrawOneUnit */
/* 函数描述: 绘制一个显示单元 */
/* 当前版本: 1.0 */
/* 作 者: gaolinhui */
/* 输入参数: */
/* handle - 对象句柄 */
/* pData - 数据指针 */
/* pString - 字符串 */
/* line - 行 */
/* column - 列 */
/* 输出参数: */
/* NONE */
/* 返回值 : */
/* NONE */
/* 更改记录: */
/* =====================================================================*/
/* 日期 人员 版本 描述 */
/* =====================================================================*/
/* 2006-3-1 gaolinhui 1.0 创建 */
/************************************************************************/
VOID BrowserDrawOneUnit(MBrowser *handle,UINT8 *pString,
UINT32 line,UINT16 column)
{
UINT16 x,y,gain;
UINT16 x0,y0;
UINT16 wUnitWidth,wUnitHeight;
UINT16 height;
/*控件起始坐标*/
x0 = handle->pBrwInfo->nX;
y0 = handle->pBrwInfo->nY;
/*根据状态设置相应字体*/
BrowserSetFontID(handle);
/*计算起始坐标*/
BrowserLineColToXY(handle,line,column,&x,&y);
/*计算显示长度*/
FontGetStringRect(&wUnitWidth,&wUnitHeight,pString);
/*显示字符串*/
height = BrowserLinesHeight(handle,line + handle->pBrwInfo->dwTopLine,
line + handle->pBrwInfo->dwTopLine);
height -= handle->pBrwInfo->wLineSpace;
//gain = (height - wUnitHeight) / 2;
gain = height - wUnitHeight;
y += gain;
GraphDrawText(x0+x,y0+y,wUnitWidth,wUnitHeight,pString);
wUnitHeight = height;
/*制造特殊效果*/
/*虚下划线*/
if ((handle->pBrwInfo->wStates & BROWSER_STATE_DASHLINE))
{
UINT16 wPenStyle;
wPenStyle = GraphSetPenStyle(PS_DASH);
GraphDrawLine(x0+x,y0+y + wUnitHeight,
x0+x + wUnitWidth,y0+y + wUnitHeight);
GraphSetPenStyle(wPenStyle);
}
/*实下划线*/
if (handle->pBrwInfo->wStates & BROWSER_STATE_UNDERLINE)
{
UINT16 wPenStyle;
wPenStyle = GraphSetPenStyle(PS_SOLID);
GraphDrawLine(x0+x,y0+y + wUnitHeight,
x0+x + wUnitWidth,y0+y + wUnitHeight);
GraphDrawLine(x0+x,y0+y + wUnitHeight + 1,
x0+x + wUnitWidth,y0+y + wUnitHeight + 1);
GraphSetPenStyle(wPenStyle);
}
}
/************************************************************************/
/* 函数名称: BrowserDefaultRule */
/* 函数描述: 标记处理函数 */
/* 当前版本: 1.0 */
/* 作 者: gaolinhui */
/* 输入参数: */
/* pDview - 对象句柄 */
/* pString - 数据指针 */
/* 输出参数: */
/* NONE */
/* 返回值 : */
/* 内存长度 */
/* 更改记录: */
/* =====================================================================*/
/* 日期 人员 版本 描述 */
/* =====================================================================*/
/* 2006-3-1 gaolinhui 1.0 创建 */
/************************************************************************/
UINT BrowserDefaultRule(MBrowser *handle,UINT8 *pString,
UINT uOption,MUnitInfo *pUnit)
{
UINT8 ch,ch1;
ch = *pString;
ch1 = *(pString + 1);
if (handle->pBrwInfo->byExtraType != BROWSER_EXTRA_NOTHING)
{
UINT32 dwOffset;
dwOffset = pString - handle->pBrwInfo->pBuffer;
if ((dwOffset >= handle->pBrwInfo->dwExtraStart)
&& (dwOffset < handle->pBrwInfo->dwExtraEnd))
{
if (handle->pBrwInfo->byExtraType == BROWSER_EXTRA_BOLD)
{
handle->pBrwInfo->wStates |= BROWSER_STATE_BOLD;
}
else if (handle->pBrwInfo->byExtraType == BROWSER_EXTRA_ITALIC)
{
handle->pBrwInfo->wStates |= BROWSER_STATE_ITALIC;
}
}
else
{
handle->pBrwInfo->wStates &= ~BROWSER_STATE_BOLD;
handle->pBrwInfo->wStates &= ~BROWSER_STATE_ITALIC;
}
}
if (ch == BROWSER_CHAR_RETURN)
{
if (ch1 == BROWSER_CHAR_NEWLINE)
{
pUnit->uMemLen = 2;
}
else
{
pUnit->uMemLen = 1;
}
pUnit->uType = BROWSER_UNIT_CONTROL;
pUnit->mResource.uCtrlType = UNIT_CTRL_RETURN;
}
else if (ch == BROWSER_DATA_END)
{
pUnit->uType = BROWSER_UNIT_CONTROL;
pUnit->mResource.uCtrlType = UNIT_CTRL_END;
}
else if( ch < 0x20 )
{
pUnit->uType = BROWSER_UNIT_CONTROL;
pUnit->mResource.uCtrlType = UINT_CTRL_UNKNOWN;
pUnit->uMemLen = 1;
}
else
{
pUnit->uType = BROWSER_UNIT_STRING;
}
return pUnit->uType;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -