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

📄 brw_disp.c

📁 好记星的控件,包括button,list,对文件操作
💻 C
📖 第 1 页 / 共 2 页
字号:
/**************************************************************************
                                                                          
              Copyright (C) 2005 SHENZHEN MEIJIN CO.LTD                   
                                                                          
 FILE NAME:   brw_disp.C                                                      
 MODULE NAME: browser                                                        
 DESCRIPTION: 提供了浏览器对显示的函数
 对外函数声明:
	BrowserDrawPage		显示一页数据
	BrowserDrawOneLine	显示一行的数据
	BrowserMarkPage		显示Mark
	BrowserDrawUnderLine	画下划线


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

/************************************************************************/
/* 函数名称: BrowserDrawPage                                            */
/* 函数描述: 显示一屏		                                            */
/* 当前版本: 1.0                                                        */
/* 作    者: gaolinhui                                                  */
/* 输入参数:                                                            */
/*			handle			- 对象句柄									*/
/* 输出参数:                                                            */
/*          NONE					                                    */
/* 返回值  :                                                            */
/*          NONE	                                                    */
/* 更改记录:                                                            */
/* =====================================================================*/
/*    日期       人员       版本   描述                                 */
/* =====================================================================*/
/* 2006-3-1    gaolinhui      1.0    创建	                            */
/************************************************************************/
VOID BrowserDrawPage(MBrowser *handle)
{
	UINT32 lineNum,i;
	UINT16 wStateBack;
	UINT16 font,wBackFont;

	if (handle->pBrwInfo->pBuffer == NULL)
	{
		return;
	}
	font = handle->pBrwInfo->wFontID;
	wBackFont = GraphGetFontID();
	GraphDisableRefresh();
	/*清除所占区域*/
	GraphClearRect(handle->pBrwInfo->nX,handle->pBrwInfo->nY,
				handle->pBrwInfo->nX+handle->pBrwInfo->wWidth -  1,
				handle->pBrwInfo->nY+handle->pBrwInfo->wHeight - 1);
	/*一屏总行数*/
	lineNum = BrowserPageLineSum(handle,handle->pBrwInfo->dwTopLine);
	//先保存当前的状态
	wStateBack = handle->pBrwInfo->wStates;
/*****************gaolinhui,added, 06-6-3*********************/
	if(1)	//每次Draw前,先将浏览器状态调整到当前顶行的状态
	{
		MLineInfo lineinfo;
		if(GetLineInfo(handle,handle->pBrwInfo->dwTopLine, &lineinfo))
		{
			handle->pBrwInfo->wStates = lineinfo.wStates;
		}
	}
/************************************************************/
	for (i = 0;i < lineNum;i ++)
	{
		BrowserDrawOneLine(handle,(i + handle->pBrwInfo->dwTopLine));
	}

	//恢复当前的状态
	handle->pBrwInfo->wStates = wStateBack;

	if (handle->pBrwInfo->wStates & BROWSER_STATE_MARKING)
	{
		BrowserMarkPage(handle);
	}
	GraphEnableRefresh();
	handle->pBrwInfo->wStates &= ~BROWSER_STATE_NODRAW;
	handle->pBrwInfo->wFontID = font;
	GraphSetFontID(wBackFont);
	ClrFontInvertStyle();
	return;
}


