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

📄 browser.c

📁 好记星的控件,包括button,list,对文件操作
💻 C
📖 第 1 页 / 共 3 页
字号:
/**************************************************************************
                                                                          
              Copyright (C) 2005 SHENZHEN MEIJIN CO.LTD                   
                                                                          
 FILE NAME:   Browser.C                                                      
 MODULE NAME: browser                                                        
 DESCRIPTION: 提供了浏览器对外接口的函数
 对外函数声明:
	BrowserGetTopLine		得到顶行
	BrowserSetTopLine		设置顶行
	BrowserGetTotalLine		取得总行数
	BrowserLoadData			加载数据
	BrowserSetExtra			设置特殊字符
	BrowserCalcLineCol		计算总行列
	BrowserFilter			过滤器
	BrowserGetMarkData		获取mark数据
	BrowserGetMarkLength	获取mark数据长度
	BrowserSetMark			设置mark
	BrowserIsFinished		数据加载是否完成
	BrowserSetTextFont		设置字体
		
**************************************************************************
    DTAE       AUTHOR     VERSION                 REMARKS                 
 =========== ==========  =========  ======================================
 2006-3-5    gaolinhui    V1.0					create                               
***************************************************************************/

#include "kernel.h"
#include "BrowserIn.h"




/************************************************************************/
/* 函数名称: BrowserGetTopLine	                                        */
/* 函数描述: 得到浏览器顶行	                                            */
/* =====================================================================*/
/*    日期       人员       版本   描述                                 */
/* =====================================================================*/
/* 2006-3-1    gaolinhui      1.0    创建	                            */
/************************************************************************/
UINT32 BrowserGetTopLine(MBrowser *handle)
{
	if(handle->wReserved != BROWSER_INIT_SUCCESS)
		return 0;
	return (INT)handle->pBrwInfo->dwTopLine;
}


/************************************************************************/
/* 函数名称: BrowserSetTopLine	                                        */
/* 函数描述: 设置浏览器顶行	                                            */
/* =====================================================================*/
/*    日期       人员       版本   描述                                 */
/* =====================================================================*/
/* 2006-3-1    gaolinhui      1.0    创建	                             */
/************************************************************************/
BOOL BrowserSetTopLine(MBrowser *handle, UINT32 dwTopLine)
{
	if(handle->wReserved != BROWSER_INIT_SUCCESS)
		return FALSE;
	
	return __BrowserSetTopLine(handle,dwTopLine,FALSE);
}


/************************************************************************/
/* 函数名称: BrowserGetTotalLine                                        */
/* 函数描述: 得到总行数	                                                */
/* 当前版本: 1.0                                                        */
/* 作    者: gaolinhui                                                  */
/* 输入参数:                                                            */
/*			handle			- 对象句柄									*/
/* 输出参数:                                                            */
/*          NONE                                                        */
/* 返回值  :                                                            */
/*          总行数	                                                    */
/* 更改记录:                                                            */
/* =====================================================================*/
/*    日期       人员       版本   描述                                 */
/* =====================================================================*/
/* 2006-3-1    gaolinhui      1.0    创建	                             */
/************************************************************************/
UINT32 BrowserGetTotalLine(MBrowser *pBrowserer)
{
	if(pBrowserer->wReserved != BROWSER_INIT_SUCCESS)
		return 0;
	return (INT)pBrowserer->pBrwInfo->dwTotalLine;
}



