• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            專注于服務(wù)器編程、網(wǎng)絡(luò)編程

            ~~保持一顆平常心~~持之以恒~~
            posts - 18, comments - 7, trackbacks - 0, articles - 0
              C++博客 :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

            ShowCategory200Screen

            Posted on 2009-12-19 10:59 ~William~ 閱讀(593) 評(píng)論(0)  編輯 收藏 引用 所屬分類: MTK_MMI

            MTK: ShowCategory200Screen() 收藏
             
            說(shuō)明:

            1.所有的ShowScreen都有2個(gè)ID:Screen ID(EntryNewScreen()函數(shù)中設(shè)置的ID),以及模板ID(Category ID)。

            2.所有的窗口模板的基本設(shè)置都保存在一個(gè)全局變量:g_categories_controls_map中。它的結(jié)構(gòu)是:

            typedef struct

            {

                U16 category_id;                           模板ID號(hào)

                U8 *control_set_p;                        這個(gè)模板的組件指針

                S16 *default_coordinate_set_p;   這個(gè)模板中各組件屬性的指針

                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.一個(gè)Screen ID的屬性變量:g_screenid_coordinate_sets_map[]。其中只包含了幾個(gè)Screen的屬性指針,可能是用來(lái)設(shè)置一些特殊窗口的屬性。結(jié)構(gòu)是:

            typedef struct

            {

                S32 screen_id;

                S16 *coordinate_set_p;

            } dm_screen_id_coordinate_set_map_struct;

             

            4.2個(gè)函數(shù):

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

                   獲取某個(gè)模板的組件和組件屬性指針。

            (2)S16 *dm_search_coordinate_set(S32 ScrId)

                   獲取Screen ID的屬性指針。

            進(jìn)入ShowCategory200Screen():MTK的電話簿快速查詢

            ShowCategory200Screen()

                   dm_data_struct dm_data;             定義變量,賦值后,帶入全局變量:g_dm_data。最后在dm_redraw_category_screen()中使用。

                  

                   gdi_layer_lock_frame_buffer();     鎖屏

                  

                   create_fixed_icontext_menuitems();     設(shè)置fixed list menuitem的公共屬性MMI_fixed_icontext_menuitem,以及每個(gè)menuitems: MMI_fixed_icontext_menuitems[i]和指針

                                                                           MMI_fixed_menuitem_pointers[i]

                   associate_fixed_icontext_list();            把上面設(shè)置的menuitems與框架MMI_fixed_list_menu結(jié)合起來(lái),設(shè)置icontext的menuitem的接口函數(shù)。

                   init_dynamic_item_buffer(number_of_items, get_item_func, get_hint_func, UI_dummy_function);       裝載動(dòng)態(tài)menuitem:dynamic_item_buffer:獲取item,hint的函數(shù),以及開(kāi)始,結(jié)束,

                                                                           總的items數(shù)目;并調(diào)用函數(shù)設(shè)置MMI_fixed_icontext_menuitems[]中的每個(gè)menuitem。

                   設(shè)置shotcut位置MMI_menu_shortcut_box。

                   register_dynamic_list_keys()           注冊(cè)方向鍵的響應(yīng)。

                   resize_fixed_list(240,191)             設(shè)置icontext menuitem框架的位置尺寸,以及fixed list和滾動(dòng)條的位置尺寸

                   設(shè)置輸入框的位置尺寸

                   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()    設(shè)置輸入框,包括信息框

                          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                設(shè)置icontext的icon和text 的坐標(biāo)

                   singleline_inputbox_input_callback();    右軟件標(biāo)簽

                   設(shè)置左軟件標(biāo)簽

                   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;           設(shè)置dm_data

                dm_data.s32flags |= DM_SHOW_VKPAD;

                dm_data.s32ScrId = (S32) GetActiveScreenId();

                dm_data.s32CatId = MMI_CATEGORY200_ID;

                dm_setup_data(&dm_data);                                                           設(shè)置g_dm_data

                   dm_register_category_controlled_callback(RedrawCategoryControlledArea200Screen);          注冊(cè)控制區(qū)域的CBACK函數(shù)

                   dm_register_vkpad_callback(cat200_virtual_keypad_callback);                                            畫(huà)虛擬鍵盤(pán)的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的組件和組件默認(rèn)屬性指針

                   u8NoOfUICtrls = control_set_ptr[0];           組件第一個(gè)參數(shù)是組件個(gè)數(shù)

                  

                   UICtrlAccessPtr_p = dm_search_coordinate_set(g_dm_data.s32ScrId);    獲取組件屬性。即:UICtrlAccessPtr_p是組件屬性指針,如果UICtrlAccessPtr_p為空,就設(shè)置為默認(rèn)屬性。

                   gdi_layer_lock_frame_buffer();

                   UICtrlAccessPtr_p = dm_get_cat_scr_coordinates(UICtrlAccessPtr_p, &dm_cat_scr_info);          Get category screen size,在畫(huà)組件之前,根據(jù)屬性要獲取這個(gè)窗口的大小。

                                                                                         此時(shí),屬性指針下移一個(gè)位置,指向下一個(gè)屬性。

                  

                   gdi_layer_set_active(GDI_LAYER_MAIN_BASE_LAYER_HANDLE);      設(shè)置基本層

                   gui_set_clip(dm_cat_scr_info.x1, dm_cat_scr_info.y1, dm_cat_scr_info.x2, dm_cat_scr_info.y2);       設(shè)置窗口剪切區(qū)

                   gdi_draw_solid_rect(0, 0, UI_device_width - 1, UI_device_height - 1, GDI_COLOR_TRANSPARENT);      畫(huà)背景

                  

                   for (u8CtrlCt = 1; u8CtrlCt <= u8NoOfUICtrls; u8CtrlCt++)      開(kāi)始畫(huà)組件

                   {

                          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);          畫(huà)基本組件: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++)

                                               {    

                                                      畫(huà)3個(gè)基本組件。注意要傳進(jìn)入屬性指針作為參數(shù)。因?yàn)樵诋?huà)的時(shí)候,要根據(jù)組件屬性,去獲取坐標(biāo)等參數(shù)。

                                                      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);       根據(jù)屬性輸入坐標(biāo)

                                               (*dm_category_controlled_area_callback) (&dm_category_controlled_area_info);    即注冊(cè)的CBACK:RedrawCategoryControlledArea200Screen()

                                                      gdi_layer_lock_frame_buffer();     鎖屏

                                                      wgui_redraw_singleline_input_information_bar();       畫(huà)輸入法提示框

                                                      show_dynamic_list();                                              畫(huà)fixed list menu

                                                      gui_draw_rectangle()                                               畫(huà)輸入框

                                                      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);         根據(jù)屬性,獲取坐標(biāo)

                                               show_singleline_inputbox();

                            break;

                        }

                          }

                   }     到for退出后,所有的控件就畫(huà)好了

                  

                   gdi_layer_unlock_frame_buffer();

                   gdi_layer_blt()

             

            本文來(lái)自CSDN博客,轉(zhuǎn)載請(qǐng)標(biāo)明出處:http://blog.csdn.net/xqq2009/archive/2009/09/13/4546713.aspx

            久久无码av三级| 99精品国产免费久久久久久下载| 久久久久人妻一区二区三区| 国产综合精品久久亚洲| 国产精品99久久精品爆乳| 国产99久久久国产精免费| 久久久久亚洲?V成人无码| 久久这里有精品视频| 久久这里都是精品| 中文精品99久久国产| 久久精品欧美日韩精品| 91精品国产综合久久久久久| 久久精品人人做人人爽电影| 精品国产青草久久久久福利 | 国产成人久久精品区一区二区| 综合久久国产九一剧情麻豆 | 综合久久一区二区三区| 无码任你躁久久久久久| 亚洲人成电影网站久久| 久久精品国产乱子伦| 伊人久久大香线蕉av一区| 97精品久久天干天天天按摩| 精品九九久久国内精品| 国产日韩欧美久久| 久久综合一区二区无码| 久久亚洲精精品中文字幕| 国产精品久久久亚洲| 精品久久久久久久久久中文字幕| 伊人久久综合无码成人网| 久久精品国产91久久麻豆自制| 国内精品久久久久久久亚洲| 国产69精品久久久久久人妻精品| 久久亚洲欧美日本精品| 久久精品国产亚洲αv忘忧草| 久久国产精品无码HDAV | 久久久久亚洲AV无码去区首| 欧美午夜精品久久久久免费视| 国产叼嘿久久精品久久| 2021久久国自产拍精品| 久久精品国产亚洲αv忘忧草| 久久久久18|