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

📄 readbox.h

📁 这一款新闻类业务的源码
💻 H
字号:
/*===========================================================================
阅读超长文本代码
包明辉 ReadBox
FILE: ReadBox.h
===========================================================================*/
//#include "HeaderData.h"
#include "FileMap.h"
#ifndef BBC_BAO_READBOX_2006_5_30
#define BBC_BAO_READBOX_2006_5_30
//////////////////////////////////////////////////////////////////////////
//可变宏,根据手机的情况调节
#define READBOX_INDEXTABLE		50 //索引表占文件的总量,现在为25%
#define	READBOX_INDEX_SETP		256//每次处理索引的数据量单位AECHAR
#define	READBOX_INDEX_BACK		40 //预测量字符个AECHAR,通常为手机屏幕能显示最大英文字符数 + 1,
//////////////////////////////////////////////////////////////////////////
//这几个不要改变
#define	READBOX_BAKECL			0
#define	READBOX_TEXTCL			1
#define	REABBOX_BINSEARCH_ERR   0xffffffff	//二分查找返回错误码

#define EVT_MY					EVT_USER + 10
//////////////////////////////////////////////////////////////////////////
//释放
#define	READBOX_FREE(p)			CReadBox_Release((CReadBox**)&(p))
//////////////////////////////////////////////////////////////////////////
//返回结构体
typedef struct _RetData
{
	uint32		m_nNowPage;			//当前页
	uint32		m_nTolPage;			//一共的叶数
}CRetData;
//////////////////////////////////////////////////////////////////////////
//READBOX内部状态信息
typedef enum 
{
   READBOX_STATE_NONE			= 0 ,
   READBOX_STATE_CRIN			= 1 ,
   READBOX_STATE_STOK			= 2
}ReadBoxState;
//////////////////////////////////////////////////////////////////////////
//阅读回调信息
//回掉状态
#define	READRC_STATE_OPEN		7			//打开回调
#define	READRC_STATE_STOK		0			//正常状态,此状态表示回调显示
#define READRC_CREAT_INDX		1           //正在创建索引
#define READRC_CREAT_IDXB		9			//中断建立索引

#define	READRC_ERRAL_AERR		11			//错误

#define	READRC_CREAT_IDER		2			//索引创建失败索引表空间不够,换行太多
#define	READRC_PAGEG_IERR		4			//初始跳转错误,初始书签错误
#define	READRC_FIMAP_IERR		3			//内存文件map严重错误

