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

📄 brw_handler.c

📁 好记星的控件,包括button,list,对文件操作
💻 C
📖 第 1 页 / 共 2 页
字号:
/**************************************************************************
                                                                          
              Copyright (C) 2005 SHENZHEN MEIJIN CO.LTD                   
                                                                          
 FILE NAME:   brw_handler.C                                                      
 MODULE NAME: browser                                                        
 DESCRIPTION: 浏览器消息处理函数
 对外函数声明:
	BrowserHandleEvent	消息处理行数

		
**************************************************************************
    DTAE       AUTHOR     VERSION                 REMARKS                 
 =========== ==========  =========  ======================================
 2006-3-5    gaolinhui    V1.0					create                               
***************************************************************************/
#include "kernel.h"
#include "BrowserIn.h" 
 
INT __BrowserInit(MBrowser *handle);
/************************************************************************/
/* 函数名称: BrowserHandleEvent                                         */
/* 函数描述: 浏览器消息处理器                                           */
/* 当前版本: 1.0                                                        */
/* 作    者: gaolinhui                                                  */
/* 输入参数:                                                            */
/*			handle			- 对象句柄									*/
/*			uEvent			- 消息类型									*/
/*			uParam			- 消息参数									*/
/* 输出参数:                                                            */
/*          NONE                                                        */
/* 返回值  :                                                            */
/*          消息返回值                                                  */
/* 更改记录:                                                            */
/* =====================================================================*/
/*    日期       人员       版本   描述                                 */
/* =====================================================================*/
/* 2006-2-26    gaolinhui      1.0    创建	                            */
/************************************************************************/
VOID ClrFontInvertStyle(VOID);
INT BrowserHandleEvent(MBrowser *handle,UINT uEvent, UINT uParam)
{
	UINT32		dwTopLine;
	UINT16		wPageLine;
	BOOL		bInited;
	INT			nRet = 0;
	

	//初始化状态
	bInited = (handle->wReserved == BROWSER_INIT_SUCCESS);
	switch (uEvent)
	{
		case EVENT_INITIALIZE:
			handle->wReserved = 0;
			if(__BrowserInit(handle) == 0)
			{
				//记录初始化成功
				handle->wReserved = BROWSER_INIT_SUCCESS;
			}
			if(handle->wReserved != BROWSER_INIT_SUCCESS)
				MsgSend2(GetApHandle(), EVENT_COMMAND, CM_BROWSER_FAIL);
			nRet = 1;
			break;
		case EVENT_DESTROY:
			if(handle->pBrwInfo)
			{
				#ifdef __DEBUG__
					nRet = handle->pBrwInfo->mBrowserStack.uStackPointer;
					if(nRet != 0)
					{
						//HW_Error("stack is erro!");
					}
				#endif
				//MemFree();
				if( handle->pBrwInfo->pAllocBuf )
				{
					MemFree(handle->pBrwInfo->pAllocBuf);
					handle->pBrwInfo->pAllocBuf = NULL;
				}
				nRet = 1;
//============================================
//Modified by Liang Ruhui on 2007-9-11
//				GraphSetFontID(handle->wFontID);
//============================================
				ClrFontInvertStyle();
			}
			break;

        case EVENT_COMMAND:
			{
				MLineInfo LineInfo;
				UINT8* pCurrent;
				if(uParam == CM_BROWSER_MARKSTART)
				{
					/*得到顶行数据指针*/
					GetLineInfo(handle, handle->pBrwInfo->dwTopLine, &LineInfo);
					pCurrent = LineInfo.pLinePtr;
					/*得到MARK块位置*/
					pCurrent = BrowserLocateMarkPosition(handle,
                                    pCurrent,BROWSER_GO_FORWARD);
					if (pCurrent != (UINT8*)NULL)
					{
						/*开始MARK*/
            			handle->pBrwInfo->wStates |= BROWSER_STATE_MARKING;
            			handle->pBrwInfo->pMarkStart = pCurrent;
						handle->pBrwInfo->pMarkCur = pCurrent;
            			handle->pBrwInfo->pMarkEnd = pCurrent 
							+ BrowserMarkWordMemLen(pCurrent);
						/*重画*/
						MsgPost(NULL,EVENT_DRAW,0);
						nRet = 1;
					}

				}
				else if(uParam == CM_BROWSER_MARKEND)
				{
					UINT32 line;
					UINT16 h,col;

					/*得到数据指针*/
					h = BrowserPageLineSum(handle,handle->pBrwInfo->dwTopLine);
					line = handle->pBrwInfo->dwTopLine + h - 1;
					col = handle->pBrwInfo->wTotalCol;
					pCurrent = BrowserLineColToPos(handle,line,col);
					/*得到MARK块位置*/
					pCurrent = BrowserLocateMarkPosition(handle,
						pCurrent,BROWSER_GO_BACKWARD);
					if (pCurrent != (UINT8*)NULL)
					{
						/*开始MARK*/
						handle->pBrwInfo->wStates |= BROWSER_STATE_MARKING;
						handle->pBrwInfo->pMarkStart = pCurrent;
						handle->pBrwInfo->pMarkCur = pCurrent;
						handle->pBrwInfo->pMarkEnd = pCurrent 
							+ BrowserMarkWordMemLen(pCurrent);
						/*重画*/
						MsgPost(NULL,EVENT_DRAW,0);
						nRet = 1;
					}
				}
				else if(uParam == CM_BROWSER_CANCELMARK)
				{
					handle->pBrwInfo->wStates &= ~BROWSER_STATE_MARKING;
					MsgPost(NULL,EVENT_DRAW,0);
					nRet = 1;
				}
				else if(uParam == CM_BROWSER_UPDT_PAGELINES)
				{
					dwTopLine = handle->pBrwInfo->dwTopLine;
					wPageLine = BrowserPageLineSum(handle,dwTopLine);
					handle->pBrwInfo->wPageLine = wPageLine;
					nRet = 1;
				}
				else if(uParam == CM_BROWSER_RECALC)
				{
				    UINT16 wState;
				    //先保存当前的状态
				    wState = handle->pBrwInfo->wStates;
					handle->pBrwInfo->dwTotalLine = 
						BrowserCalcTotalLine(handle, BROWSER_STATE_NULL);
					//恢复之前的状态
					handle->pBrwInfo->wStates = wState;
					nRet = 1;
				}
			}
            break;
		

			
#ifdef __VER_PENABLE__
        case EVENT_PENDOWN:
		case EVENT_PENMOVE:
		case EVENT_PENUP:
			if(bInited)
			{
				nRet = BrowserMarkPenProcess(handle,uEvent,uParam);
			}
            break;
#endif
		case EVENT_KEY:
		case EVENT_KEYREPEAT:
			if(bInited)
			{
				nRet = BrowserKeyProcess(handle, uEvent, uParam);
			}
			break;		
		case EVENT_DRAW:
			if(bInited)
			{
				//更新页内行数
				MsgSend2((APGUI_STRUCT_MODEL *)handle, EVENT_COMMAND, CM_BROWSER_UPDT_PAGELINES);
				BrowserDrawPage(handle);
				nRet = 1;
			}
			break;
		default:
			break;
	}
	return nRet;
}



