MTK: ShowCategory200Screen() //电话簿快速查找

2023-10-07 00:18

本文主要是介绍MTK: ShowCategory200Screen() //电话簿快速查找,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

2008-09-01 | MTK: ShowCategory200Screen()

说明:

1.所有的ShowScreen都有2IDScreen IDEntryNewScreen()函数中设置的ID),以及模板IDCategory ID)。

2.所有的窗口模板的基本设置都保存在一个全局变量:g_categories_controls_map中。它的结构是:

typedef struct

{

    U16 category_id;                           模板ID

    U8 *control_set_p;                        这个模板的组件指针

    S16 *default_coordinate_set_p;   这个模板中各组件属性的指针

    S16 *rotated_coordinate_set_p;  其他特殊属性指针

} dm_category_id_control_set_map_struct;

 

例如Category200{MMI_CATEGORY200_ID, (U8 *) category200, (S16 *) coordinate_set200, NULL},

组件:

const U8 category200[] =

{

    5,

    DM_BASE_LAYER_START,

    DM_SCR_BG,

    DM_BASE_CONTROL_SET1,

    DM_CATEGORY_CONTROLLED_AREA,

    DM_SINGLELINE_INPUTBOX1

};

属性:

const S16 coordinate_set200[] =

{

    DM_FULL_SCREEN_COORDINATE_FLAG,

    DM_CONTENT_COORDINATE_FLAG,

    26,

       MAIN_LCD_DEVICE_HEIGHT - MMI_BUTTON_BAR_HEIGHT - MMI_SINGLELINE_INPUTBOX_HEIGHT - 2,

       MAIN_LCD_DEVICE_WIDTH - 29,

       MMI_SINGLELINE_INPUTBOX_HEIGHT,

       DM_NO_FLAGS

};

 

3.一个Screen ID的属性变量:g_screenid_coordinate_sets_map[]。其中只包含了几个Screen的属性指针,可能是用来设置一些特殊窗口的属性。结构是:

typedef struct

{

    S32 screen_id;

    S16 *coordinate_set_p;

} dm_screen_id_coordinate_set_map_struct;

 

4.2个函数:

1U8 *dm_search_control_set(S32 category_id, S16 **default_coordinate_set_p)

       获取某个模板的组件和组件属性指针。

2S16 *dm_search_coordinate_set(S32 ScrId)

       获取Screen ID的属性指针。

 

 

进入ShowCategory200Screen():MTK的电话簿快速查询

ShowCategory200Screen()

       dm_data_struct dm_data;             定义变量,赋值后,带入全局变量:g_dm_data。最后在dm_redraw_category_screen()中使用。

 

       gdi_layer_lock_frame_buffer();     锁屏

 

       create_fixed_icontext_menuitems();     设置fixed list menuitem的公共属性MMI_fixed_icontext_menuitem,以及每个menuitems: MMI_fixed_icontext_menuitems[i]和指针

                                                               MMI_fixed_menuitem_pointers[i]

       associate_fixed_icontext_list();            把上面设置的menuitems与框架MMI_fixed_list_menu结合起来,设置icontext的menuitem的接口函数。

       init_dynamic_item_buffer(number_of_items, get_item_func, get_hint_func, UI_dummy_function);       装载动态menuitem:dynamic_item_buffer:获取item,hint的函数,以及开始,结束,

                                                               总的items数目;并调用函数设置MMI_fixed_icontext_menuitems[]中的每个menuitem。

       设置shotcut位置MMI_menu_shortcut_box。

       register_dynamic_list_keys()           注册方向键的响应。

       resize_fixed_list(240,191)             设置icontext menuitem框架的位置尺寸,以及fixed list和滚动条的位置尺寸

       设置输入框的位置尺寸

       dynamic_list_goto_item_no_redraw(highlighted_item = 0);

              gui_dynamic_list_menu_goto_item(&MMI_fixed_list_menu, item_index);

                     gui_dynamic_list_menu_locate_highlighted_item(m);

       wgui_setup_singleline_inputbox()    设置输入框,包括信息框

              SetKeyHandler(wgui_handle_qsearch_singleline_inputbox_change_input_mode, KEY_POUND, KEY_EVENT_DOWN);       #键改变输入法

       gui_set_single_line_input_box_theme(&MMI_singleline_inputbox, &cat200_singleline_inputbox_theme);                                   输入框主题

       resize_dynamic_icontext_menuitems_to_list_width();

       set_fixed_icontext_positions                设置icontext的icon和text 的坐标

       singleline_inputbox_input_callback();    右软件标签

       设置左软件标签

       gdi_layer_unlock_frame_buffer();        解屏

 

       ExitCategoryFunction = ExitCategory200Screen;

    dm_setup_category_functions(dm_redraw_category_screen, GetCategory200History, GetCategory200HistorySize);   /* 102605 quick search history Calvin add */

    dm_data.s32flags = DM_CLEAR_SCREEN_BACKGROUND;           设置dm_data

    dm_data.s32flags |= DM_SHOW_VKPAD;

    dm_data.s32ScrId = (S32) GetActiveScreenId();

    dm_data.s32CatId = MMI_CATEGORY200_ID;

    dm_setup_data(&dm_data);                                                           设置g_dm_data

 

       dm_register_category_controlled_callback(RedrawCategoryControlledArea200Screen);          注册控制区域的CBACK函数

       dm_register_vkpad_callback(cat200_virtual_keypad_callback);                                            画虚拟键盘的CBACK

       dm_redraw_category_screen();

 

