- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
对于我们上层用户而言,经常接触到的 History 管理是这样的
一、什么是History 管理
对于我们上层用户而言,经常接触到的History 管理是这样的:
void EntryFunc()
{
U8 *guiBuffer;
EntryNewScreen( Screen_ID , Exit_Func , Entry_Func , NULL );
guiBuffer = GetCurrGuiBuffer( SCR_ID_WORDMAIN_LIST );
ShowCategroyXXScreen( Title_ID , ¡ , guiBuffer);
}
但是,无论是EntryNewScreen 的调用,还是guiBuffer 的传入,我们都很少考虑过对这些指针和
函数在GUI 的管理起到了什么样的作用。下面我们就要了解,以上的代码与History 管理之间存在的关系。
在MTK 环境中,每当我们进入一个窗口,系统将先提取前一个窗口需保留的数据。这些数据包括:
1. 窗口ID ;
2. 进入窗口时调用的函数和退出调用的函数 -- Exit_Func 和 Entry_Func ;
3. 组成窗体的控件的属性(如,列表控件当前高亮显示的条目、当前屏的首末条目等)。
举例说明这些数据在实际中是如何被使用的。
假设存在AB 两个窗口,A 窗口需要保留的数据为data_A 。我们先从A 窗口进入到B 窗口。data_A
将在B 窗口调用EntryNewScreen()的时候,被压入一个结构类似于栈的数据存储区域;当从B 调用
GoBackHistory()返回A 时,data_A 从栈顶被弹出,然后A 利用data_A 将自身还原到其进入B 之前的
状态。
这就是History 管理的作用。简言之,就是要保持窗口的外观状态。
二、History 管理的机制
现在,我们来了解一下前面所说的data_A 的数据结构是什么样的。
typedef struct _history
{
U16 scrnID; //(1)Screen ID (窗口号)
FuncPtr entryFuncPtr; //(2)EntryNewScreen 时要进入的 Entry_Func
U8 inputBuffer[MAX_INPUT_BUFFER];
//(3)没遇到过其使用,都是NULL。
U8 guiBuffer[MAX_GUI_BUFFER];
- 1 -
//(4)窗体中控件的一些需保存的信息的Buffer,通常//在使用
时被转化成各控件自定义的结构体如: list_menu_category_history。
} history;
而存放data_A 的类似于堆栈的数据区则以全局变量的形式定义在系统中:
historyNode historyData[MAX_HISTORY]; (MAX_HISTORY = 50):
设当前窗口A 所对应的数据是historyData[ EntryScreenNum ¨ 1 ] ,那么它是何时、是如何被
赋值的?又是何时、如何被使用的?
经过跟踪调试,我们已经知道,在由窗口A 进入到窗口B (调用EntryNewScreen)的时候,我们
将data_A 记录到了historyNode 的结构体变量中。但是,在EntryNewScreen 的时候传入的,却是
data_B,data_A 是如何被记录和使用的呢?
我们摘选EntryNewScreen 的子函数中所包含的较核心的代码来说明这个问题。这三段代码是按照
现在的排放顺序来执行的。
第一段(history h 可理解为data_A):
h.scrnID = scrnID; // scrnID = currExitScrnID
h.entryFuncPtr = entryFuncPtr; // entryFuncPtr = currEntryFuncPtr
pfnUnicodeStrcpy((S8*) h.inputBuffer, (S8*) nHistory);
您可能关注的文档
最近下载
- RS Components 电工电料 电动机启动器 3RK1903-0BA00 使用说明.pdf VIP
- 瑞幸咖啡企业的供应链战略.pptx VIP
- 尚爱空压机SM.00.00.01空缩机通用说明书(中文)分解.doc VIP
- 2025版结直肠癌CSCO诊疗指南更新版解读(全文).docx VIP
- 2025年版《普通高中课程标准》英语.docx VIP
- 固定收益证券全套教学课件.pptx
- DB51_T2151-2016_实验室安全管理指南_四川省.docx VIP
- 制冷系统节能减排解决方案lotus.pdf VIP
- 旅游委托协议书正式模版.pdf VIP
- 网络与信息安全管理员(信息安全管理员)模拟习题含参考答案.docx VIP
原创力文档


文档评论(0)