📄 brw_handler.c
字号:
}
//保存申请的内存地址
handle->pBrwInfo->pAllocBuf = pMemBuf;
//分配内存
//handle->pBrwInfo->pLineInfo = (MLineInfo*)p;
//p += sizeof(MLineInfo)*(BROWSER_MAX_LINENUM + 1);
handle->pBrwInfo->pNodeInfo = (BrowserNodeInfo*)p;
p += sizeof(BrowserNodeInfo)*(BROWSER_MAX_NODES+1);
//初始化堆栈.
handle->pBrwInfo->mBrowserStack.pStackBuf = p;
handle->pBrwInfo->mBrowserStack.uStackSize = BROWSER_STACK_SIZE;
handle->pBrwInfo->mBrowserStack.uStackPointer = 0;
//控件内部初始化
/*取字体*/
//============================================
//Modified by Liang Ruhui on 2007-9-12
if(handle->wFontID >= SYSTLIBTOTAL)
{
handle->wFontID = SYSTLIB;
//wFontID = SYSTLIB;
}
// else
// {
// wFontID = handle->wFontID;
// }
wFontID = handle->wFontID;
//============================================
/*行高*/
wLineHeight = FontGetHeight(wFontID) + handle->wLineSpace;
/*列宽*/
wColWidth = 1;
/*最大列数*/
wTotalCol = handle->uWidth / wColWidth;
/*一页可显示的行数*/
wPageLine = handle->uHeight / wLineHeight;
/*设置单元处理函数*/
if(handle->pfnRuleProcess == NULL)
{
handle->pBrwInfo->fpProcessRule = BrowserDefaultRule;
}
else
{
handle->pBrwInfo->fpProcessRule = handle->pfnRuleProcess;
}
/*初始化*/
handle->pBrwInfo->nX = handle->uX;
handle->pBrwInfo->nY = handle->uY;
handle->pBrwInfo->wWidth = handle->uWidth;
handle->pBrwInfo->wHeight = handle->uHeight;
handle->pBrwInfo->wStates = 0;
handle->pBrwInfo->wOptions = handle->wOption;
handle->pBrwInfo->pBuffer = NULL;
handle->pBrwInfo->dwTotalLine = 0;
handle->pBrwInfo->dwTopLine = 0;
handle->pBrwInfo->wStartCol = 0;
handle->pBrwInfo->wColWidth = wColWidth;
handle->pBrwInfo->wLineHeight = wLineHeight;
handle->pBrwInfo->wTotalCol = wTotalCol;
handle->pBrwInfo->wLineSpace = handle->wLineSpace;
handle->pBrwInfo->wPageLine = wPageLine;
handle->pBrwInfo->pMarkStart = NULL;
handle->pBrwInfo->pMarkEnd = NULL;
handle->pBrwInfo->pMarkCur = NULL;
handle->pBrwInfo->wFontID = wFontID;
handle->pBrwInfo->byTabGrade = 0;
handle->pBrwInfo->byExtraType = BROWSER_EXTRA_NOTHING;
handle->pBrwInfo->dwExtraStart = 0;
handle->pBrwInfo->dwExtraEnd = 0;
handle->pBrwInfo->bFinished = FALSE;
return 0;
}
/************************************************************************/
/* 函数名称: BrowserSearchStart */
/* 函数描述: 创建浏览器 */
/* 当前版本: 1.0 */
/* 作 者: gaolinhui */
/* 输入参数: */
/* handle - 浏览器句柄 */
/* pString - 查找的起始指针 */
/* uStrlen - 数据长度 */
/* pState - 起始的状态 */
/* 输出: */
/* pState - 返回找到的行首的状态 */
/* 返回值: */
/* 起始点的指针 */
/* 如果是NULL,说明查找失败 */
/* 更改记录: */
/* =====================================================================*/
/* 日期 人员 版本 描述 */
/* =====================================================================*/
/* 2006-4-3 gaolinhui 1.0 创建 */
/************************************************************************/
UINT8* BrowserSearchStart(MBrowser* handle, UINT8* pString, UINT uStrlen, UINT16* pState)
{
UINT8* pUnitBuff, *pRet, *pData;
MBrowser dv, *pBrowserer;
UINT16 wMoveLen, wUnitWidth, wCurCol,wTotalCol;
UINT16 width, height;
UINT uCount;
BOOL bFirstSpace;
if(handle->wReserved != BROWSER_INIT_SUCCESS)
{
return (UINT8*)NULL;
}
//申请内存
pUnitBuff = BROWSER_STACK_ALLOC(handle,BROWSER_UNIT_MAXLEN);
/*复制句柄数据*/
memcpy(&dv,handle,sizeof(MBrowser));
dv.pBrwInfo = BROWSER_STACK_ALLOC(handle,sizeof(MBrowserInfo));
memcpy(dv.pBrwInfo, handle->pBrwInfo, sizeof(MBrowserInfo));
pBrowserer = &dv;
//初始化
pBrowserer->pBrwInfo->wStates = *pState;
wCurCol = pBrowserer->pBrwInfo->wStartCol; /*当前列*/
wTotalCol = pBrowserer->pBrwInfo->wTotalCol; /*总列数*/
pData = pString;
pRet = NULL;
uCount = 0;
while( pData < (pString+uStrlen))
{
wUnitWidth = BrowserGetOneUnit(pBrowserer, pData, pUnitBuff, &wMoveLen, BROWSER_SCANNING);
/*需要换行*/
if (pBrowserer->pBrwInfo->wStates & BROWSER_STATE_RETURN)
{
if ((wCurCol != 0) && (wUnitWidth != (UINT16)-1))
{
wCurCol = 0;
}
pBrowserer->pBrwInfo->wStates &= ~BROWSER_STATE_RETURN;
}
/*分段*/
if (pBrowserer->pBrwInfo->wStates & BROWSER_STATE_SEGMENT)
{
pBrowserer->pBrwInfo->wStates &= ~BROWSER_STATE_SEGMENT;
}
/*居中显示*/
if (pBrowserer->pBrwInfo->wStates & BROWSER_STATE_CENTER)
{
UINT16 co;
/*起始位置*/
co = BrowserCenterStart(pBrowserer,pData,wCurCol,wTotalCol);
if (co != 0)
{
wCurCol += co;
pBrowserer->pBrwInfo->wStates &= ~BROWSER_STATE_CENTER;
}
}
if (wUnitWidth == (UINT16)-1) /*换行*/
{
/*另起一行*/
if (wCurCol != 0)
{
wCurCol = 0;
}
/*拨动数据指针*/ //找到了,返回
pData += wMoveLen;
pRet = pData;
*pState = pBrowserer->pBrwInfo->wStates;
break;
}
else if (wUnitWidth == 0) /*结束符*/
{
pRet = NULL;
break;
}
/* 单词显示长度大于行最大显示长度 */
else if (wUnitWidth > wTotalCol)
{
UINT8 *p,*ptr;
UINT range;
UINT32 dwLen,l,i;
UINT16 w,h;
/*如果不是行开始位置则另起一行*/
wCurCol = 0;
/*标记符长度*/
l = (UINT32)wMoveLen - strlen(pUnitBuff);
p = pUnitBuff;
i = 0;
FontGetStringRect(&width,&height," ");
while (*p)
{
/*数据长度*/
dwLen = p - pUnitBuff;
ptr = pUnitBuff + dwLen;
/*计算一行最多显示的字符串指针位置*/
range = wTotalCol;
p = BrwWidthCutStr(ptr,FontGetLib(),0,&range);
}
FontGetStringRect(&w,&h,ptr);
wCurCol = w;
pData += wMoveLen;
continue;
}
/*总长度超行,另起一行*/
else if ((wCurCol + wUnitWidth) > wTotalCol)
{
wCurCol = 0;
}
/*是不是行首空格*/
if ((wCurCol == 0 && *pUnitBuff == ' ')
&& (pBrowserer->pBrwInfo->wOptions & BROWSER_OPTION_ALIGNLEFT))
{
bFirstSpace = TRUE;
}
else
{
bFirstSpace = FALSE;
}
if (!bFirstSpace)
{
/*缩进*/
if (pBrowserer->pBrwInfo->wStates & BROWSER_STATE_TAB)
{
if (wCurCol == 0)
{
if (pBrowserer->pBrwInfo->byTabGrade == 0)
{
wCurCol = BROWSER_TAB_LENGTH;
pBrowserer->pBrwInfo->byTabGrade = 1;
}
else
{
wCurCol = pBrowserer->pBrwInfo->wTabWidth;
}
}
}
/*累加列宽*/
wCurCol += wUnitWidth;
}
/*拨动指针*/
pData += wMoveLen;
}
BROWSER_STACK_FREE(handle, sizeof(MBrowserInfo));
BROWSER_STACK_FREE(handle, BROWSER_UNIT_MAXLEN);
return pRet;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -