📄 readbox.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 + -