/************************************************************************/
/* 函数名称: BrowsererLoadData                                            */
/* 函数描述: 浏览器装入数据                                             */
/* 当前版本: 1.0                                                        */
/* 作    者: gaolinhui                                                      */
/* 输入参数:                                                            */
/*			handle			- 对象句柄									*/
/*			pDataBuf		- 数据指针									*/
/*			wStartCol		- 起始列									*/
/* 输出参数:                                                            */
/*          NONE                                                        */
/* 返回值  :                                                            */
/*          TRUE/FALSE                                                  */
/* 更改记录:                                                            */
/* =====================================================================*/
/*    日期       人员       版本   描述                                 */
/* =====================================================================*/
/* 2006-3-1    gaolinhui      1.0    创建	                                */
/************************************************************************/
BOOL BrowserLoadData(MBrowser *handle, UINT8 *pDataBuf, UINT16 wState, UINT16 wStartCol)
{
	UINT32 dwTotal;
	UINT16	font;

	if(handle->wReserved != BROWSER_INIT_SUCCESS)
		return FALSE;

//================================
//Modified by Liang Ruhui on 2007-9-11
//保护系统字体
	font = GraphGetFontID();
//	font = handle->pBrwInfo->wFontID;
//================================
	/*设置相关成员*/
	handle->pBrwInfo->pBuffer = pDataBuf;
	handle->pBrwInfo->dwTopLine = 0;			/*默认起始行0*/
	if (wStartCol >= handle->pBrwInfo->wTotalCol)
	{
		wStartCol = 0;
	}
	handle->pBrwInfo->wStartCol = wStartCol;
	handle->pBrwInfo->wTabWidth = BrowserTabWidth(handle);
	/*计算总行数*/
	dwTotal = BrowserCalcTotalLine((MBrowser *)handle, (UINT16)(wState|BROWSER_STATE_INITIAL) );
	/*设置总行数*/
	handle->pBrwInfo->dwTotalLine = dwTotal;
	/*设置状态*/
	handle->pBrwInfo->wStates = wState;
	handle->pBrwInfo->byTabGrade = 0;
	handle->pBrwInfo->pMarkCur = NULL;
	handle->pBrwInfo->pMarkStart = NULL;
	handle->pBrwInfo->pMarkEnd = NULL;
//	handle->pBrwInfo->wFontID = font;
	GraphSetFontID(font);
	ClrFontInvertStyle();
	return TRUE;
}