/************************************************************************/
/* 函数名称: BrowserDrawOneLine                                           */
/* 函数描述: 显示一行数据		                                        */
/* 当前版本: 1.0                                                        */
/* 作    者: gaolinhui                                                      */
/* 输入参数:                                                            */
/*			handle			- 对象句柄									*/
/*			line			- 行号										*/
/* 输出参数:                                                            */
/*          NONE					                                    */
/* 返回值  :                                                            */
/*          NONE	                                                    */
/* 更改记录:                                                            */
/* =====================================================================*/
/*    日期       人员       版本   描述                                 */
/* =====================================================================*/
/* 2006-3-1    gaolinhui      1.0    创建	                                */
/************************************************************************/
VOID BrowserDrawOneLine(MBrowser *handle,UINT32 line)
{
	UINT8 *pData;
	UINT16 moveLen,height;
	UINT16 wUnitWidth,wTotalCol,wCurCol;
	UINT32 dwCurLine;
	UINT8* pUnitBuff;
	UINT16 memLen,markLen;
	MLineInfo LineInfo;
	UINT16 x,y;
	UINT16 x0,y0;
	UINT16 wState0,wColStart,wTempState;
	UINT32 dwLineStart;
	UINT8  *pString,*pNext;

	//申请内存
	pUnitBuff = BROWSER_STACK_ALLOC(handle,BROWSER_UNIT_MAXLEN);
	pString = BROWSER_STACK_ALLOC(handle,100);
	/*起始坐标*/
	x0 = handle->pBrwInfo->nX;
	y0 = handle->pBrwInfo->nY;
	/*行高*/
	height = BrowserLinesHeight(handle,line,line);
	/*当前行*/
	dwCurLine = line - handle->pBrwInfo->dwTopLine;
	/*当前列*/
	wCurCol = 0;
	/*总列数*/
	wTotalCol = handle->pBrwInfo->wTotalCol;
	/*行数据指针*/
	/*顶行指针*/
	GetLineInfo(handle, line, &LineInfo);
	pData = LineInfo.pLinePtr;
	/*下一行指针*/
	GetLineInfo(handle, line+1, &LineInfo);
	pNext = LineInfo.pLinePtr;
	/*设置起始字体*/
	BrowserSetPositionFont(handle,pData);
	/*清除所占区域*/
	BrowserLineColToXY(handle,dwCurLine,0,&x,&y);
	GraphClearRect(x0+0,y0+y,x0+handle->pBrwInfo->wWidth - 1,
		y0+y+ height - 1);
	/*开始显示,以unit为单位*/
	wState0 = handle->pBrwInfo->wStates;
	dwLineStart = dwCurLine;
	wColStart = 0;
	memset(pString,0,100);
	while (1)	
	{
		if (pNext && (pData >= pNext))
		{
			break;
		}
		/*得到一个unit*/
		wUnitWidth = BrowserGetOneUnit(handle,pData,
			pUnitBuff,&moveLen,BROWSER_DRAWING);
		/*需要换行*/
		if (handle->pBrwInfo->wStates & BROWSER_STATE_RETURN)
		{
			if (wCurCol != 0)
			{
				break;
			}
			handle->pBrwInfo->wStates &= ~BROWSER_STATE_RETURN;
		}
		/*换行符*/
		if (wUnitWidth == BROWSER_RESULT_RETURN)
		{
			/*另起一行*/
			if (wCurCol != 0)
			{
				break;
			}
			pData += moveLen;
			continue;
		}
		/*数据结束符*/
		else if (wUnitWidth == 0 )
		{
			/*返回*/
			break;
		}
		/* 单词显示长度大于行最大显示长度 */
		else if (wUnitWidth > wTotalCol)
		{
			UINT8 *p,*ptr;
			UINT range;
			UINT8 temp;

			/*是否为新行*/
			if (wCurCol != 0)
			{
				break;
			}
			/*标记符号长度*/
			markLen = moveLen - (UINT16)strlen(pUnitBuff);
			memLen = 0;
			ptr = pUnitBuff + memLen;
			/*计算一行可显示内容*/
			range = wTotalCol;
			p = BrwWidthCutStr(ptr,FontGetLib(),
				0, &range);
			/*显示字串内存长度*/
			memLen = p - pUnitBuff;
			if (pNext)
			{
				if ((pNext - pData) < memLen)
				{
					memLen = (pNext - pData);
				}
			}
			/*截断字符串*/
			temp = pUnitBuff[memLen];
			pUnitBuff[memLen] = 0;
			/*显示*/
			BrowserDrawOneUnit(handle,pUnitBuff,dwCurLine,
				wCurCol);
			/*恢复字符串*/
			pUnitBuff[memLen] = temp;
			break;
		}
		else if ((wCurCol + wUnitWidth) > wTotalCol)
		{
			break;
		}
		/*居中显示*/
		if (handle->pBrwInfo->wStates & BROWSER_STATE_CENTER)
		{
			UINT16 co;

			/*起始位置*/
			co = BrowserCenterStart(handle,pData,wCurCol,wTotalCol);
			if (co != 0)
			{
				wCurCol += co;
				handle->pBrwInfo->wStates &= ~BROWSER_STATE_CENTER;
				wColStart = wCurCol;
			}
		}
		/*缩进*/
		if (handle->pBrwInfo->wStates & BROWSER_STATE_TAB)
		{
			if (wCurCol == 0)
			{
				if (handle->pBrwInfo->byTabGrade == 0)
				{
					wCurCol = BROWSER_TAB_LENGTH;
					handle->pBrwInfo->byTabGrade = 1;
				}
				else
				{
					wCurCol = handle->pBrwInfo->wTabWidth;
				}
				wColStart = wCurCol;
			}
		}
		/*显示当前unit*/
		if (wState0 == handle->pBrwInfo->wStates)
		{
			strcat(pString,pUnitBuff);
		}
		else
		{
			if (strlen(pString) != 0)
			{
				wTempState = handle->pBrwInfo->wStates;
				handle->pBrwInfo->wStates = wState0;
				BrowserDrawOneUnit(handle,pString,dwLineStart,wColStart);
				handle->pBrwInfo->wStates = wTempState;
				BrowserSetFontID(handle);
			}
			wColStart = wCurCol;
			dwLineStart = dwCurLine;
			wState0 = handle->pBrwInfo->wStates;

⌨️ 快捷键说明

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