📄 brw_handler.c
字号:
/**************************************************************************
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 + -