UIBasicCategoryScreenMTK屏幕末班Word格式文档下载.docx
- 文档编号:19475294
- 上传时间:2023-01-06
- 格式:DOCX
- 页数:9
- 大小:19.43KB
UIBasicCategoryScreenMTK屏幕末班Word格式文档下载.docx
《UIBasicCategoryScreenMTK屏幕末班Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《UIBasicCategoryScreenMTK屏幕末班Word格式文档下载.docx(9页珍藏版)》请在冰豆网上搜索。
3.5调用和设置以上结构体:
7
3.5.1调用方法7
3.5.2设置方法7
4副屏LCDCategoryScreen7
4.1涉及的文件7
4.2结构体SubLcdHistoryNode7
4.3函数8
4.3.1副屏的Categoryscreen8
4.3.2显示sublcd屏幕。
9
4.3.3显示SubLCD的待机界面9
4.3.4添加SubLCD屏幕到历史9
4.3.5执行当前SubLCD的退出处理函数。
10
4.3.6从SubLCD函数中返回一个历史节点。
4.3.7获取指定的scrnid的历史节点。
4.3.8删除历史对战中一直到scrnid的历史节点。
4.3.9删除历史堆栈中指定scrnid的历史节点。
4.3.10检查一个屏幕是否在sublcdhistroystack中存在。
1.CategoryScreen的通用功能
1.1涉及的文件
Wgui_categories.c
Wgui_categories.h
Wingui.c
Wingui.h
1.2通用功能
1.2.1显示屏幕
通过设置合适的参数,如窗口标题,软件的字串,待显示的图片等,应用层就可以调用该功能显示各种屏幕。
显示屏幕的大体框架如下:
1.清除所有软按件响应函数。
清除所有高亮的响应函数。
注册新的软按件响应函数。
改变软按键的显示文本。
2.重置标题栏的字串和图片。
3.注册UI控件的高亮函数。
4.根据历史屏幕恢复响应的参数。
5.获取待显示的各种控件的大小,层等
6.在绘制屏幕之前要对doublebuffer加锁,待全部屏幕绘制完后还要对doublebuffer进行解锁操作
1.2.2退出屏幕
当需要退出屏幕的时候就调用该功能。
期间主要完成一些善后工作,如清除按钮,关闭隐藏动画,关掉所有动画定时器,清除所有UI控件,隐藏状态栏等。
还要把ExitCategoryFunction,RedrawCategoryFunction,GetCategoryHistory,GetCategoryHistorySize这些函数指针置空。
1.2.3重画屏幕
这是使用最频繁的功能,每当进入一个新的屏幕或者刷新时都要调用该功能。
重画屏幕的大体流程如下:
1.显示标题栏
2.显示软件
3.显示各种各样的UI控件
由于在应用过程中,UI控件的大小会改变,因此要将它们保存到UI历史结构体中。
2图形环境的切换
我们既可以在主屏上也可以在子屏幕进行界面的绘制,而图形上下文就指定了我们当前是在使用那个屏幕,它还规定了LCD的宽,高,绘图区域,文本的剪切区域等。
同时还定义了在每个图形环境中该用那些基本的UI函数。
当图形环境从主屏切换到副屏时,屏幕的绘制区域也跟着一起切换。
2.1切换到主屏的图形环境
通过调用voidUI_set_main_LCD_graphics_context(void)就可以切换到主屏的图形环境。
2.2切换到副屏的图形环境
通过调用voidUI_set_sub_LCD_graphics_context(void)就可以切换到主屏的图形环境。
3.屏幕历史的处理
以下5个已定义好的关于屏幕处理的结构体,分别是
history,
list_menu_category_history,
single_line_input_box_category_history,
multi_line_input_box_category_history,
matrix_menu_category_history
下面分别简单讲具体结构体里有什么变量。
3.1结构体history
Typedefstruct_history
{
U16scrnID;
FuncPtrentryFuncPtr;
U8inputBuffer[MAX_INPUT_BUFFER];
U8guiBuffer[MAX_GUI_BUFFER];
}history;
其中:
ScrnID是屏幕的ID,是用来在切换屏幕时可以搜索到指定的屏幕ID.
EntryFuncPtr是一个函数指针,当上面这段代码需要执行时,它作为一个被调函数的入口.
guiBuffer:
在该变量中储存有相关的显示数据,像highlighted和初显项等数据.
3.2结构体list_menu_category_history
Typedefstruct_list_menu_category_history
Wordhistory_ID;
S16highlighted_iten;
S16first_displayed_iten;
S16last_displayed_item;
S16displayed_item;
Dwordflags;
}list_menu_category_history;
这段代码是菜单项调用:
History_ID:
是显示屏幕的ID号
Highlighted_item:
最后的highlighted项
First_displayed_item:
在列表中是初显画面项的引导号
Last_displayed_item:
在列表中是最后显示画面项引导号(当列表比LCD还高时,列表菜单可以滚动)
Displayed_items:
显示项目的号码
Flags:
内部标记
3.3结构体singleline_inputbox_category_history
Typedefstruct_singleline_inputbox_category_history
S16text_length;
S16allocated_length;
S16available_length;
S16current_position;
S16text_offset_x;
S16input_type;
S16ucs2_count;
}singleline_inputbox_category_history;
Text_length:
编码后的字符长度
Allocated_length:
编码后的BUFFER大小(对ucs2来说)
Available_lentgh:
编码后的BUFFER大小
Input_type:
有以下几种分别是:
NUMERIC/ALPHANUMERIC_UPPERCASE/ALPHANUMERIC_LOWERCASE/ALPHANUMERIC_SENTENCECASE/INPUT_TYPE_NUMERIC_PASSWORD
对应以上几种变量的数据将会由软件自动保存.
3.4结构体multiline_inputbox_category_history
Typedefstruct_mutliline_inputbox_category_history
S16nlines;
S16text_heigth;
S16text_offset_y;
S16cursor_x;
S16xursor_y;
S16cursor_line_position_counter;
S16linebeforecursorlinep;
S16cursor_line_p;
S16cursor_p;
S16line_after_cursor_line_p;
S16line_after_cursor_line_last_p;
S16last_position_p;
S16ucs2count;
}multiline_inputbox_category_history;
以上是多行输入框结构,其和单行输入框结构的许多变量的定义一样
其中的n_lines是多线输入结构的输入线号
matrixmenucategoryhistory这个结构体的定义的具体说明请参阅UI_MATRIX_MENU.DOC文件.
3.5.1调用方法
Voidget_list_menu_category_history(wordhistory_ID,byte*history_buffer)
这个语法作用是在history_buffer里面为history_ID保存相关UI的数据
3.5.2设置方法
Byteset_list_menu_category_history(wordhistory_ID,bye*history_buffer)
这个语法作用是为history_ID重新保存显示屏幕的值.
GetCategoryNHistory中的N是显示屏的代号,GetCategoryNHistory是用来实现软件功能的退出.GetCategoryNHistory可适用于multi_line_inputbox和single_line_inputbox和listmenu.
以上五种结构体对每种UI控制都是不同的.GetCategoryNHistory可以根据已定义的控制方式调用适当的UI功能.而值可以由SetCategoryNHistory重新获得.
4副屏LCDCategoryScreen
4.1涉及的文件
·
Sublcdhistory.c
4.2结构体SubLcdHistoryNode
Typedefstruct_SubLCDhistoryNode
}SubLcdHistoryNode;
ScrnID是适用特定应用程序屏幕显示的唯一的屏幕id。
EntryFuncPtr是存储被调用的入口函数的函数指针,这时节点在sublcdhistory堆栈的最上层。
和主LCD的historystructures不同,副LCDhistorystructures不用guiBuffer和inputBuffer因为SubLCD没有使用菜单,多行文本输入框,这样他们需要这些缓冲区存储像高亮index和文本输入数据等信息。
4.3函数
4.3.1副屏的Categoryscreen
像所有主LCDscreens,画一个副LCD同样需要:
4.3.1.1显示categoryscreen
大概流程如下所述:
1.SUBLCD_ExitCategoryFunction();
调用退出函数退出副LCD先前显示的屏.
UI_set_sub_LCD_graphics_context();
2.切换graphicscontext到副LCD,使绘画在副LCD上显示。
3.设置在其中显示绘画的clipping边界线。
4.设置各种需要显示的UI元素(动画,多行文本等)的坐标。
5.显示状态栏图标。
6.调用重画函数绘制。
4.3.1.2Redrawthecategoryscreen
当ShowCategoryXXXScreen设置好各种UI控件的坐标后。
这个Redraw函数被调用(一个特定的内部时间之后)并且绘制按照ShowCategoryXXXScreen指定的参数绘制屏幕。
设置graphicscontext到SubLcd,画完后,再把它们在MainLcd上存一次。
4.3.1.3获取缓冲区中历史节点的大小
categoryscreen的历史节点大小。
4.3.1.4获取历史缓冲区
获取categoryscreen的历史节点。
4.3.1.5退出CategoryScreen
当categoryscreen退出的时候调用,重排UIcontrols,隐藏状态栏,
首先调用ShowCategoryXXXScreen,一个内部特定的时间后RedrawCategoryXXXScreen被调用画屏幕。
当屏幕退出时,ExitCategoryXXXScreen被调用,当用户想存或者重存屏幕,GetCategoryXXXHistorySize和GetCategoryXXXHistory被调用。
voidShowSubLCDScreen(FuncPtrSubLCDEntryFn)
被应用程序用来调用SubLCDscreen,这个函数在SubLCD上显示在SubLCDEntryFn中指定的控件。
4.3.3显示SubLCD的待机界面
voidSubLCDIdleScreen(void)安置SubLCD待机界面的控件。
4.3.4添加SubLCD屏幕到历史
voidAddSubLCDHistory(SubLCDHistoryNode*CurrSubLCDHistory)
添加SubLCD的历史节点到历史。
VoidExecSubLCDCurrExitHandler(void);
VoidGoBackSubLCDHistory(void)
U8GoBackToSubLCDHistory(U16scrnid);
执行指定scrnid的入口函数,弹出sublcd历史堆栈中scrnid所在节点前的所有历史节点直到scrnid所指定的节点。
如果scrnid所指定的屏幕的历史节点在历史堆栈中不存在,那么所有的历史节点都被弹出来,只留下最后一个,并且进入最后一个节点的entryfunction.
U8DeleteUptoSubLCDScrnID(U16scrnid)
U16DeleteUpSubLCDScrn(U16scrnid)
pBoolIsSubLCDScreenPresent(U16scrnid);
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- UIBasicCategoryScreenMTK 屏幕 末班
![提示](https://static.bdocx.com/images/bang_tan.gif)