browser.h
来自「好记星的控件,包括button,list,对文件操作」· C头文件 代码 · 共 307 行
H
307 行
/************************************************************************/
/* Copyright (c) 2003, 名人电脑科技有限公司深圳研发中心 */
/* All rights reserved. */
/* 文件名称: Browser.h */
/* 文件描述: 基本浏览器的头文件定义 */
/* 当前版本: 1.0 */
/* 作 者: gaolinhui */
/* 完成日期: 2006年2月25日 */
/* 更改记录: */
/* =====================================================================*/
/* 日期 人员 版本 描述 */
/* =====================================================================*/
/* 2006-2-25 gaolinhui 1.0 创建 */
/************************************************************************/
#ifndef __BROWSER_H__
#define __BROWSER_H__
//下面的宏表示浏览器记录每一行的行首状态,这样会使用更多的内存,但是效率将提高
#define BORWSER_RECORD_EVERY
/*常量定义*/
#define BROWSER_UNIT_MAXLEN 200 /*UNIT的最大长度*/
//#define BROWSER_MAX_LINENUM 2000 /*最大行数*/
#define BROWSER_MAX_LINENUM 1000 /*最大行数*/
#define BROWSER_NODE_LEN 10 /*每个节点的行数间隔*/
/*定义最大节点数*/
#if !defined(BORWSER_RECORD_EVERY)
#define BROWSER_MAX_NODES (BROWSER_MAX_LINENUM/BROWSER_NODE_LEN+1)
#else
#define BROWSER_MAX_NODES (BROWSER_MAX_LINENUM+1)
#endif
/*浏览器选项*/
#define BROWSER_OPTION_MARK 0x0002 /*支持MARK*/
#define BROWSER_OPTION_RELOAD 0x0004 /*多次装载数据*/
#define BROWSER_OPTION_ALIGNLEFT 0x0020 /*去掉行首空格*/
/*状态标志*/
#define BROWSER_STATE_BOLD 0x0001 /*粗体显示*/
#define BROWSER_STATE_ITALIC 0x0002 /*斜体显示*/
#define BROWSER_STATE_BLACK 0x0004 /*黒体显示*/
#define BROWSER_STATE_MARKING 0x0008 /*MARK中*/
#define BROWSER_STATE_RETURN 0x0010 /*换行*/
#define BROWSER_STATE_UNDERLINE 0x0020 /*下划线*/
#define BROWSER_STATE_DASHLINE 0x0040 /*下划虚线*/
#define BROWSER_STATE_INITIAL 0x0080 /*初始化*/
#define BROWSER_STATE_DICTITEM 0x0100 /*词条*/
#define BROWSER_STATE_TAB 0x0200 /*缩进*/
#define BROWSER_STATE_SEGMENT 0x0400 /*分段*/
#define BROWSER_STATE_CENTER 0x0800 /*居中显示*/
#define BROWSER_STATE_NODRAW 0x2000 /*设置了topline未重画*/
#define BROWSER_STATE_MARK_KEY 0x4000 /*反白关键字*/
#define BROWSER_STATE_NULL 0X0000 /*初始无状态*/
/*特殊标志*/
#define BROWSER_DATA_END 0x00 /*数据结束标志*/
#define BROWSER_CHAR_RETURN 0x0D /*换行标志*/
#define BROWSER_CHAR_NEWLINE 0x0A
/***************************消息定义********************************/
//定义浏览器消息得扩展类型
typedef struct tagBrwCmdEx //扩展消息类型结构
{
UINT uType; //消息类型
APGUI_STRUCT_MODEL* pBrwHdl; //Edit控件句柄
union
{
struct //请求数据结构
{
//输出
UINT8* pData; //剩余数据的起始地址
UINT uDataRemain; //剩余的数据长度
UINT16 wState; //剩余数据的起始状态
//返回
UINT16 wStateRet; //buffer起始数据的状态
UINT8* BufStartRet; //返回buffer起始的地址
UINT8* OldPosRet; //返回旧数据的地址
}ReqData;
}cmdparam;
}BrwCmdEx;
/*定义扩展消息得类型*/
//BROWSER_OPTION_RELOAD模式下,向上请求数据消息,消息参数为
#define CMEX_BROWSER_REQUEST_TOP 1
#define CMEX_BROWSER_REQUEST_BOT 2
//浏览器命令消息
#define EV_DVIEWER CM_KNLBWR_BASE
#define CM_BROWSER_FAIL (EV_DVIEWER + 2)
/*从屏幕左上角开始Mark*/
#define CM_BROWSER_MARKSTART (EV_DVIEWER + 3)
/*从屏幕右下角开始Mark*/
#define CM_BROWSER_MARKEND (EV_DVIEWER + 4)
/*取消Mark*/
#define CM_BROWSER_CANCELMARK (EV_DVIEWER + 5)
/*更新当前页的行数*/
#define CM_BROWSER_UPDT_PAGELINES (EV_DVIEWER + 6)
/*重新解析数据*/
#define CM_BROWSER_RECALC (EV_DVIEWER + 7)
extern CMDEXP g_BrwCmdExp;
extern BrwCmdEx g_mBrwCmdParam;
/*************************************************************************/
/*扩展类型*/
#define BROWSER_EXTRA_NOTHING 0
#define BROWSER_EXTRA_BOLD 0x01
#define BROWSER_EXTRA_ITALIC 0x02
/*单元类型*/
#define BROWSER_UNIT_SYMBOL 0x0001
#define BROWSER_UNIT_CONTROL 0x0002
#define BROWSER_UNIT_STRING 0x0004
#define BROWSER_UNIT_TRANSFER 0x0008
#define BROWSER_UNIT_IMAGE 0x0010
#define BROWSER_UINT_VOICE 0X0020
#define BROWSER_UNIT_EXTRA 0x0040
/*控制类型*/
#define UNIT_CTRL_END 0x01
#define UNIT_CTRL_RETURN 0x02
#define UINT_CTRL_UNKNOWN 0x04
#define BROWSER_LOADING 0x01
#define BROWSER_DRAWING 0x02
#define BROWSER_SCANNING 0x04
#define BROWSER_RESULT_RETURN ((UINT16)-1)
#define BROWSER_RESULT_END 0
struct tagMBrowserInfo;
struct tagMBrowser;
/*UNIT信息结构*/
typedef struct tagMUnitInfo
{
UINT uType; /*类型*/
UINT uWidth; /*宽度*/
UINT uHeight; /*高度*/
UINT uMemLen; /*内存长度*/
union
{
/*字符串*/
UINT8 szString[BROWSER_UNIT_MAXLEN];
/*图像地址*/
UINT8 *pImageAddr;
/*控制类型*/
UINT uCtrlType;
/*扩展信息*/
VOID *pExtrInfo;
} mResource;
/*消息处理函数*/
UINT32 (*fpHandleEvent)(struct tagMBrowser *,UINT ,UINT);
} MUnitInfo;
/*浏览器模板结构*/
typedef struct tagMBrowser
{
UINT uObjectID; /*当前窗口中, 该控件的标识ID号*/
INT16 uX; /*控件区域*/
INT16 uY;
UINT16 uWidth;
UINT16 uHeight;
FPGUIHANDLEEVENT pMsgHandle; /*消息处理函数入口*/
UINT16 wOption; /*选项*/
UINT16 wFontID; /*字库*/
UINT16 wLineSpace; /*行间距*/
UINT16 wReserved;
//单元处理函数
UINT (*pfnRuleProcess)(struct tagMBrowser *handle,UINT8 *pString,
UINT uOption, struct tagMUnitInfo *pUnit);
struct tagMBrowserInfo* pBrwInfo; /*浏览器内部使用之结构,为NULL内部申请内存*/
}MBrowser;
/*行信息结构*/
typedef struct tagLineInfo
{
UINT8 *pLinePtr; /*行首数据指针*/
UINT16 wStates; /*行首状态*/
UINT16 wFontMaxHi; /*行高*/
} MLineInfo;
/*节点信息结构*/
typedef struct tagBrowserNodeInfo
{
UINT8 *pLinePtr; /*行首数据指针*/
UINT8 byLineHi; /*行高*/
UINT16 wStates; /*行首状态*/
}BrowserNodeInfo;
/****************************************************************************/
/**************为解决频繁申请内存造成碎片问题加的结构************************/
struct tagBrowserStack
{
UINT8* pStackBuf;
#define BROWSER_STACK_SIZE 2000
UINT uStackSize;
UINT uStackPointer;
};
/*浏览器内部使用的信息结构*/
typedef struct tagMBrowserInfo //浏览器内部使用之结构.
{
UINT16 wOptions; /*属性*/
UINT16 wStates; /*状态*/
INT16 nX;
INT16 nY;
UINT16 wWidth;
UINT16 wHeight;
UINT16 wFontID; /*缺省字体ID*/
UINT16 wStartCol; /*起始列(起始行默认为0)*/
UINT32 dwTopLine; /*顶行*/
UINT32 dwTotalLine; /*总行数*/
UINT16 wTotalCol; /*总列数*/
UINT16 wColWidth; /*列宽*/
UINT16 wLineHeight; /*行高*/
UINT16 wLineSpace; /*行间距*/
UINT16 wPageLine; /*一页可显示行数*/
UINT16 wTabWidth; /*TAB宽度*/
UINT8 *pBuffer; /*数据缓存区地址*/
BrowserNodeInfo* pNodeInfo; /*10行为一个节点的节点信息*/
//struct tagLineInfo* pLineInfo; /*指针数组,记录各行信息*/
UINT8 *pMarkStart; /*Mark块起始位置*/
UINT8 *pMarkEnd; /*Mark块结束位置*/
UINT8 *pMarkCur; /*MARK块当前位置*/
UINT32 dwExtraStart; /*特殊显示开始*/
UINT32 dwExtraEnd; /*特殊显示结束*/
UINT8 byExtraType; /*特殊显示类型*/
UINT8 byTabGrade; /*缩进等级*/
UINT8 byFontType; /*字体类型,等宽或不等*/
UINT8 padding;
/*解释标记所需的回调函数,根据不同的标记来设置对应的状态,以实现预想的效果 */
UINT (*fpProcessRule)(struct tagMBrowser *handle,UINT8 *pString,
UINT uOption,MUnitInfo *pUnit);
BOOL bFinished; /*数据处理完毕标志*/
struct tagBrowserStack mBrowserStack;
UINT8* pAllocBuf; /*保存申请的内存指针*/
UINT32 dwExtInfo;
} MBrowserInfo;
/*API申明*/
/*浏览器对象的消息处理函数*/
INT BrowserHandleEvent(MBrowser *handle,UINT uEvent, UINT uParam);
/*装载浏览器数据*/
BOOL BrowserLoadData(MBrowser *handle, UINT8 *pDataBuf, UINT16 wState,
UINT16 wStartCol);
/*在一段数据中查找一个行首位置*/
UINT8* BrowserSearchStart(MBrowser* handle, UINT8* pString, UINT uStrlen, UINT16* pState);
/*计算某一顶行开始的一页的总行数*/
UINT16 BrowserPageLineSum(MBrowser *handle,UINT32 dwTopLine);
/*得到浏览器顶行*/
UINT32 BrowserGetTopLine(MBrowser *handle);
/*设置浏览器顶行*/
BOOL BrowserSetTopLine(MBrowser *handle, UINT32 dwTopLine);
/*得到浏览器总行数*/
UINT32 BrowserGetTotalLine(MBrowser *pBViewer);
/*计算行列数*/
UINT32 BrowserCalcLineCol(MBrowser *handle,UINT8 *pData,
UINT32 *line,UINT16 *col);
/*内存位置到行列*/
BOOL BrowserPosToLineCol(MBrowser *handle,UINT8 *pCurrent,
UINT32 *line,UINT16 *col);
/*行列到内存位置*/
UINT8* BrowserLineColToPos(MBrowser *handle, UINT32 dwLine, UINT16 wCol);
/*行列位置到坐标*/
VOID BrowserLineColToXY(MBrowser *pBrowserer, UINT32 dwLine,
UINT16 wCol, UINT16 *xParam, UINT16 *yParam);
/*屏幕坐标到屏幕行列位置*/
BOOL BrowserXyToLineCol(MBrowser *handle,UINT16 x,UINT16 y,
UINT32 *line,UINT16 *col);
/*初始化是否完成*/
BOOL BrowserIsFinished(MBrowser *handle);
/*过滤器*/
UINT BrowserFilter(MBrowser *handle, UINT8 *pString,UINT uOption);
/*有无MARK块*/
BOOL BrowserIsMarking(MBrowser *handle);
/*获取Mark的起止位置*/
BOOL BrowserGetMarkPos(MBrowser *handle,UINT8** pStart, UINT8** pEnd);
/*获取mark数据*/
UINT32 BrowserGetMarkData(MBrowser *handle, UINT8* pMarkData,UINT32 dwLen);
/*获取mark数据的长度*/
UINT32 BrowserGetMarkLength(MBrowser *handle);
/*设置Mark*/
BOOL BrowserSetMark(MBrowser* handle, UINT8* pMarkStart, UINT8* pMarkEnd);
/*设置特殊显示位置*/
UINT32 BrowserSetExtra(MBrowser *handle,UINT8 *pStart,UINT8 *pEnd,UINT8 type);
/*设置字体类型*/
BOOL BrowserSetTextFont(MBrowser *handle,UINT16 font);
/*返回浏览器的数据buffer*/
UINT8* BrowserGetBuffer(MBrowser* handle);
//获取制定行的行首信息.
BOOL GetLineInfo(MBrowser* handle,UINT32 dwLine, MLineInfo* pLineInfo);
//判断初始化是否成功
BOOL BrowserIsInited(MBrowser *handle);
#endif /* __BROWSER_H__ */
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?