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 + -
显示快捷键?