电子书功能设计

简介:                 电子书功能设计 电子图书在现在的多媒体终端上越来越受欢迎,已经成为一种很重要的基本功能之一,也非常受消费者的青睐。

                电子书功能设计

电子图书在现在的多媒体终端上越来越受欢迎,已经成为一种很重要的基本功能之一,也非常受消费者的青睐。而目前限于多媒体终端CPU主频、内存的限制,目前应用最广泛的txt格式的电子书,txt格式的电子书已经几乎成了电子书的标准。Txt格式的电子书之所以这么受青睐,这在于它的一些优于其他格式电子书的特点:

    是最基本的最简单的格式,编辑、阅读方便,可用用于自己的记事本、电话录等

    解码耗费的资源比其他格式要少很多,对硬件要求要低一些

    这种格式的电子书来源广泛,Internet上有大量的涉及各个领域、各种学科的电子书下载,当然自己也可以编译自己需要的电子书

    本身这种格式耗费的空间少,一部相同内容的书在txt格式下只有几十k,而在其他格式下可能上几百k

5.4.1 Ebook设计

因为开发平台的用户界面是以Widget(窗口控件)为基础建立的,而开发平台又没有提供电子书的widget的显示功能,所以电子图书功能设计实际上就是需要自行设计一个电子书的Widget,然后在这个Widget里面显示文本内容,再通过PMP的按键对其进行播放,向上向下翻页,自动滚屏,更换、删除文件等操作。

Ebook Widget的创建按照开发平台提供的方法进行的,需要调用开发平台的一些关键API函数。因为Ebook Widget与其他的功能窗口一样需要挂在RootWidget上,所以Ebook Widget创建过程如下:

    自定义的TxtBrowse_Widget_t类结构体数据结构:

typedef struct _TxtBrowse_Widget {

       WIDGET_BASIC_PROPERTIES;        //基本属性定义

       WIDGET_END_OF_BITFIELD_PROPERTIES;

       gfx_Color_t  m_DrawColor;            //颜色

       gfx_Color_t  m_BackgroundColor;     //背景颜色

       gfx_Font_t * m_pFont;               //字体

       gfx_Rect_t   m_rect[2];             // 0:第一行位置,1:末行

       char         m_nFontHeight;       // 当前所用字体高度(象素)

 cmi_MediaHandle_t * m_pMediaHandle;

       wchar_t           * m_pwcsFileName;         // 文件名

 int32_t             m_fd;                   // 已打开文件句柄

       TxtFileCodeEnum_t   m_FileCode;             // 文件编码

       int8_t              m_nStep;                // 查找时使用的步距

       int16_t             m_nEnter;       // 回车符号编码(unicode编码)

       ……………………………………..              //其他重要定义

       TX_TIMER         m_AutoScrollPageTimer;  // 自动翻页定时器

       LineBuf_t           m_LineBuf;              // 行缓冲

       TxtCache_t   m_Cache[TXT_CACHE_MAX_BLK];    // file cache

} TxtBrowse_Widget_t;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


1、调用uim_class_Subclass()函数,注册一个新的窗口类型,以BaseWidget的类结构体Widget_ t为父本派生出一个新的TxtBrowse_Widget_t类结构体;

2、调 uim_widget_create()函数创建Ebook Widget;

3、调用uim_widget_Attach()函数将Ebook Widget挂载到Widget;

4、调用uim_widget_RegisterWidget()函数注册EbookW idget,这样系统 可以 送到 Ebook Widget;

5、读取文本文件信息,调用mst_txt_browse_widget_Draw ()绘制电子图书的显 界面;

6、启动mst_txt_browse_widget_ProcessMessage()处理系统消息(主要是按键事 ),控制电子图书界面的刷新,向上向下翻页。

5.4.2电子书程序功能分析

在进入电子书功能,首先看到的应该是所有TXT文档的列表,再选择需要阅读的具体文本。文件选择就是要实现文件选择功能,必须先识别文件,可以通过database文件管理系统查找出PMP上面的所有文件,再通过比较文件名后缀. txt)的方式识别出文本文件,得到本PMP里面所有文本文件的文件名。文本文件名保存在文件选择列表EbookList[],当用户切换文件时,程序也就是EbookList中切换、选择,这样也可以得到文件的句柄,调用电子书的文件处理函数就可以打开和读取被选择文件的内容。