/************************************************************************/
/* 函数名称: BrowsererCreate                                            */
/* 函数描述: 创建浏览器		                                            */
/* 当前版本: 1.0                                                        */
/* 作    者: gaolinhui                                                      */
/* 输入参数:                                                            */
/*			pOwner			- 父视图句柄								*/
/*			handle			- 对象句柄									*/
/*			wObjectID		- 对象ID									*/
/*			pRect			- 对象区域									*/
/*			wFontID			- 字体类型									*/
/*			wOptions		- 选项										*/
/*			wLineSpace		- 行间距									*/
/* 输出参数:                                                            */
/*          handle                                                      */
/* 返回值  :                                                            */
/*          对象句柄                                                    */
/* 更改记录:                                                            */
/* =====================================================================*/
/*    日期       人员       版本   描述                                 */
/* =====================================================================*/
/* 2006-3-1    gaolinhui      1.0    创建                                 */
/************************************************************************/
INT __BrowserInit(MBrowser *handle)
{
	UINT16		wLineHeight,wColWidth,wTotalCol,wPageLine;
	UINT16      wFontID;
	UINT8		*p, *pMemBuf;
	UINT		uMemLen;

	/*申请行指针数组所需内存*/
	uMemLen = 0;
	if(!handle->pBrwInfo)
	{
		uMemLen += sizeof(MBrowserInfo);	//申请浏览器内部的信息结构
	}
	//uMemLen += sizeof(MLineInfo)*(BROWSER_MAX_LINENUM + 1);	//申请行信息表内存
	uMemLen += sizeof(BrowserNodeInfo)*(BROWSER_MAX_NODES+1);	//申请节点信息内存
	uMemLen += BROWSER_STACK_SIZE;		//申请浏览器内部堆栈内存,为解决频繁申请内存导致的碎片
	pMemBuf = MemAlloc(uMemLen);
	if( pMemBuf == NULL )
	{
		//浏览器初始化失败,设置失败状态返回.
		return -1;
		
	}
	p = pMemBuf;
	//清空申请内存
	memset(p, 0, uMemLen);
	//分配内存
	if(!handle->pBrwInfo)
	{
		handle->pBrwInfo = (struct tagMBrowserInfo* )p;
		p += sizeof(MBrowserInfo);

⌨️ 快捷键说明

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