MTK開發(fā)之添加資源與菜單學(xué)習(xí)筆記
MTK開發(fā)之添加資源與菜單學(xué)習(xí)筆記是本文要介紹的內(nèi)容,主要是來了解MTK開發(fā)中的一些操作,本文是小編的網(wǎng)上看到的一篇文章,于此,與大家分享一下。
大家跟著我這個流程做,就能從整體上清楚的理清添加資源與菜單的流程,知道為什么要這樣做。下面是在6235平臺下進(jìn)行的,其他平臺可能代碼名稱有不同,具體添加方式參考同文件中其他代碼的寫法就好了,其實(shí)MTK的代碼需要改動的很少,就是在里面添添,不知道怎么添的時候就參考內(nèi)部代碼。
***步:添加程序文件:先假設(shè)自己寫的程序的名字為MyApp
需要添加有:MyAppProt.h (用來存放本程序的所有函數(shù)申明,此頭文件只被本程序的源文件所加載)
MyAppDefs.h (用來存放本程序的一些普通的資源ID定義)
MyAppTypes.h (用來存放本程序所需的類型,結(jié)構(gòu),常量定義)
MyAppGprot.h (也是用來存放函數(shù)申明的,但是此頭文件是被別的程序所加載的,也就是說此文件所申明的都是對外接口)
當(dāng)然還有源文件MyAppSrc.c
注:以上這些頭文件一般放在plutommi/MMI/MyApp/MyAppInc下面,這樣方便代碼管理
第二步:將文件加入項(xiàng)目
在make/plutommi/下面的三個文件需要修改
1、plutommilis 所需編譯的源文件
2、plutommiinc 指明頭文件所在目錄
3、plutommipth 指明源文件所在目錄
第三步:程序開關(guān):
MMI的編譯開關(guān)一般都放在plutommi/customer/custResource/PLUTO_MMI/MMI_features_switchPLUTO.h中
如下添加:#define _MMI_MYAPP_ (_ON_)
當(dāng)添加了如上的代碼后,在其他文件中的#ifdef _MMI_MYAPP_
- .............
- .............
- #endif
所包圍的代碼就會被編譯。
第四步:為資源添加ID
做完以上三步后,接下來就是添加ID了,資源有很多種,所以添加ID的方式有一些不同
(1)添加基礎(chǔ)ID。
在加ID之前先得為本程序添加一個基礎(chǔ)ID,因?yàn)樗谐绦虻馁Y源ID都是各自為政定義各自的,但這些ID又不能沖突,(因?yàn)槊糠N類型的資源ID都是在一個取值空間),所以我們需要基礎(chǔ)ID將每個程序的ID取值隔離開來,基礎(chǔ)ID為某類資源定義了一個范圍,統(tǒng)一定義在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) 就可以設(shè)定資源 ID的范圍,
- 同時GET_RESOURCE_BASE(ap_id)把a(bǔ)p_id付給RESOURCE_BASE_##id,
***再通過類似的語句
- #define MYAPP_BASE
- ((U16)GET_RESOURCE_BASE(MYAPP))
把RESOURCE_BASE_##id付給了MYAPP_BASE。
再啰嗦下,也就添加兩類代碼,一類先是確定資源ID范圍,然后一類就是把范圍地址賦值給MYAPP_BASE 這類ID。
(2)添加屏幕ID(即屏幕序號)
上面添加完基礎(chǔ)ID后,我們就可以利用基礎(chǔ)ID來添加我們的屏幕ID了,在MYAPPDefs.h中定義
- typedef enum{
- SCR_MYAPP-MAIN=MYAPP_BASE+1,
- }SCREENID_LIST_MYAPP
(3)添加字串ID
也是利用基礎(chǔ)ID,在MYAPPDefs.h中定義
- typedef enum
- {
- STR_MYAPP_HELLO = MYAPP_BASE + 1,
- }STRINGID_LIST_MYAPP;
(4)添加圖片ID
同上
(5)添加菜單項(xiàng)ID
這個相對特殊,它在plutommi/MMI/inc/GlobalMenuItems.h中定義
第五步:資源的加載
上面四步把ID和資源都定義了,現(xiàn)在我們就需要把它們加載使之關(guān)聯(lián)起來。
(1)主菜單及一級菜單的加載
需要在Res_MainMenu.c修改添加,此處很容易出錯,因?yàn)槎嗵幬恢萌菀滋礤e,首先需要在文件前部定義枚舉變量,然后在void PopulateMainMenuRes(void)中調(diào)用ADD_APPLICATION_MENUITEM這個函數(shù)。
(2)其他菜單項(xiàng)的加載,字符串加載,圖片加載
都在plutommi/customer/custresource/pluto_mmi/res_mmi/Res_MyApp.c中的populateMyAppRes函數(shù)里加載。
注:populateMyAppRes這個函數(shù)被plutommi/MMI/Resource/populateRes.c下的populateResData()調(diào)用,而populateResDate()被mtk_resgenerator.exe執(zhí)行時呼叫。這就是資源裝載預(yù)編譯順序。
第六步:交互
在平臺中,每個菜單項(xiàng)的行為都由菜單項(xiàng)自己控制,系統(tǒng)所做的就是在高亮此項(xiàng)時發(fā)個通知過來。所以,每個菜單項(xiàng)都要在開機(jī)時通知系統(tǒng)由哪個函數(shù)來接收通知,SetHiliteHandler就是用來做此事的,其***個參數(shù)就是菜單項(xiàng)的ID,第二個參數(shù)就是接收通知的函數(shù)指針。我們通常為每個程序建立一個初始化函數(shù),此函數(shù)只在開機(jī)時運(yùn)行一次,比如mmi_myapp_init,在此函數(shù)中我們會將本程序所有菜單項(xiàng)都注冊一遍。mmi_myapp_init通常在MMITask.c 中被調(diào)用。
- 如:#ifdef _MMI_MYAPP_
- #include "MyAppGprot.h"
- #endif
- void InitAllApplication()
- {
- #ifdef _MMI_MYAPP_
- mmi_myapp_init();
- #endif
- }
以下在myappsrc.c中實(shí)現(xiàn)
- 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個步驟,基本上就實(shí)現(xiàn)了各種資源的定義和加載。如果還有不懂的可以跟我博客交流。
小結(jié):MTK開發(fā)之添加資源與菜單學(xué)習(xí)筆記的內(nèi)容介紹完了,希望通過本文的學(xué)習(xí)能對你有所幫助!