dm_redraw_category_screen()

       S16 *UICtrlAccessPtr_p = NULL, *DeafultCoordinateSet_p = NULL;      Category200模板的组件属性指针

       U8 *control_set_ptr = NULL;                                                               Category200模板的组件指针

 

       control_set_ptr = dm_search_control_set((U16) g_dm_data.s32CatId, &DeafultCoordinateSet_p);        获取模板200的组件和组件默认属性指针

       u8NoOfUICtrls = control_set_ptr[0];           组件第一个参数是组件个数

 

       UICtrlAccessPtr_p = dm_search_coordinate_set(g_dm_data.s32ScrId);    获取组件属性。即:UICtrlAccessPtr_p是组件属性指针,如果UICtrlAccessPtr_p为空,就设置为默认属性。

 

       gdi_layer_lock_frame_buffer();

 

       UICtrlAccessPtr_p = dm_get_cat_scr_coordinates(UICtrlAccessPtr_p, &dm_cat_scr_info);          Get category screen size,在画组件之前,根据属性要获取这个窗口的大小。

                                                                             此时,属性指针下移一个位置,指向下一个属性。

 

       gdi_layer_set_active(GDI_LAYER_MAIN_BASE_LAYER_HANDLE);      设置基本层

       gui_set_clip(dm_cat_scr_info.x1, dm_cat_scr_info.y1, dm_cat_scr_info.x2, dm_cat_scr_info.y2);       设置窗口剪切区

       gdi_draw_solid_rect(0, 0, UI_device_width - 1, UI_device_height - 1, GDI_COLOR_TRANSPARENT);      画背景

 

       for (u8CtrlCt = 1; u8CtrlCt <= u8NoOfUICtrls; u8CtrlCt++)      开始画组件

       {

              switch (control_set_ptr[u8CtrlCt])       判断组件

              {

                     case DM_BASE_LAYER_START:

            {

                if (redraw_type != REDRAW_2_REDRAW)

                {

                    dm_setup_base_layer();

                }

                break;

            }

                     case DM_BASE_CONTROL_SET1:

            {

                dm_setup_and_draw_base_control_set(&UICtrlAccessPtr_p);          画基本组件:status, title, button

                                   control_set_ptr = dm_get_base_control_set();                          获取基本组件指针

                                UICtrlAccessPtr_p = dm_get_base_coordinate_set();                获取基本组件属性

                                   u8NoOfUICtrls = control_set_ptr[0];

                                for (u8CtrlCt = 1; u8CtrlCt <= u8NoOfUICtrls; u8CtrlCt++)

                                   {    

                                          画3个基本组件。注意要传进入属性指针作为参数。因为在画的时候,要根据组件属性,去获取坐标等参数。

                                          dm_setup_and_draw_status_icons(&UICtrlAccessPtr_p);

                                          dm_setup_and_draw_title(&UICtrlAccessPtr_p);

                                          dm_setup_and_draw_button_bar(&UICtrlAccessPtr_p);

                                   }

                break;

            }

                     case DM_CATEGORY_CONTROLLED_AREA:

            {

                dm_setup_and_draw_category_controlled_area(&UICtrlAccessPtr_p);

                                   *UICtrlAccessPtr_p = dm_get_coordinates(*UICtrlAccessPtr_p, &dm_category_controlled_area_info);       根据属性输入坐标

                                   (*dm_category_controlled_area_callback) (&dm_category_controlled_area_info);    即注册的CBACK:RedrawCategoryControlledArea200Screen()

                                          gdi_layer_lock_frame_buffer();     锁屏

                                          wgui_redraw_singleline_input_information_bar();       画输入法提示框

                                          show_dynamic_list();                                              画fixed list menu

                                          gui_draw_rectangle()                                               画输入框

                                          gui_show_image()                                              输入框前面的image

                                          gdi_layer_unlock_frame_buffer();

                                       gdi_layer_blt_previous(0, 0, UI_device_width - 1, UI_device_height - 1);

                break;

            }

                     case DM_SINGLELINE_INPUTBOX1:

            {

                dm_setup_and_draw_singleline_inputbox(&UICtrlAccessPtr_p);

                                   *UICtrlAccessPtr_p = dm_get_coordinates(*UICtrlAccessPtr_p, &dm_singleline_inputbox_info);         根据属性,获取坐标

                                   show_singleline_inputbox();

                break;

            }

              }

       }     到for退出后,所有的控件就画好了

 

       gdi_layer_unlock_frame_buffer();

       gdi_layer_blt()

 