TXT电子书可能采用的是不同的编码方式,比如DBCSUNICODE小端、UNICODE大端、UTF-8,各种编码的特点在本章第二节已做详细分析,UNICODE小端和UNICODE大端在于字节存储顺序不一样,跟CPU的大小端模式是一样的。在确定了电子书的编码方式后,方可设置查找时使用的步距,这样才能得到正确的字符编码值,在字符最后显示时,文本文件的内容(包括字母,汉字,符号读入内存后,需要调用字符串绘制函数gfx_text_DrawString(),但是gfx_text_DrawString()需要UTF-16编码格式的,所以在调用该函数前需要将DBCS编码字符串通过函数txt_ConvertDbcsToUtf16c( )转化成UNICODE的码。

电子书可以按页处理(PMP显示一屏即是一页),页面之间可以通过按键进行切换,这就需要建立一个索引,记录下每一页内容的偏移量,从而实现页面的上翻和下翻操作。也可以通过向左向右按键实现电子书向下或者向上翻一行, 关键是计算好每一行所占字符的数量,这样一行所占的偏移量的大小。由于PMP系统字库的每个字符宽度并不相同,没有办法通过字数统计来计算总的字符显示宽度,所以在一页内容绘制完成之前,不能得到下一页的偏移量。为此,要完成全部索引,需要将文本文件的内容全部显示一次,每绘制一页就记录一次偏移量。因此在页面刷新的同时,也要记录偏移量,进行索引建立工作。PMP 内存容量有限,为了节省资源,我们只对正在显示的文本文件建立索引,当打开另一个文件时,原有索引被破坏,新的索引将在同一个内存空间建立。

电子书重要接口函数介绍如表5-4

5-4  电子书重要接口函数

函数接口名

功能简介

GetTxtFileCoding

解析txt文件的编码方式

ScrBufDownOneLine

下翻一行(屏幕上滚)屏幕缓冲

ScrBufUpOneLine

上翻一行(屏幕下滚)屏幕缓冲

ScrUpOneFrame

上翻一页

ScrDownOneFrame

下翻一页

AutoScrollPageFun

自动滚屏

SetBookmark

设置或取消当前打开文件的书签

GetBookmark

读取书签

TxtBrowse_class_Initialize

Ebook widget类注册、初始化

mst_ebook_exit_popup

退出时弹出是否需要设置书签菜单

mst_txt_browse_widget_ProcessMessage

对象消息处理

5.4.3电子书程序说明

在主菜单选择进入电子图书界面之后,PMP系统将进行图5-8给出的电子图书(Ebook Widget)建立和显示的初始化工作。此后,Ebook Widget进入等待进一步操作状态,由按键发送系统消息进行下一步控制。

5-8  电子书阅读流程图

电子图书窗口消息处理函数mst_txt_browse_widget_ProcessMessage()负责处理一些系统信息,按键消息处理是其中的一部分。下面简要分析一下几种系统消息:

UIM_MSG_CREATE:对象创建,主要调用函数mst_txt_browse_widget_Create ( )

UIM_MSG_DESTROY:消息在电子图书窗口切换到其他窗口时产生,目的是删除Ebook Widget窗口,转换到用户所选的其他窗口,转换窗口的工作由Root Widget负责完成。主要调用函数mst_txt_browse_widget_Destroy (pTBWidget) 销毁对象,释放内存;

MSG_UI_BTN_EVENT:按键消息处理。按键事件是PMP系统中最常见的消息来源,用户通过按键向Ebook Widget发送消息,即用户通过按键发出控制命令。按键消息有如下几种:

BTN_EVENT_IS(BTN_MENU, EVENT_DOWN):退到主界面,调用的函数是mst_ebook_exit_popup(),询问是否需要设置书签的菜单;

BTN_EVENT_IS(BTN_FF, EVENT_HOLD):下翻一页,调用函数 ScrDownOneFrame (pWidget)来实现功能;

BTN_EVENT_IS(BTN_RW, EVENT_HOLD):上翻一页,调用函数                    ScrUpOneFrame ((TxtBrowse_Widget_t *)pWidget) 来实现功能;

BTN_EVENT_IS(BTN_FF, EVENT_CLICK):向下滚动一行,调用函数ScrBufDownOneLine()来实现功能;

BTN_EVENT_IS(BTN_RW, EVENT_CLICK):上翻一行(屏幕下滚)屏幕缓冲,调用函数ScrBufUpOneLine()来实现功能;

BTN_EVENT_IS(BTN_PLAY, EVENT_CLICK):启动或暂停自动滚屏,这个功能主要是通过操作定时器来实现的,tx_timer_deactivate()禁止TIMERtx_timer_activate()使能TIMER,通过定时器来周期性调用电子书下移函数。

5.4.4电子书开发体会

电子书已经越来越受欢迎,也已经逐渐成为PMP产品一种基本功能,非常受消费者的青睐,显示出了它的价值。但是目前应用最广泛的还是txt格式的电子书,txt格式的电子书已经几乎成了电子书的标准,这种格式太单一。本课题开发的电子书阅读软件也只支持TXT格式的文件,开发的电子书的软件也有各种不同的功能,引入书签操作有一定意义。

对于电子书的发展,最大的方向是开发出支持多格式阅读的格式,特别是 PDF WORD 等采用文件格式的阅读器显得有非常强烈的市场需求,同时能够开发出发声电子书也是很有特色的。
目录
相关文章
|
C++ UED
C/C++ 性能优化思路
C/C++ 性能优化思路
211 0
|
8月前
|
自然语言处理 搜索推荐 小程序
微信公众号接口:解锁公众号开发的无限可能
微信公众号接口是微信官方提供的API,支持开发者通过编程与公众号交互,实现自动回复、消息管理、用户管理和数据分析等功能。本文深入探讨接口的定义、类型、优势及应用场景,如智能客服、内容分发、电商闭环等,并介绍开发流程和工具,帮助运营者提升用户体验和效率。未来,随着微信生态的发展,公众号接口将带来更多机遇,如小程序融合、AI应用等。
|
11月前
|
机器学习/深度学习 人工智能 Cloud Native
.NET现在可以做什么,有哪些公司在用的?
.NET是一个开源(MIT License)、免费、跨平台的开发人员平台框架,用于生成多种类型的应用程序。.NET 可以运行使用多种语言(C#、Visual Basic、F#)编写的程序,其中C#是最常用的语言。
387 0
|
SQL JSON 大数据
ElasticSearch的简单介绍与使用【进阶检索】 实时搜索 | 分布式搜索 | 全文搜索 | 大数据处理 | 搜索过滤 | 搜索排序
这篇文章是Elasticsearch的进阶使用指南,涵盖了Search API的两种检索方式、Query DSL的基本语法和多种查询示例,包括全文检索、短语匹配、多字段匹配、复合查询、结果过滤、聚合操作以及Mapping的概念和操作,还讨论了Elasticsearch 7.x和8.x版本中type概念的变更和数据迁移的方法。
ElasticSearch的简单介绍与使用【进阶检索】 实时搜索 | 分布式搜索 | 全文搜索 | 大数据处理 | 搜索过滤 | 搜索排序
|
11月前
|
存储 监控 安全
保护私钥不被泄露
保护私钥不被泄露
365 12
|
安全 Python
FastAPI安全性揭秘:如何用Python构建坚不可摧的Web应用?
【8月更文挑战第31天】在现代Web开发中,确保应用安全稳定至关重要。FastAPI作为高性能Python Web框架,提供了认证授权、数据验证、CSRF保护及HTTPS支持等安全机制。本文将深入探讨这些特性,并通过示例代码展示如何利用FastAPI构建安全可靠的Web应用。 FastAPI的安全性涵盖多个方面:通过认证授权机制验证用户身份并控制访问权限;利用数据验证功能防止恶意输入;启用CSRF保护避免跨站请求伪造攻击;支持HTTPS增强应用安全性。示例代码展示了如何使用JWT进行认证授权、如何通过`Body`验证请求数据、如何启用CSRF保护以及如何配置HTTPS支持。
506 0
|
消息中间件 分布式计算 Kafka
MaxCompute 在实时数据分析中的角色
【8月更文第31天】随着大数据应用场景的不断扩展,对数据处理速度的要求越来越高,传统的批处理模式已经难以满足某些业务对实时性的需求。在这种背景下,实时数据处理成为了大数据领域的研究热点之一。阿里云的 MaxCompute 虽然主要用于离线数据处理,但通过与其他实时流处理系统(如 Apache Flink 或 Kafka Streams)的集成,也可以参与到实时数据分析中。本文将探讨 MaxCompute 在实时数据分析中的角色,并介绍如何将 MaxCompute 与 Flink 结合使用。
325 0
|
缓存 安全 Java
多线程的三大特性:原子性、可见性和有序性
多线程的三大特性:原子性、可见性和有序性
298 1
|
机器学习/深度学习 数据采集 算法
机器学习赋能乳腺癌预测:如何使用贝叶斯分级进行精确诊断?
机器学习赋能乳腺癌预测:如何使用贝叶斯分级进行精确诊断?
283 0