#define	FUN_COMMANDRUN(n , m , z){																			\
	if(NULL != pReadBox->m_pvUser && NULL != pReadBox->m_pRecall)													\
	{																										\
		((void(*)(void* , byte , uint32 , uint32))(pReadBox->m_pRecall))(pReadBox->m_pvUser , (n) , (m) , (z));	\
	}																										\
}
typedef void (*PFNNOTYRead)(void* pApp , byte nFlag , uint32  nMaxLine , uint32 nIndexLine);
//////////////////////////////////////////////////////////////////////////
//主结构
//typedef enum
//{
//   MY_FONT_NORMAL=0x8000,
//   MY_FONT_BOLD,
//   MY_FONT_LARGE,
//   MY_FONT_SMAL
//} AEEMyFont;
typedef struct _ReadBox
{
	AEEApplet*		m_pThis;
	void*			m_pvUser;
	boolean			m_bIsActive;
	ReadBoxState	m_eState;
	AEERect*		m_pAPPRect;
	uint16			m_ncxScreen;
	uint16			m_ncyScreen;
	uint16			m_ncyPageLn;
	PFNNOTYRead		m_pRecall;
	char			m_szFineName[AEE_MAX_FILE_NAME];
	//IJTFont*		m_pJTFont;
	
    //////////////////////////////////////////////////////////////////////////
	//暂停滚动变量
	boolean			m_bStopRead;

	//////////////////////////////////////////////////////////////////////////
	//私有变量,外面最好别直接用,属性
	uint16			m_nMaxScrLine;						//当前屏幕能显示的最多行数
	uint16			m_nMaxPagLine;						//强前页数显示行数

	uint16			m_nBeLine;							//行间距离
	byte			m_nColorBack;						//背景颜色
	byte			m_nColorText;						//文字颜色	
	byte			m_nLooktype;						//自动浏览方式  0 未设 , 1 象素级滚动 , 2 滚行 ,3 翻页
	int32			m_nTime[3];							//自动阅读的时间间隔
	//AEEMyFont		m_eFont;							//被设置得字体字体
	//AEEMyFont		m_eNowFont;							//当前字体
	boolean			m_bHcRScrl;							//是否拥有滚动条
	//...
	//...
	//...
	int				m_nPicY;							//象素滚动
	//调色表
    RGBVAL			m_colorList[10];
	//////////////////////////////////////////////////////////////////////////
	//索引结构表
	uint32			m_nLtMx;							//索引表能容纳的最大(行)
	uint32			m_nLtTa;							//当前行数总和
	uint32			m_nIndex;							//当前索引	 (可计算当前页数)
	uint16*			m_pnListTable;						//索引表
	//////////////////////////////////////////////////////////////////////////
	//返回信息
	AECHAR*			m_pAENowTmp;
	CRetData		m_tagRetData;
	//////////////////////////////////////////////////////////////////////////
	CFileMap*		m_pFileMap;
	IFileMgr*		m_pFileMgr;
	//////////////////////////////////////////////////////////////////////////
	//临时全局变量
	uint16			nNowLabel;							//当前书签
	uint16			nTotalChar;							//临时全局变量保存一共的字符数
	uint16			nFontH;
	boolean			bFileEnd;							//建立索引使用变量
	//////////////////////////////////////////////////////////////////////////
	//暂时
}CReadBox;
//////////////////////////////////////////////////////////////////////////
boolean		CReadBox_HandleEvent(CReadBox* pReadBox , AEEEvent eCode , uint16 wParam , uint32 dwParam);
CReadBox*	CReadBox_New(IFileMgr* pFileMgr , AEEApplet* pThis , AEERect* pRect , void* pvUser , uint16 ncxScreen , uint16 ncyScreen , uint16 ncyPageLn);
void		CReadBox_Release(CReadBox** ppReadBox);
//设置回调
void		CReadBox_SetNotify(CReadBox* pReadBox , PFNNOTYRead pRecall);
//清除阅读文件
void		CReadBox_ClsReadFile(CReadBox* pReadBox);
//设置阅读文件
boolean		CReadBox_SetReadFile(CReadBox* pReadBox , const char* pFileName , uint16 nLabel , boolean* pBsame);
//属性设置
boolean		CReadBox_SetTextFB(CReadBox* pReadBox , uint16 nBe /*, AEEFont font*/);
boolean		CReadBox_GoToLabel(CReadBox* pReadBox , uint16 nLabel);
boolean		CReadBox_GoToLine(CReadBox* pReadBox , uint32 nLine);
uint16		CReadBox_GetLabel(CReadBox* pReadBox);
void		CReadBox_ReDraw(CReadBox* pReadBox);
void		CReadBox_Draw(CReadBox* pReadBox);
boolean		CReadBox_IsActive(CReadBox* pReadBox);
void		CReadBox_SetActive(CReadBox* pReadBox , boolean nActive);
void		CReadBox_SetAutoRead(CReadBox* pReadBox , boolean bIsStop);
AECHAR*		CReadBox_GetNowPtr(CReadBox* pReadBox , uint16* nCount);
uint16		CReadBox_GetNowLab(CReadBox* pReadBox);
//////////////////////////////////////////////////////////////////////////
//回调接口
void		MapNotify(CNotifyPar* pNotify);
//////////////////////////////////////////////////////////////////////////
//内部接口函数
uint32		MesureText(CReadBox* pReadBox , AECHAR* pBeg , AECHAR* pEnd);
uint32		BinSearch(uint16 *pnList , uint16 nIndex , uint32 nSize);
boolean		CreateTable(CReadBox* pReadBox , CNotifyPar* pNotify);
void		DrawLine(CReadBox* pReadBox , uint16 nLine , AECHAR* pDraw , int nLen);
void		DrawReadT(CReadBox* pReadBox);

#endif

⌨️ 快捷键说明

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