/************************************************************************/
/* 函数名称: BrowserCalcLineCol                                           */
/* 函数描述: 计算行列数		                                            */
/* 当前版本: 1.0                                                        */
/* 作    者: gaolinhui                                                      */
/* 输入参数:                                                            */
/*			handle			- 对象句柄									*/
/*			pData			- 数据指针									*/
/*          line,col		- 行列	                                    */
/* 输出参数:                                                            */
/*          line,col		- 行列	                                    */
/* 返回值  :                                                            */
/*          行数	                                                    */
/* 更改记录:                                                            */
/* =====================================================================*/
/*    日期       人员       版本   描述                                 */
/* =====================================================================*/
/* 2006-3-1    gaolinhui      1.0    创建	                                */
/************************************************************************/
UINT32 BrowserCalcLineCol(MBrowser *handle,UINT8 *pData,
					 UINT32 *line,UINT16 *col)
{
	UINT32 dwCurLine;
	UINT16 wTotalCol,wCurCol,wMoveLen;
	UINT16 wUnitWidth,wBakCol;
	UINT8* pUnitBuff;
	MBrowser mBrowserer,*pBrowserer;
	UINT32 dwTotalLine;

	if(handle->wReserved != BROWSER_INIT_SUCCESS)
		return 0;
	pUnitBuff = BROWSER_STACK_ALLOC(handle,BROWSER_UNIT_MAXLEN);
    /*复制句柄数据*/
    memcpy(&mBrowserer,handle,sizeof(MBrowser));
	mBrowserer.pBrwInfo = BROWSER_STACK_ALLOC(handle,sizeof(MBrowserInfo));
	memcpy(mBrowserer.pBrwInfo, handle->pBrwInfo, sizeof(MBrowserInfo));

	/*设置工作指针*/
	pBrowserer = &mBrowserer;
	/*初始化*/
 	dwCurLine = (*line);	/*当前行*/
	wCurCol = (*col);		/*当前列*/
	if ((pBrowserer->pBrwInfo->wStates & BROWSER_STATE_TAB)
		&& (wCurCol != 0))
	{
		pBrowserer->pBrwInfo->byTabGrade = 1;
	}
	else
	{
		pBrowserer->pBrwInfo->byTabGrade = 0;
	}
	wTotalCol = pBrowserer->pBrwInfo->wTotalCol;	/*总列数*/
	/*开始遍历数据,累加行列数*/
	while (1)
	{
		/*得到一个unit,字符串保存在pUnitBuff中*/
		wUnitWidth = BrowserGetOneUnit(pBrowserer, pData, 
			pUnitBuff, &wMoveLen,BROWSER_SCANNING);
		/*需要换行*/
		if (pBrowserer->pBrwInfo->wStates & BROWSER_STATE_RETURN)
		{
			if (wCurCol != 0)
			{
				wBakCol = wCurCol;
				dwCurLine ++;
				wCurCol = 0;
			}
			pBrowserer->pBrwInfo->wStates &= ~BROWSER_STATE_RETURN;
		}
		/*居中显示*/
		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)	/*换行*/
		{
			UINT16 bak;

			bak = wCurCol;
			/*另起一行*/
			if (wCurCol != 0)
			{
				dwCurLine ++;
				wCurCol = 0;
			}
			/*拨动数据指针*/
			pData += wMoveLen;
			if (*pData != BROWSER_DATA_END)
			{
				if (pBrowserer->pBrwInfo->wOptions & BROWSER_OPTION_ALIGNLEFT)
				{
					/*去掉行首空格*/
					while (*pData == ' ')
					{
						pData ++;
						if (*pData == BROWSER_DATA_END)
						{
							if (dwCurLine) {
								dwCurLine --;
								wCurCol = bak;
							}
							break;
						}
					}
				}
			}
			else
			{
				if (dwCurLine) {
					dwCurLine --;
					wCurCol = bak;
				}
				break;
			}
			continue;
		}
		else if (wUnitWidth == 0)	/*结束符*/
		{
			break;
		}
		/* 单词显示长度大于行最大显示长度 */
		else if (wUnitWidth > wTotalCol)
		{
			UINT8 *p,*ptr;
			UINT range;
			UINT32 dwLen,l,i;
			UINT16 w,h;

			/*如果不是行开始位置则另起一行*/
			if (wCurCol != 0)
			{
				dwCurLine ++;
			}
			wBakCol = wCurCol;
			wCurCol = 0;
			/*标记符长度*/
			l = (UINT32)wMoveLen - strlen(pUnitBuff);
			p = pUnitBuff;
			i = 0;
			while (*p)
			{
				/*数据长度*/
				dwLen = p - pUnitBuff;
				ptr = pUnitBuff + dwLen;
				/*计算一行最多显示的字符串指针位置*/
				range = wTotalCol;
				p = BrwWidthCutStr(ptr,FontGetLib(),0,&range);
				if (*p)
				{
					dwCurLine ++;
				}
			}
			FontGetStringRect(&w,&h,ptr);
			wCurCol = w;
			pData += wMoveLen;
			continue;
		}
		/*总长度超行,另起一行*/
		else if ((wCurCol + wUnitWidth) > wTotalCol)
		{
			wBakCol = wCurCol;
			wCurCol = 0;
			dwCurLine ++;
		}
		if (*pData == ' ' && wCurCol == 0 
			&& (pBrowserer->pBrwInfo->wOptions & BROWSER_OPTION_ALIGNLEFT))
		{
			/*去掉行首空格*/
			while (*pData == ' ')
			{
				pData ++;
				if (*pData == BROWSER_DATA_END)
				{
					dwCurLine --;
					wCurCol = wBakCol;
					goto calcEnd;
				}
			}
			/*缩进*/
			if (pBrowserer->pBrwInfo->wStates & BROWSER_STATE_TAB)
			{
				if (pBrowserer->pBrwInfo->byTabGrade == 0)
				{
					wCurCol = BROWSER_TAB_LENGTH;
					pBrowserer->pBrwInfo->byTabGrade = 1;
				}
				else
				{
					wCurCol = pBrowserer->pBrwInfo->wTabWidth;
				}
			}
		}
		else

⌨️ 快捷键说明

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