这篇关于MTK: ShowCategory200Screen() //电话簿快速查找的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/154840

相关文章

MybatisX快速生成增删改查的方法示例

《MybatisX快速生成增删改查的方法示例》MybatisX是基于IDEA的MyBatis/MyBatis-Plus开发插件,本文主要介绍了MybatisX快速生成增删改查的方法示例,文中通过示例代... 目录1 安装2 基本功能2.1 XML跳转2.2 代码生成2.2.1 生成.xml中的sql语句头2

8种快速易用的Python Matplotlib数据可视化方法汇总(附源码)

《8种快速易用的PythonMatplotlib数据可视化方法汇总(附源码)》你是否曾经面对一堆复杂的数据,却不知道如何让它们变得直观易懂?别慌,Python的Matplotlib库是你数据可视化的... 目录引言1. 折线图(Line Plot)——趋势分析2. 柱状图(Bar Chart)——对比分析3

一文教你Java如何快速构建项目骨架

《一文教你Java如何快速构建项目骨架》在Java项目开发过程中,构建项目骨架是一项繁琐但又基础重要的工作,Java领域有许多代码生成工具可以帮助我们快速完成这一任务,下面就跟随小编一起来了解下... 目录一、代码生成工具概述常用 Java 代码生成工具简介代码生成工具的优势二、使用 MyBATis Gen

使用animation.css库快速实现CSS3旋转动画效果

《使用animation.css库快速实现CSS3旋转动画效果》随着Web技术的不断发展,动画效果已经成为了网页设计中不可或缺的一部分,本文将深入探讨animation.css的工作原理,如何使用以及... 目录1. css3动画技术简介2. animation.css库介绍2.1 animation.cs

SpringBoot快速搭建TCP服务端和客户端全过程

《SpringBoot快速搭建TCP服务端和客户端全过程》:本文主要介绍SpringBoot快速搭建TCP服务端和客户端全过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,... 目录TCPServerTCPClient总结由于工作需要,研究了SpringBoot搭建TCP通信的过程

C#实现查找并删除PDF中的空白页面

《C#实现查找并删除PDF中的空白页面》PDF文件中的空白页并不少见,因为它们有可能是作者有意留下的,也有可能是在处理文档时不小心添加的,下面我们来看看如何使用Spire.PDFfor.NET通过C#... 目录安装 Spire.PDF for .NETC# 查找并删除 PDF 文档中的空白页C# 添加与删

一文教你Python如何快速精准抓取网页数据

《一文教你Python如何快速精准抓取网页数据》这篇文章主要为大家详细介绍了如何利用Python实现快速精准抓取网页数据,文中的示例代码简洁易懂,具有一定的借鉴价值,有需要的小伙伴可以了解下... 目录1. 准备工作2. 基础爬虫实现3. 高级功能扩展3.1 抓取文章详情3.2 保存数据到文件4. 完整示例

快速修复一个Panic的Linux内核的技巧

《快速修复一个Panic的Linux内核的技巧》Linux系统中运行了不当的mkinitcpio操作导致内核文件不能正常工作,重启的时候,内核启动中止于Panic状态,该怎么解决这个问题呢?下面我们就... 感谢China编程(www.chinasem.cn)网友 鸢一雨音 的投稿写这篇文章是有原因的。为了配置完

Python利用ElementTree实现快速解析XML文件

《Python利用ElementTree实现快速解析XML文件》ElementTree是Python标准库的一部分,而且是Python标准库中用于解析和操作XML数据的模块,下面小编就来和大家详细讲讲... 目录一、XML文件解析到底有多重要二、ElementTree快速入门1. 加载XML的两种方式2.

利用Python快速搭建Markdown笔记发布系统

《利用Python快速搭建Markdown笔记发布系统》这篇文章主要为大家详细介绍了使用Python生态的成熟工具,在30分钟内搭建一个支持Markdown渲染、分类标签、全文搜索的私有化知识发布系统... 目录引言:为什么要自建知识博客一、技术选型:极简主义开发栈二、系统架构设计三、核心代码实现(分步解析