MTK開發之添加資源與菜單學習筆記
MTK開發之添加資源與菜單學習筆記是本文要介紹的內容,主要是來了解MTK開發中的一些操作,本文是小編的網上看到的一篇文章,于此,與大家分享一下。
大家跟著我這個流程做,就能從整體上清楚的理清添加資源與菜單的流程,知道為什么要這樣做。下面是在6235平臺下進行的,其他平臺可能代碼名稱有不同,具體添加方式參考同文件中其他代碼的寫法就好了,其實MTK的代碼需要改動的很少,就是在里面添添,不知道怎么添的時候就參考內部代碼。
***步:添加程序文件:先假設自己寫的程序的名字為MyApp
需要添加有:MyAppProt.h (用來存放本程序的所有函數申明,此頭文件只被本程序的源文件所加載)
MyAppDefs.h (用來存放本程序的一些普通的資源ID定義)
MyAppTypes.h (用來存放本程序所需的類型,結構,常量定義)
MyAppGprot.h (也是用來存放函數申明的,但是此頭文件是被別的程序所加載的,也就是說此文件所申明的都是對外接口)
當然還有源文件MyAppSrc.c
注:以上這些頭文件一般放在plutommi/MMI/MyApp/MyAppInc下面,這樣方便代碼管理
第二步:將文件加入項目
在make/plutommi/下面的三個文件需要修改
1、plutommilis 所需編譯的源文件
2、plutommiinc 指明頭文件所在目錄
3、plutommipth 指明源文件所在目錄
第三步:程序開關:
MMI的編譯開關一般都放在plutommi/customer/custResource/PLUTO_MMI/MMI_features_switchPLUTO.h中
如下添加:#define _MMI_MYAPP_ (_ON_)
當添加了如上的代碼后,在其他文件中的#ifdef _MMI_MYAPP_
- .............
- .............
- #endif
所包圍的代碼就會被編譯。
第四步:為資源添加ID
做完以上三步后,接下來就是添加ID了,資源有很多種,所以添加ID的方式有一些不同
(1)添加基礎ID。
在加ID之前先得為本程序添加一個基礎ID,因為所有程序的資源ID都是各自為政定義各自的,但這些ID又不能沖突,(因為每種類型的資源ID都是在一個取值空間),所以我們需要基礎ID將每個程序的ID取值隔離開來,基礎ID為某類資源定義了一個范圍,統一定義在plutommi/MMI/INC/MMIDataType.h中
具體就看兩個宏定義
- /*
- * Use this macro two to declare resource id range between RESOURCE_BASE_ENUM_BEGIN()
- * and RESOURCE_BASE_ENUM_END()
- */
- #define RESOURCE_BASE_RANGE(ap_id, count)/
- ap_id, /
- GET_RESOURCE_BASE(ap_id) = ap_id,/
- GET_RESOURCE_MAX(ap_id) = ap_id + count - 1
- /*
- * Use these tow macro to get the resource base and resource end
- */
- #define GET_RESOURCE_BASE(id) RESOURCE_BASE_##id
- #define GET_RESOURCE_MAX(id)RESOURCE_BASE_##id##_END
這樣首先通過語句 RESOURCE_BASE_RANGE(ap_id, count) 就可以設定資源 ID的范圍,
- 同時GET_RESOURCE_BASE(ap_id)把ap_id付給RESOURCE_BASE_##id,
***再通過類似的語句
- #define MYAPP_BASE
- ((U16)GET_RESOURCE_BASE(MYAPP))
把RESOURCE_BASE_##id付給了MYAPP_BASE。
再啰嗦下,也就添加兩類代碼,一類先是確定資源ID范圍,然后一類就是把范圍地址賦值給MYAPP_BASE 這類ID。
(2)添加屏幕ID(即屏幕序號)
上面添加完基礎ID后,我們就可以利用基礎ID來添加我們的屏幕ID了,在MYAPPDefs.h中定義
- typedef enum{
- SCR_MYAPP-MAIN=MYAPP_BASE+1,
- }SCREENID_LIST_MYAPP
(3)添加字串ID
也是利用基礎ID,在MYAPPDefs.h中定義
- typedef enum
- {
- STR_MYAPP_HELLO = MYAPP_BASE + 1,
- }STRINGID_LIST_MYAPP;
(4)添加圖片ID
同上
(5)添加菜單項ID
這個相對特殊,它在plutommi/MMI/inc/GlobalMenuItems.h中定義
第五步:資源的加載
上面四步把ID和資源都定義了,現在我們就需要把它們加載使之關聯起來。
(1)主菜單及一級菜單的加載
需要在Res_MainMenu.c修改添加,此處很容易出錯,因為多處位置容易添錯,首先需要在文件前部定義枚舉變量,然后在void PopulateMainMenuRes(void)中調用ADD_APPLICATION_MENUITEM這個函數。
(2)其他菜單項的加載,字符串加載,圖片加載
都在plutommi/customer/custresource/pluto_mmi/res_mmi/Res_MyApp.c中的populateMyAppRes函數里加載。
注:populateMyAppRes這個函數被plutommi/MMI/Resource/populateRes.c下的populateResData()調用,而populateResDate()被mtk_resgenerator.exe執行時呼叫。這就是資源裝載預編譯順序。
第六步:交互
在平臺中,每個菜單項的行為都由菜單項自己控制,系統所做的就是在高亮此項時發個通知過來。所以,每個菜單項都要在開機時通知系統由哪個函數來接收通知,SetHiliteHandler就是用來做此事的,其***個參數就是菜單項的ID,第二個參數就是接收通知的函數指針。我們通常為每個程序建立一個初始化函數,此函數只在開機時運行一次,比如mmi_myapp_init,在此函數中我們會將本程序所有菜單項都注冊一遍。mmi_myapp_init通常在MMITask.c 中被調用。
- 如:#ifdef _MMI_MYAPP_
- #include "MyAppGprot.h"
- #endif
- void InitAllApplication()
- {
- #ifdef _MMI_MYAPP_
- mmi_myapp_init();
- #endif
- }
以下在myappsrc.c中實現
- void mmi_myapp_init(void)
- {
- SetHiliteHandler(MENU_ID_MYAPP_PRINT, mmi_myapp_hilite_print);
- }
- void mmi_myapp_hilite_print(void)
- {
- SetLeftSoftkeyFunction(mmi_myapp_print_entry,KEY_EVENT_UP);
- }
- void mmi_myapp_print_entry(void)
- {
- .................
- }
通過以上的6個步驟,基本上就實現了各種資源的定義和加載。如果還有不懂的可以跟我博客交流。
小結:MTK開發之添加資源與菜單學習筆記的內容介紹完了,希望通過本文的學習能對你有所幫助!