📄 browser.c
字号:
{
return FALSE;
}
pLineInfo->pLinePtr = ((BrowserNodeInfo*)(handle->pBrwInfo->pNodeInfo+dwLine))->pLinePtr;
pLineInfo->wStates = ((BrowserNodeInfo*)(handle->pBrwInfo->pNodeInfo+dwLine))->wStates;
if(dwLine >= handle->pBrwInfo->dwTotalLine )
pLineInfo->wFontMaxHi = 0;
else
pLineInfo->wFontMaxHi = FontGetHeight(handle->pBrwInfo->wFontID);
if(pLineInfo->wStates & BROWSER_STATE_DICTITEM)
pLineInfo->wFontMaxHi = BrowserItemHeigh(handle);
return TRUE;
#else
MBrowser *pBrowserer,bv;
BrowserNodeInfo* pNode;
MLineInfo tmplineinfo;
UINT16 wNode,wRemain,wi;
UINT16 wTotalCol,wCurCol,wMoveLen;
UINT8* pData;
UINT16 width,height,height0;
UINT16 wUnitWidth;
UINT8* pUnitBuff;
BOOL bFirstSpace,bFlag;
//清空
memset(pLineInfo, 0, sizeof(MLineInfo));
if(!handle->pBrwInfo)
return FALSE;
if(dwLine > handle->pBrwInfo->dwTotalLine)
{
return FALSE;
}
//申请内存
pUnitBuff = BROWSER_STACK_ALLOC(handle,BROWSER_UNIT_MAXLEN);
/*复制句柄数据*/
memcpy(&bv,handle,sizeof(MBrowser));
bv.pBrwInfo = BROWSER_STACK_ALLOC(handle,sizeof(MBrowserInfo));
memcpy(bv.pBrwInfo, handle->pBrwInfo, sizeof(MBrowserInfo));
pBrowserer = &bv;
//计算开始的节点
wNode = dwLine/BROWSER_NODE_LEN;
wRemain = dwLine%BROWSER_NODE_LEN;
pNode = pBrowserer->pBrwInfo->pNodeInfo+wNode;
//初始化起始行的行信息结构
pBrowserer->pBrwInfo->wStates = pNode->wStates;
wCurCol = pBrowserer->pBrwInfo->wStartCol; /*当前列*/
wTotalCol = pBrowserer->pBrwInfo->wTotalCol; /*总列数*/
pData = pNode->pLinePtr;
//初始化临时行信息
FontGetStringRect(&width,&height0, " ");
tmplineinfo.pLinePtr = pNode->pLinePtr;
tmplineinfo.wStates = pNode->wStates;
tmplineinfo.wFontMaxHi = height0;
bFlag = TRUE;
//查找指定行,返回行信息
for(wi=0; wi<=wRemain; )
{
if((wi== wRemain) && bFlag ) //只在行首拷贝一次.
{
//找到指定的行将行首信息赋值给返回变量
memcpy(pLineInfo, &tmplineinfo, sizeof(MLineInfo));
bFlag = FALSE;
//再搜索一行是因为要找到该行的行高
}
/*得到一个unit,字符串保存在pUnitBuff中*/
wUnitWidth = BrowserGetOneUnit(pBrowserer, pData,
pUnitBuff, &wMoveLen,BROWSER_SCANNING);
/*需要换行*/
if (pBrowserer->pBrwInfo->wStates & BROWSER_STATE_RETURN)
{
if ((wCurCol != 0) && (wUnitWidth != (UINT16)-1))
{
wi ++;
wCurCol = 0;
/*记录行指针*/
tmplineinfo.pLinePtr = pData;
tmplineinfo.wStates =
pBrowserer->pBrwInfo->wStates & ~BROWSER_STATE_INITIAL;
tmplineinfo.wFontMaxHi = height0;
}
pBrowserer->pBrwInfo->wStates &= ~BROWSER_STATE_RETURN;
}
/*分段*/
if (pBrowserer->pBrwInfo->wStates & BROWSER_STATE_SEGMENT)
{
tmplineinfo.wFontMaxHi = height0 * 2;
tmplineinfo.wStates |= BROWSER_STATE_DICTITEM;
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)
{
wi ++;
wCurCol = 0;
/*拨动数据指针*/
pData += wMoveLen;
/*记录行指针*/
tmplineinfo.pLinePtr = pData;
tmplineinfo.wStates =
pBrowserer->pBrwInfo->wStates & ~BROWSER_STATE_INITIAL;
tmplineinfo.wFontMaxHi = height0;
}
else
{
/*拨动数据指针*/
pData += wMoveLen;
}
continue;
}
else if (wUnitWidth == 0) /*结束符*/
{
wi++;
wCurCol = 0;
tmplineinfo.pLinePtr = pData;
tmplineinfo.wStates = 0;
continue;
}
/* 单词显示长度大于行最大显示长度 */
else if (wUnitWidth > wTotalCol)
{
UINT8 *p,*ptr;
UINT range;
UINT32 dwLen,l,i;
UINT16 w,h;
/*如果不是行开始位置则另起一行*/
if (wCurCol != 0)
{
wi ++;
}
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);
/*记录行指针*/
if (i == 0)
{
tmplineinfo.pLinePtr = pData;
}
else
{
tmplineinfo.pLinePtr = pData + dwLen + l;
}
tmplineinfo.wStates =
pBrowserer->pBrwInfo->wStates & ~BROWSER_STATE_INITIAL;
tmplineinfo.wFontMaxHi = height;
if (*p)
{
wi ++;
}
i ++;
}
FontGetStringRect(&w,&h,ptr);
wCurCol = w;
pData += wMoveLen;
continue;
}
/*总长度超行,另起一行*/
else if ((wCurCol + wUnitWidth) > wTotalCol)
{
wCurCol = 0;
wi ++;
/*记录行指针*/
tmplineinfo.pLinePtr = pData;
tmplineinfo.wStates =
pBrowserer->pBrwInfo->wStates & ~BROWSER_STATE_INITIAL;
FontGetStringRect(&width,&height,pUnitBuff);
tmplineinfo.wFontMaxHi = (UINT16)height;
}
/*是不是行首空格*/
if ((wCurCol == 0 && *pUnitBuff == ' ')
&& (pBrowserer->pBrwInfo->wOptions & BROWSER_OPTION_ALIGNLEFT))
{
tmplineinfo.pLinePtr = pData + wMoveLen;
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);
//将行高输出
if(dwLine == pBrowserer->pBrwInfo->dwTotalLine)
{
pLineInfo->wFontMaxHi = 0;
}
else
{
pLineInfo->wFontMaxHi = tmplineinfo.wFontMaxHi;
}
return TRUE;
#endif
}
BOOL BrowserIsFinished(MBrowser *handle)
{
if(!handle->pBrwInfo)
return FALSE;
return handle->pBrwInfo->bFinished;
}
//返回浏览器初始化是否成功
BOOL BrowserIsInited(MBrowser *handle)
{
if(handle->wReserved != BROWSER_INIT_SUCCESS)
return FALSE;
else
return TRUE;
}
/************************************************************************/
/* 函数名称: BrowserSetTextFont */
/* 函数描述: 设置字体类型 */
/* 当前版本: 1.0 */
/* 作 者: Liang Ruhui */
/* 输入参数: */
/* handle - 对象句柄 */
/* font - 字体类型 */
/* 输出参数: */
/* NONE */
/* 返回值 : */
/* 设置成功或失败 */
/* 更改记录: */
/* =====================================================================*/
/* 日期 人员 版本 描述 */
/* =====================================================================*/
/* 2007-9-12 Liang Ruhui 1.0 创建 */
/************************************************************************/
BOOL BrowserSetTextFont(MBrowser *handle,UINT16 font)
{
UINT16 wBackfont;
UINT32 dwTotal;
MLineInfo lineinfo;
INT i;
BrowserNodeInfo *pNodeInfo;
if(!handle->pBrwInfo->bFinished){
return FALSE;
}
if(font == handle->wFontID){
return FALSE;
}
/*保护系统字体*/
wBackfont = GraphGetFontID();
/*设置新字体*/
if(font >= SYSTLIBTOTAL)
{
handle->wFontID = SYSTLIB;
}
else{
handle->wFontID = font;
}
handle->pBrwInfo->wFontID = handle->wFontID;
/*取得原起始行信息*/
if(!GetLineInfo(handle,handle->pBrwInfo->dwTopLine, &lineinfo)){
return FALSE;
}
/*计算总行数*/
dwTotal = BrowserCalcTotalLine((MBrowser *)handle, (UINT16)(BROWSER_STATE_INITIAL) );
/*设置总行数*/
handle->pBrwInfo->dwTotalLine = dwTotal;
/*设置新起始行*/
pNodeInfo = handle->pBrwInfo->pNodeInfo;
i = 0;
while((pNodeInfo[i].pLinePtr < lineinfo.pLinePtr) &&
(i <= BROWSER_MAX_LINENUM))
{
i++;
}
handle->pBrwInfo->dwTopLine = i;
/*设置状态*/
GetLineInfo(handle,handle->pBrwInfo->dwTopLine, &lineinfo);
handle->pBrwInfo->wStates = lineinfo.wStates;
/*初始化其它信息*/
handle->pBrwInfo->wStartCol = 0;
handle->pBrwInfo->pMarkCur = NULL;
handle->pBrwInfo->pMarkStart = NULL;
handle->pBrwInfo->pMarkEnd = NULL;
/*恢复系统字体*/
GraphSetFontID(wBackfont);
return TRUE;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -