UI_BasicCategoryScreen(MTK屏幕末班).doc_第1页
UI_BasicCategoryScreen(MTK屏幕末班).doc_第2页
UI_BasicCategoryScreen(MTK屏幕末班).doc_第3页
UI_BasicCategoryScreen(MTK屏幕末班).doc_第4页
UI_BasicCategoryScreen(MTK屏幕末班).doc_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

本文档翻译内容由iMTKoo网站版权所有目录目录11. Category Screen 的通用功能21.1涉及的文件21.2 通用功能21.2.1 显示屏幕21.2.2 退出屏幕21.2.3 重画屏幕31.2.4 恢复UI控件的大小。31.2.5 保存当前UI控件的值到历史结构体。32 图形环境的切换32.1 切换到主屏的图形环境32.2切换到副屏的图形环境33.屏幕历史的处理33.1 结构体history43.2结构体list_menu_category_history43.3 结构体singleline_inputbox_category_history53.4 结构体multiline_inputbox_category_history63.5 调用和设置以上结构体:73.5.1调用方法73.5.2设置方法74 副屏 LCD Category Screen74.1 涉及的文件74.2 结构体SubLcdHistoryNode74.3 函数84.3.1 副屏的Category screen84.3.2 显示sublcd屏幕。94.3.3 显示SubLCD 的待机界面94.3.4 添加SubLCD屏幕到历史94.3.5 执行当前SubLCD 的退出处理函数。104.3.6 从SubLCD函数中返回一个历史节点。104.3.7 获取指定的scrnid的历史节点。104.3.8 删除历史对战中一直到scrnid的历史节点。104.3.9 删除历史堆栈中指定scrnid的历史节点。104.3.10 检查一个屏幕是否在sublcd histroy stack 中存在。101. Category Screen 的通用功能1.1涉及的文件Wgui_categories.cWgui_categories.hWingui.cWingui.h1.2 通用功能1.2.1 显示屏幕通过设置合适的参数,如窗口标题,软件的字串,待显示的图片等,应用层就可以调用该功能显示各种屏幕。显示屏幕的大体框架如下:1. 清除所有软按件响应函数。清除所有高亮的响应函数。注册新的软按件响应函数。改变软按键的显示文本。2. 重置标题栏的字串和图片。3. 注册UI控件的高亮函数。4. 根据历史屏幕恢复响应的参数。5. 获取待显示的各种控件的大小,层等6. 在绘制屏幕之前要对double buffer 加锁,待全部屏幕绘制完后还要对double buffer进行解锁操作1.2.2 退出屏幕 当需要退出屏幕的时候就调用该功能。期间主要完成一些善后工作,如清除按钮,关闭隐藏动画,关掉所有动画定时器,清除所有UI控件,隐藏状态栏等。还要把ExitCategoryFunction, RedrawCategoryFunction, GetCategoryHistory, GetCategoryHistorySize 这些函数指针置空。1.2.3 重画屏幕 这是使用最频繁的功能,每当进入一个新的屏幕或者刷新时都要调用该功能。 重画屏幕的大体流程如下:1显示标题栏2. 显示软件3. 显示各种各样的UI控件1.2.4 恢复UI控件的大小。 由于在应用过程中,UI控件的大小会改变,因此要将它们保存到UI历史结构体中。1.2.5 保存当前UI控件的值到历史结构体。2 图形环境的切换我们既可以在主屏上也可以在子屏幕进行界面的绘制,而图形上下文就指定了我们当前是在使用那个屏幕,它还规定了LCD的宽,高,绘图区域,文本的剪切区域等。同时还定义了在每个图形环境中该用那些基本的UI函数。当图形环境从主屏切换到副屏时,屏幕的绘制区域也跟着一起切换。2.1 切换到主屏的图形环境通过调用void UI_set_main_LCD_graphics_context (void) 就可以切换到主屏的图形环境。2.2切换到副屏的图形环境通过调用void UI_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 结构体historyTypedef struct_history U16 scrnID; FuncPtr entryFuncPtr; U8 inputBufferMAX_INPUT_BUFFER; U8 guiBufferMAX_GUI_BUFFER;history;其中:ScrnID 是屏幕的ID,是用来在切换屏幕时可以搜索到指定的屏幕ID.EntryFuncPtr 是一个函数指针,当上面这段代码需要执行时,它作为一个被调函数的入口.guiBuffer:在该变量中储存有相关的显示数据,像highlighted和初显项等数据.3.2结构体list_menu_category_historyTypedef struct_list_menu_category_history Word history_ID; S16 highlighted_iten; S16 first_displayed_iten; S16 last_displayed_item; S16 displayed_item; Dword flags;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_historyTypedef struct_singleline_inputbox_category_history Word history_ID; S16 text_length; S16 allocated_length; S16 available_length; S16 current_position; S16 text_offset_x; S16 input_type; S16 ucs2_count; Dword flags;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_PASSWORDFlags:内部标记对应以上几种变量的数据将会由软件自动保存.3.4 结构体multiline_inputbox_category_historyTypedef struct_mutliline_inputbox_category_history Word history_ID; S16 text_length; S16 allocated_length; S16 available_length; S16 n lines; S16 text_heigth; S16 text_offset_x; S16 text_offset_y; S16 cursor_x; S16 xursor_y; S16 cursor_line_position_counter; S16 line before cursor line p; S16 cursor_line_p; S16 cursor_p; S16 line_after_cursor_line_p; S16 line_after_cursor_line_last_p; S16 last_position_p; S16 input_type; S16 ucs2 count; Dword flags;multiline_inputbox_category_history;以上是多行输入框结构,其和单行输入框结构的许多变量的定义一样其中的n_lines是多线输入结构的输入线号 matrix menu category history这个结构体的定义的具体说明请参阅UI_MATRIX_MENU.DOC文件.3.5 调用和设置以上结构体:3.5.1调用方法 Void get_list_menu_category_history(word history_ID,byte*history_buffer)这个语法作用是在history_buffer里面为history_ID保存相关UI的数据3.5.2设置方法 Byte set_list_menu_category_history(word history_ID,bye*history_buffer)这个语法作用是为history_ID重新保存显示屏幕的值.GetCategoryNHistory中的N是显示屏的代号, GetCategoryNHistory是用来实现软件功能的退出. GetCategoryNHistory可适用于multi_line_input box和single_line_input box和list menu.以上五种结构体对每种UI控制都是不同的. GetCategoryNHistory可以根据已定义的控制方式调用适当的UI功能.而值可以由SetCategoryNHistory重新获得.4 副屏 LCD Category Screen4.1 涉及的文件 Wgui_categories.c Wgui_categories.h Sublcdhistory.c4.2 结构体SubLcdHistoryNodeTypedef struct _SubLCDhistoryNodeU16 scrnID;FuncPtr entryFuncPtr;SubLcdHistoryNode;ScrnID是适用特定应用程序屏幕显示的唯一的屏幕id。EntryFuncPtr是存储被调用的入口函数的函数指针,这时节点在sub lcd history 堆栈的最上层。和主LCD 的history structures不同,副LCD history structures不用guiBuffer和 inputBuffer因为Sub LCD没有使用菜单,多行文本输入框,这样他们需要这些缓冲区存储像高亮index和文本输入数据等信息。4.3 函数4.3.1 副屏的Category screen像所有主LCD screens,画一个副LCD同样需要:4.3.1.1显示category screen大概流程如下所述:1. SUBLCD_ExitCategoryFunction();调用退出函数退出副LCD先前显示的屏.UI_set_sub_LCD_graphics_context();2.切换 graphics context到副LCD,使绘画在副LCD上显示。3.设置在其中显示绘画的clipping边界线。4.设置各种需要显示的 UI 元素(动画,多行文本等)的坐标。5.显示状态栏图标。6.调用重画函数绘制。4.3.1.2 Redraw the category screen当ShowCategoryXXXScreen 设置好各种UI 控件的坐标后。这个Redraw 函数被调用(一个特定的内部时间之后)并且绘制按照ShowCategoryXXXScreen指定的参数绘制屏幕。设置graphics context到SubLcd ,画完后,再把它们在MainLcd上存一次。4.3.1.3 获取缓冲区中历史节点的大小category screen的历史节点大小。4.3.1.4获取历史缓冲区获取category screen的历史节点。4.3.1.5退出CategoryScreen当category screen 退出的时候调用,重排UI controls,隐藏状态栏,首先调用ShowCategoryXXXScreen,一个内部特定的时间后RedrawCategoryXXXScreen被调用画屏幕。当屏幕退出时,ExitCategoryXXXScreen 被调用,当用户想存或者重存屏幕,GetCategoryXXXHistorySize和GetCategoryXXXHistory被调用。4.3.2 显示sublcd屏幕。void ShowSubLCDScreen(FuncPtr SubLCD EntryFn)被应用程序用来调用SubLCD screen,这个函数在SubLCD上显示在 SubLCDEntryFn中指定的控件。4.3.3 显示SubLCD 的待机界面 void SubLCDIdleScreen(void)安置SubLCD待机界面的控件。4.

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论