




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、mtk平臺(tái)mmi培訓(xùn)資料(中文)2008-06-06 21:48本文詳細(xì)說(shuō)說(shuō)明了如如何建設(shè)設(shè)一個(gè)自自定義列列表窗體體模板。原原理部分分請(qǐng)參見(jiàn)見(jiàn)MTTK平臺(tái)臺(tái)(1)如如何添加加一個(gè)窗窗體模板板。最最終實(shí)現(xiàn)現(xiàn)的是一一個(gè)字典典輸入界界面。布布局為:該模板板不包含含業(yè)務(wù)邏邏輯,僅僅提供頁(yè)頁(yè)面顯示示和InnputtBoxx框輸入入事件后后的LiistBBox的的Reddraww事件的的注冊(cè),以以及基本本的輸入入法設(shè)置置、清空空后的返返回函數(shù)數(shù)。一、添添加用戶戶自定義義列表模模板的過(guò)過(guò)程(一一)在gg_caateggoriies_conntrools_mapp中中加入:,MMMI_CATTEGOORY_C
2、USSTOMM_LIIST,(U88*)ccusttom_deffinee_liist,(s116*)cooordiinatte_ccusttom_lisst,NNULLLconstt U88 cuustoom_ddefiine_lisst= 5, DDM_BBASEE_LAAYERR_STTARTT, DDM_SSCR_BG, DMM_BAASE_CONNTROOL_SSET11, DDM_SSINGGLELLINEE_INNPUTTBOXX1, DM_LISST1;constt S116 ccoorrdinnatee_cuustoom_llistt= DMM_FUULL_SCRREENN_
3、COOORDDINAATE_FLAAG, DM_CUSSTOMM_DEEFINNE_IINPUUTBOOX, /需要定定義 DDM_CCUSTTOM_DEFFINEE_LIIST /需要要定義;(二)在ddm_gget_cooordiinattes()函函數(shù)中加加入:/設(shè)定定列表位位置和大大小(不不要忘記記全局變變量 MMMI_cusstomm_Liistbbox_x 等等的定義義)ellse if( *UUICttrlAAcceessPPtr_p = DDM_CCUSTTOM_DEFFINEE_LIIST ) dm_cooordiinatte_iinfoo-ss16XX = MMII_cuu
4、stoom_LListtboxx_x; dm_cooordiinatte_iinfoo-ss16YY = MMII_cuustoom_LListtboxx_y; dm_cooordiinatte_iinfoo-ss16WWidtth = MMMI_ccusttom_Lisstboox_wwidtth; ddm_ccoorrdinnatee_innfo-s116Heeighht = MMMI_ccusttom_Lisstboox_hheigght; dm_cooordiinatte_iinfoo-FFlaggs = DMM_NOO_FLLAGSS;UIICtrrlAcccesssPttr_pp
5、+ ;/設(shè)設(shè)定輸入入框位置置和大小小elsse iif( *UIICtrrlAcccesssPttr_pp = DMM_CUUSTOOM_DDEFIINE_INPPUTBBOX ) dm_cooordiinatte_iinfoo-ss16XX = MMII_cuustoom_iinpuutboox_xx ; dm_cooordiinatte_iinfoo-ss16YY = MMII_cuustoom_iinpuutboox_yy; ddm_ccoorrdinnatee_innfo-s116Wiidthh = MMII_cuustoom_iinpuutboox_wwidtth ;ddm_ccoo
6、rrdinnatee_innfo-s116Heeighht = MMMI_ccusttom_inpputbbox_heiightt; ddm_ccoorrdinnatee_innfo-Fllagss = DM_SINNGLEE_LIINE_INPPUTBBOX_SPEECIFFIC_HEIIGHTT; UIICtrrlAcccesssPttr_pp + ;(三)在在Wguui_ccateegorry.cc中定義義模板顯顯示函數(shù)數(shù)voiid SShowwCattegooryCCusttomLListtScrreenn( U8 *tiitlee, U166 tiitlee_iccon, UU16
7、lefft_ssofttkeyy, U166 leeft_sofftkeey_iiconn, U166 riightt_sooftkkey, UU16 rigght_sofftkeey_iiconn, S322 nuumbeer_oof_iitemms, U88 *lisst_oof_iitemms, U116 *lisst_oof_iiconns, S332 fflaggs, S332 hhighhligghteed_iitemm, U8 *hiistoory_buffferr) /*-*/ /* Loocall Vaariaablees */ /*-*/ dmm_daata_strruct
8、t dmm_daata; S332 ii; UU8 hh_fllag; /*-*/ /* Coode Boddy */ /*-*/ gddi_llayeer_llockk_frramee_buuffeer(); SSetuupCaateggoryyKeyyHanndleers(); MMII_tiitlee_sttrinng = (UUI_sstriing_typpe) tittle; MMMI_ttitlle_iiconn = (PUU8) gett_immagee(tiitlee_iccon); chhangge_lleftt_sooftkkey(lefft_ssofttkeyy, lle
9、ftt_sooftkkey_icoon); chhangge_rrighht_ssofttkeyy(riightt_sooftkkey, riightt_sooftkkey_icoon);/Creeatee Liist crreatte_ffixeed_iiconntexxt_mmenuuiteems(); asssociiatee_fiixedd_icconttextt_liist(); ShoowLiistCCateegorrySccreeen( (UUI_sstriing_typpe) tittle, gget_imaage(tittle_icoon), gget_strringg(le
10、eft_sofftkeey), gget_imaage(lefft_ssofttkeyy_iccon), gett_sttrinng(rrighht_ssofttkeyy), geet_iimagge(rrighht_ssofttkeyy_iccon), nummberr_off_ittemss); ffor (i = 00; ii = (MMMI_sinngleelinne_iinpuutboox.aavaiilabble_lenngthh - ENCCODIING_LENNGTHH) retturnn; guui_ssinggle_linne_iinpuut_bbox_inssertt_m
11、uultiitapp_chharaacteer(&MMII_siinglleliine_inpputbbox, c); rredrraw_sinngleelinne_iinpuutboox(); ssingglellinee_innputtboxx_innputt_caallbbackk(); siinglleliine_inpputbbox_cusstomm_innputt_caallbbackk();(五)Wggui_Cattegoory.c中添添加用戶戶事件定定義接口口/右右鍵事件件注冊(cè)vvoidd SeetCaateggoryyCusstommLisstRiighttSofftkeey
12、Fuuncttionn(vooid (*ff) (voiid) wggui_sinngleelinne_iinpuutboox_RRSK_funnctiion = ff;/keyy_0到到keyy_9按按下時(shí)的的事件注注冊(cè)exxterrn vvoidd (*sinngleelinne_iinpuutboox_ccusttom_inpput_calllbaack) (vvoidd);vvoidd SeetCaateggoryyCusstommLisstNuumKeeyFuuncttionn(vooid (*ff) (voiid)sinngleelinne_iinpuutboox_ccusttom
13、_inpput_calllbaack = ff ;/設(shè)置IInpuutBoox大小小voiid SSetCCusttomLListt_Innputtboxx_Siize(S322 p_x , S332 pp_y , SS32 p_wwidtth , S332 pp_heeighht )MMII_cuustoom_iinpuutboox_xx = p_xx ;MMMI_cusstomm_innputtboxx_y = pp_y ;MMMI_ccusttom_inpputbbox_widdth = pp_wiidthh ;MMMI_cusstomm_innputtboxx_heeighht = p
14、_heiightt ;/設(shè)設(shè)置LiistBBox大大小vooid SettCusstommLisst_LListtboxx_Siize(S322 p_x , S332 pp_y , SS32 p_wwidtth , S332 pp_heeighht )MMII_cuustoom_LListtboxx_x = pp_x ;MMMI_ccusttom_Lisstboox_yy = p_yy ;MMMI_cusstomm_Liistbbox_widdth = pp_wiidthh ;MMMI_cusstomm_Liistbbox_heiightt = p_hheigght ;二、自定義義列表模模板的
15、使使用方法法1、 調(diào)用用SettCusstommLisst_IInpuutboox_SSizee 和 SettCusstommLisst_LListtboxx_Siize 設(shè)置列列表框和和輸入框框的大小小。2、 調(diào)用顯顯示窗體體的接口口 ShhowCCateegorryCuustoomLiistSScreeen。3、 調(diào)用右鍵事件注冊(cè)函數(shù),注冊(cè)文本框被清空后的事件(如返回等)SetCategoryCustomListRightSoftkeyFunction。4、 調(diào)用key_0至key_9的事件注冊(cè)函數(shù),SetCategoryCustomListNumKeyFunction()。三、參數(shù)詳詳細(xì)
16、說(shuō)明明 vooid SettCusstommLisst_IInpuutboox_SSizee(S332 pp_x , SS32 p_yy , S322 p_widdth , SS32 p_hheigght ) 與與 voiid SSetCCusttomLListt_Liistbbox_Sizze(SS32 p_xx , S322 p_y , S332 pp_wiidthh , S322 p_heiightt )pp_x , pp_y :起始始位置pp_wiidthh , p_hheigght : 大大小。 vooid SettCattegooryCCusttomLListtRigghtSSof
17、ttkeyyFunnctiion(voiid (*f) (vvoidd) vvoidd SeetCaateggoryyCusstommLisstNuumKeeyFuuncttionn(vooid (*ff) (voiid) f(vvoidd) :函數(shù)地地址。 vooid ShoowCaateggoryyCusstommLisstSccreeen( U88 *ttitlle, / 標(biāo)題文文本指針針 UU16 tittle_icoon, / 標(biāo)標(biāo)題圖標(biāo)標(biāo)ID U116 lleftt_sooftkkey, / 左左鍵文本本ID U116 lleftt_sooftkkey_icoon, / 左鍵圖圖標(biāo)
18、IDD UU16 rigght_sofftkeey, / 右鍵鍵文本IID U166 riightt_sooftkkey_icoon, / 右鍵圖圖標(biāo)IDD UU8* cusstomm_siinglle_iinpuut_bbufffer, / Innputt輸入BBufffer S332 nnumbber_of_iteems, / 列表表?xiàng)l目數(shù)數(shù) UU8 *liist_of_iteems, / 列列表項(xiàng)文文本指針針數(shù)組 U116 *lisst_oof_iiconns, / 列表表項(xiàng)Iccon S332 hhighhligghteed_iitemm, / 當(dāng)當(dāng)前高亮亮顯示的的列表?xiàng)l條目 U8 *
19、hiistoory_buffferr) / 歷史記記錄Buuffeer附:所需更更改的文文件wggui.cwggui_cattegooriees.ccwguui_ddraww_maanagger.cwggui_inpputss.cwwguii.hwwguii_caateggoriies_deffs.hhwguui_ddraww_maanagger.hCuustCCoorrdinnatee.c一、什么是是Hisstorry管理理 對(duì)對(duì)于我們們上層用用戶而言言,經(jīng)常常接觸到到的Hiistoory管管理是這這樣的: vooid EnttryFFuncc()U8 *guuiBuuffeer; Ennt
20、ryyNewwScrreenn( SScreeen_ID , EExitt_Fuunc , EEntrry_FFuncc , NULLL ); gguiBBufffer = GGetCCurrrGuiiBuffferr( SSCR_ID_WORRDMAAIN_LISST ); ShhowCCateegrooyXXXScrreenn( TTitlle_IID , , gguiBBufffer); 但是,無(wú)無(wú)論是EEntrryNeewSccreeen的調(diào)調(diào)用,還還是guuiBuuffeer的傳傳入,我我們都很很少考慮慮過(guò)對(duì)這這些指針針和函數(shù)數(shù)在GUUI的管管理起到到了什么么樣的作作用。下下面我們們
21、就要了了解,以以上的代代碼與HHisttoryy管理之之間存在在的關(guān)系系。 在MTTK環(huán)境境中,每每當(dāng)我們們進(jìn)入一一個(gè)窗口口,系統(tǒng)統(tǒng)將先提提取前一一個(gè)窗口口需保留留的數(shù)據(jù)據(jù)。這些些數(shù)據(jù)包包括:11. 窗窗口IDD ;22. 進(jìn)進(jìn)入窗口口時(shí)調(diào)用用的函數(shù)數(shù)和退出出調(diào)用的的函數(shù) - Exiit_FFuncc 和 Enttry_Funnc ;3. 組成窗窗體的控控件的屬屬性(如如,列表表控件當(dāng)當(dāng)前高亮亮顯示的的條目、當(dāng)當(dāng)前屏的的首末條條目等)。舉例說(shuō)明這這些數(shù)據(jù)據(jù)在實(shí)際際中是如如何被使使用的。假設(shè)存在AB兩個(gè)窗口,A窗口需要保留的數(shù)據(jù)為data_A。我們先從A窗口進(jìn)入到B窗口。data_A將在B窗口調(diào)
22、用EntryNewScreen()的時(shí)候,被壓入一個(gè)結(jié)構(gòu)類(lèi)似于棧的數(shù)據(jù)存儲(chǔ)區(qū)域;當(dāng)從B調(diào)用GoBackHistory()返回A時(shí),data_A從棧頂被彈出,然后A利用data_A將自身還原到其進(jìn)入B之前的狀態(tài)。這就是History管理的作用。簡(jiǎn)言之,就是要保持窗口的外觀狀態(tài)。二、Hisstorry管理理的機(jī)制制 現(xiàn)現(xiàn)在,我我們來(lái)了了解一下下前面所所說(shuō)的ddataa_A的的數(shù)據(jù)結(jié)結(jié)構(gòu)是什什么樣的的。tyypeddef strructt _hhisttoryy U116 sscrnnID; /(1)SScreeen ID (窗口口號(hào)) FunncPttr eentrryFuuncPPtr; /(2
23、)EEntrryNeewSccreeen時(shí)要要進(jìn)入的的 Enntryy_Fuunc U8 inpputBBuffferMAXX_INNPUTT_BUUFFEER; /(3)沒(méi)沒(méi)遇到過(guò)過(guò)其使用用,都是是NULLL。 U8 guiiBuffferrMAAX_GGUI_BUFFFERR; /(44)窗體體中控件件的一些些需保存存的信息息的Buuffeer,通通常/在使用用時(shí)被轉(zhuǎn)轉(zhuǎn)化成各各控件自自定義的的結(jié)構(gòu)體體如: lisst_mmenuu_caateggoryy_hiistoory。 history;而存放data_A的類(lèi)似于堆棧的數(shù)據(jù)區(qū)則以全局變量的形式定義在系統(tǒng)中:historyNode hi
24、storyDataMAX_HISTORY; (MAX_HISTORY = 50):設(shè)當(dāng)前窗口口A所對(duì)對(duì)應(yīng)的數(shù)數(shù)據(jù)是hhisttoryyDatta EnttrySScreeenNNum 11 ,那么么它是何何時(shí)、是是如何被被賦值的的?又是是何時(shí)、如如何被使使用的?經(jīng)過(guò)跟跟蹤調(diào)試試,我們們已經(jīng)知知道,在在由窗口口A進(jìn)入入到窗口口B(調(diào)調(diào)用EnntryyNewwScrreenn)的時(shí)時(shí)候,我我們將ddataa_A記記錄到了了hisstorryNoode 的結(jié)構(gòu)構(gòu)體變量量中。但但是,在在EnttryNNewSScreeen的的時(shí)候傳傳入的,卻卻是daata_B,ddataa_A是是如何被被記錄和和使用
25、的的呢?我們摘選EEntrryNeewSccreeen的子子函數(shù)中中所包含含的較核核心的代代碼來(lái)說(shuō)說(shuō)明這個(gè)個(gè)問(wèn)題。這這三段代代碼是按按照現(xiàn)在在的排放放順序來(lái)來(lái)執(zhí)行的的。第一一段(hhisttoryy h 可理解解為daata_A): h.scrrnIDD = scrrnIDD; / scrrnIDD = currrExxitSScrnnID h.eentrryFuuncPPtr = eentrryFuuncPPtr; / enntryyFunncPttr = cuurrEEntrryFuuncPPtr pfnnUniicoddeSttrcppy(S8*) hh.innputtBuffferr,
26、 (S8*) & nHHisttoryy); / nnHisstorry = NUULL ; GettCattegooryHHisttoryy(h.guiiBuffferr);/GGetCCateegorryHiistoory是是指向獲獲取/guiiBuffferr的函數(shù)數(shù)的指針針 AdddHiistoory(h); /數(shù)數(shù)據(jù)入棧棧第二段段:iff(cuurrEExittFunncPttr) / (*ccurrrExiitFuuncPPtr) (); /執(zhí)行EExitt_Fuunc 第三三段(記記錄Sccreeen_IID,EExitt_Fuunc和和EnttryFFuncc):ccurrrE
27、xiitSccrnIID = sccrnIID; currrExxitFFunccPtrr = exiitFuuncPPtr; cuurrEEntrryFuuncPPtr = eentrryFuuncPPtr;這樣,我我們就可可以看出出,EnntryyNewwScrreenn函數(shù)先先將上次次執(zhí)行EEntrryNeewSccreeen時(shí)所所記錄的的currrExxitSScrnnID, cuurrEEntrryFuuncPPtr以以hisstorry結(jié)構(gòu)構(gòu)為載體體記錄入入棧;然然后執(zhí)行行了記錄錄中的ccurrrExiitFuuncPPtr;最后將將本窗口口的sccrnIID、eexittFunn
28、cPttr、eentrryFuuncPPtr分分別記錄錄入全局局變量ccurrrExiitSccrnIID、ccurrrExiitFuuncPPtr和和currrEnntryyFunncPttr,留留待下次次調(diào)用EEntrryNeewSccreeen時(shí)使使用。下面有數(shù)據(jù)據(jù)出入棧棧流程,有有興趣的的話可以以跟蹤一一下。以以先后順順序代表表包含關(guān)關(guān)系,如如下:11.入棧棧(EnntryyNewwScrreenn):(1)UU8 EEntrryNeewSccreeen(UU16 newwscrrnIDD, FFunccPtrr neewExxitHHanddlerr, FFunccPtrr neew
29、EnntryyHanndleer, voiid *peeerBuuf)(2)sstattic voiid EExeccuteeCurrrExxitHHanddlerr(vooid);(33)vooid ExeecutteCuurrEExittHanndleer_EExt(voiid);(4)voiid GGeneericcExiitSccreeen( U166 sccrnIID , FuuncPPtr enttryFFunccPtrr );(5)voiid AAddHHisttoryyReffereencee(hiistoory *adddHiistoory); /處理理hisstorryDa
30、ata(6)SS16 inccremmentt(); /更更改棧指指針2.出棧(GoBBackkHisstorry):(1)voiid GGoBaackHHisttoryy(vooid);(22)sttatiic vvoidd ExxecuutePPopHHisttoryy(vooid); /處處理hiistooryDDataa(3)staaticc U88 deecreemennt(vvoidd); /更改棧棧指針現(xiàn)在我們已已經(jīng)知道道了hiistoory 的三個(gè)個(gè)結(jié)構(gòu)體體成員是是如何記記錄的了了,最后后來(lái)重點(diǎn)點(diǎn)看一下下hisstorry.gguiBBufffer是是如何被被記錄和和使用的的。
31、三、GUII Buuffeer對(duì)控控件屬性性的記錄錄 由上上2節(jié)我我們知道道,guuiBuuffeer是窗窗體中某某些控件件的需保保存的屬屬性的BBufffer,通常在在使用時(shí)時(shí)被轉(zhuǎn)化化成各控控件自定定義的結(jié)結(jié)構(gòu)體。如如: llistt_meenu_cattegoory_hisstorry?,F(xiàn)現(xiàn)在有幾幾個(gè)問(wèn)題題需要我我們解答答:1. guuiBuuffeer 指指向的BBufffer是是如何被被分配的的?該塊塊數(shù)據(jù)是是動(dòng)態(tài)的的還是靜靜態(tài)的?2. 這塊 Buffferr 是何何時(shí)被寫(xiě)寫(xiě)入數(shù)據(jù)據(jù)的?33. 如如何釋放放(動(dòng)態(tài)態(tài)分配時(shí)時(shí))或清清空(固固定地址址時(shí))該該塊 BBufffer ?讓我們逐
32、一一解答上上面的三三個(gè)問(wèn)題題,以清清晰我們們對(duì)guuiBuuffeer的認(rèn)認(rèn)識(shí)。11. 答答:在vvoidd AdddHiistooryRRefeerennce(hisstorry *adddHisstorry)中中,調(diào)用用OsllMalllocc(MAAX_GGUI_BUFFFERR)動(dòng)態(tài)態(tài)申請(qǐng)了了一塊內(nèi)內(nèi)存,用用來(lái)保存存在 GGeneericcExiitSccreeen 中中獲取的的hisstorry.gguiBBufffer。參見(jiàn)出出入棧流流程2. 如何何釋放(動(dòng)態(tài)分分配時(shí))或清空空(固定定地址時(shí)時(shí))該塊塊 Buuffeer ?答 :在sttatiic vvoidd deecreemen
33、nt (voiid)函函數(shù)中,該該buffferr被釋放放: OOslMMfreee(hhisttoryyDattaccurrrHisstorryInndexx.gguiBBufffer);。參見(jiàn)出出入棧流流程3. 答 : 只只要一個(gè)個(gè)窗體模模板有需需要保存存狀態(tài)的的控件,它它們都調(diào)調(diào)用了這這個(gè)函數(shù)數(shù)ddm_ssetuup_ccateegorry_ffuncctioons()。函函數(shù)定義義如下:voiid ddm_ssetuup_ccateegorry_ffuncctioons( FFunccPtrr reedraaw_ffuncctioon, U88 *(*geet_hhisttoryy_f
34、uuncttionn) (U8 *buuffeer), SS32(*geet_hhisttoryy_siize_funnctiion) (vvoidd)/指指向窗體體重畫(huà)函函數(shù)的函函數(shù)指針針 ReedraawCaateggoryyFunnctiion = rredrraw_funnctiion;/指指向獲取取窗體gguiBBufffer的的函數(shù)指指針 GGetCCateegorryHiistoory = gget_hisstorry_ffuncctioon;/指向向獲取窗窗體guuiBuuffeer大小小的函數(shù)數(shù)指針 GettCattegooryHHisttoryySizze = geet_h
35、histtoryy_siize_funnctiion;在只有有一個(gè)控控件的狀狀態(tài)需要要保存的的窗體中中,會(huì)這這樣傳參參給這個(gè)個(gè)函數(shù):dm_settup_cattegoory_funnctiionss(dmm_reedraaw_ccateegorry_sscreeen, dmm_geet_ccateegorry_hhisttoryy, ddm_gget_cattegoory_hisstorry_ssizee);GGeneericcExiitSccreeen()函數(shù)中中,將使使用 GGetCCateegorryHiistoory()獲取取某個(gè)控控件的GGuiBBufffer參見(jiàn)出出入棧流流程。如如
36、果按照照上面的的設(shè)置,GGetCCateegorryHiistoory指指向了ddm_gget_cattegoory_hisstorry這個(gè)個(gè)函數(shù)。看看看這個(gè)個(gè)函數(shù)做做了什么么:coontrrol_sett_pttr = dmm_seearcch_cconttroll_seet(U166) pp_dmm_daata-s332CaatIdd, &cooordiinatte_sset_p); /獲取窗窗體模板板內(nèi)的控控件類(lèi)型型數(shù)組cconttroll_seet_pptruu8NooOfUUICttrlss = conntrool_sset_ptrr0; /獲取取數(shù)組內(nèi)內(nèi)變量個(gè)個(gè)數(shù),即即控件的的個(gè)數(shù)
37、/*根據(jù)據(jù)控件類(lèi)類(lèi)型,獲獲取控件件的guuiBuuffeer.值值得注意意的是,11.這里里的hiistrroy_Buffferr的名稱(chēng)稱(chēng)起的不不好,應(yīng)應(yīng)該起名名為guuiBuuffeer,不不應(yīng)混淆淆視聽(tīng);2.最最終hiistoory_buffferr 將指指向模板板中定義義的最后后一個(gè)控控件的gguiBBufffer*/foor (u8CCtrllCt = 11; uu8CttrlCCt s322CattId, hiistoory_buffferr); breeak; casse DDM_LLISTT1: gett_liist_mennu_ccateegorry_hhisttoryy(UU
38、16) p_dm_datta-s322CattId, hiistoory_buffferr); brreakk; caase DM_DYNNAMIIC_LLISTT1: geet_llistt_meenu_cattegoory_hisstorry(U166) pp_dmm_daata-s332CaatIdd, hhisttoryy_buuffeer); breeak; ccasee DMM_ASSYNCCDYNNAMIIC_LLISTT1: gget_lisst_mmenuu_caateggoryy_hiistoory(U116) p_ddm_ddataa-ss32CCatIId, hisst
39、orry_bbufffer); brreakk; /./.而在模模版顯示示函數(shù)(ShoowCaateggroyyXXSScreeen)中,則則根據(jù) guiibuffferr 的情情況設(shè)置置控件的的屬性。如如果 gguibbufffer 不為空空,則說(shuō)說(shuō)明該模模板的顯顯示函數(shù)數(shù)是在GGoBaackHHisttoryy()的的時(shí)候被被調(diào)用的的,而不不是進(jìn)入入新窗口口時(shí)被調(diào)調(diào)用的。那那么控件件必然有有一些保保留的屬屬性需要要被還原原。以66號(hào)窗口口的Liist為為例。在在ShoowCaateggoryy6Sccreeen()中,調(diào)調(diào)用下面面的函數(shù)數(shù)來(lái)恢復(fù)復(fù)Lisst設(shè)置置:h_flaag = see
40、t_llistt_meenu_cattegoory_hisstorry(MMMI_CATTEGOORY66_IDD, hhisttoryy_buuffeer);這樣gguiBBufffer的的Gett和Seet就統(tǒng)統(tǒng)一起來(lái)來(lái)了?,F(xiàn)在,我們們已經(jīng)知知道了gguiBBufffer 所起到到的作用用。但是是,如果果一個(gè)窗窗體模板板內(nèi)有兩兩個(gè)或兩兩個(gè)以上上需要記記錄狀態(tài)態(tài)的控件件,又該該怎么辦辦呢?pps:該該死的字字?jǐn)?shù)限制制,只能能把剩下下的放到到MTTK平臺(tái)臺(tái)(3)HHisttoryy管理下了了。四、靈活使使用guuiBuuffeer在我們自己己設(shè)計(jì)窗窗體模板板時(shí),經(jīng)經(jīng)常會(huì)出出現(xiàn)一個(gè)個(gè)窗體中中有多
41、個(gè)個(gè)控件的的情況。但但是,如如果一個(gè)個(gè)窗體中中有兩個(gè)個(gè)控件、卻卻依然調(diào)調(diào)用dmm_geet_ccateegorry_hhisttoryy()獲獲取控件件的GuuiBuuffeer的話話,就會(huì)會(huì)出現(xiàn)問(wèn)問(wèn)題。比比如,我我們?cè)谥浦谱鰿uustoomLiist窗窗體時(shí),初初期使用用了這樣樣的代碼碼:(11)模板板中的組組件設(shè)置置:coonstt U88 cuustoom_ddefiine_lisst= 55, DM_BASSE_LLAYEER_SSTARRT, DMM_SCCR_BBG, DMM_BAASE_CONNTROOL_SSET11, DM_SINNGLEELINNE_IINPUUTBOOX1
42、, /單單行輸入入控件 DMM_LIIST11 /列表表控件;(2)窗窗體顯示示函數(shù) ShoowCaateggoryyCusstommLisstSccreeen 部部分源碼碼:vooid ShoowCaateggoryyCusstommLisstSccreeen(.,U8 * gguiBBufffer)/. /根據(jù) MMII_CAATEGGORYY_CUUSTOOM_LLISTT 的 guiiBuffferr,為全全局結(jié)構(gòu)構(gòu)體變量量 /MMII_fiixedd_liist_mennu賦值值.h_flaag = seet_llistt_meenu_cattegoory_hisstorry(MMM
43、I_CATTEGOORY_CUSSTOMM_LIIST, guuiBuuffeer);/而而后利用用MMII_fiixedd_liist_mennu,設(shè)設(shè)置liist的的屬性iif (h_fflagg)fixxed_lisst_ggotoo_ittem_no_reddraww(MMMI_ffixeed_llistt_meenu.higghliightted_iteem);elsse fixxed_lisst_ggotoo_ittem_no_reddraww(hiighllighhtedd_ittem);/./再再設(shè)置單單行輸入入框的屬屬性wggui_settup_sinngleelinne_i
44、inpuutboox( 00, 0, 2400, 3220, ccusttom_sinnglee_innputt_buuffeer, 550, MMMI_CATTEGOORY_CUSSTOMM_LIIST, gett_sttrinng(rrighht_ssofttkeyy), gget_imaage(rigght_sofftkeey_iiconn), IINPUUT_TTYPEE_ALLPHAANUMMERIIC_LLOWEERCAASE| INNPUTT_TYYPE_USEE_ONNLY_ENGGLISSH_MMODEES, gguiBBufffer, 0);/其中 wguui_ssetuu
45、p_ssingglellinee_innputtboxx 函數(shù)數(shù)中調(diào)用用了 /seet_ssingglellinee_innputtboxx_caateggoryy_hiistoory()來(lái)解解析guuiBuuffeer/.dm_settup_cattegoory_funnctiionss(dmm_reedraaw_ccateegorry_sscreeen, dmm_geet_ccateegorry_hhisttoryy, ddm_gget_cattegoory_hisstorry_ssizee);/. 繼續(xù)使使用前33節(jié)的假假設(shè)。窗窗口A使使用了 CusstommLisst 窗窗體模板板。
46、從從A 進(jìn)進(jìn)入到BB 時(shí),EEntrryNeewSccreeen函數(shù)數(shù)調(diào)用了了我們?cè)O(shè)設(shè)置的獲獲取guuiBuuffeer函數(shù)數(shù)dm_gett_caateggoryy_hiistoory ,它先先保存了了A中IInpuutBoox的屬屬性,再再保存AA中Liist的的屬性 此時(shí)它它將把輸輸入框的的屬性覆覆蓋掉。當(dāng)當(dāng)從B窗窗口返回回到A窗窗口時(shí),ShoowCaateggoryyCusstommLisstSccreeen()函數(shù)先先把hiistoory_buffferr傳給了了 seet_llistt_meenu_cattegoory_hisstorry , 由于于guiiBuffferr中存儲(chǔ)儲(chǔ)的
47、是LListt的數(shù)據(jù)據(jù),因此此在交付付fixxed_lisst_ggotoo_ittem_no_reddraww 進(jìn)行行設(shè)置屬屬性的時(shí)時(shí)候,不不會(huì)出現(xiàn)現(xiàn)問(wèn)題。但但 wggui_settup_sinngleelinne_iinpuutboox()就會(huì)因因?yàn)間uuiBuuffeer中存存儲(chǔ)的不不是輸入入框存儲(chǔ)儲(chǔ)的數(shù)據(jù)據(jù)而出現(xiàn)現(xiàn)錯(cuò)誤。因此,權(quán)宜之計(jì)是,將更改傳給wgui_setup_singleline_inputbox的入?yún)? wgui_setup_singleline_inputbox( 0, 0, 240, 320, custom_single_input_buffer, 50, MMI_CA
48、TEGORY_CUSTOM_LIST, get_string(right_softkey), get_image(right_softkey_icon), INPUT_TYPE_ALPHANUMERIC_LOWERCASE | INPUT_TYPE_USE_ONLY_ENGLISH_MODES, NULL, 0); 這樣,雖然死機(jī) bug 避免了,但是特定情況下 InputBox 需要保存的屬性,將全部丟失掉.因此,更加合適的做法是,提取 dm_setup_category_functions()中使用的函數(shù)接口:get_singleline_inputbox_category_history
49、get_list_menu_category_history 這樣可以分別獲取 inputbox 和 list 的屬性,然后將得到的兩個(gè)屬性的數(shù)據(jù)連續(xù)存放在一塊動(dòng)態(tài)分配的Buffer中.如200號(hào)窗口的GetCategroyHistory函數(shù)所示:U8 *GetCategory200History(U8 *history_buffer)S32 s;get_list_menu_category_history(MMI_CATEGORY200_ID, history_buffer);s = sizeof(list_menu_category_history);s = (s + 3) / 4;s *
50、= 4;get_singleline_inputbox_category_history(MMI_CATEGORY200_ID, (U8*) (history_buffer + s), MMI_current_input_type);return (history_buffer);要注意的問(wèn)題是,系統(tǒng)為guiBuffer分配空間時(shí),依據(jù)的是 MAX_GUI_BUFFER,而不是 dm_setup_category_functions()所指定的獲取guiBuffer大小的函數(shù)GetCategoryHistorySize.而且系統(tǒng)中從未使用過(guò)該函數(shù)指針?biāo)赶虻暮瘮?shù)。奇怪的是 所有窗體模板的制作者
51、都兢兢業(yè)業(yè)地制作了這個(gè)獲取guiBuffer大小的函數(shù)。在200號(hào)窗口里,獲取guiBuffer大小的函數(shù)如下:S32 GetCategory200HistorySize(void)return (sizeof(list_menu_category_history) + 3) / 4) * 4 + sizeof(singleline_inputbox_category_history);如果怕出錯(cuò)且不怕麻煩的話,也可以未雨綢繆的寫(xiě)一個(gè)這樣的函數(shù),但恐怕多半是用不上的。最后的任務(wù)就是在顯示窗體時(shí)分別獲取各控件的guiBuffer,然后將這些GUI_Buffer分別傳給各個(gè)控件的Set函數(shù). 仍然
52、參看200號(hào)窗體的代碼實(shí)現(xiàn):h_flag = set_list_menu_category_history(MMI_CATEGORY200_ID, history_buffer); /第一個(gè)控件的Gui_Bufferif (h_flag)S32 s = sizeof(list_menu_category_history);s = (s + 3) / 4;s *= 4;dynamic_list_goto_item_no_redraw(MMI_fixed_list_menu.highlighted_item);wgui_setup_singleline_inputbox( input_box_x, (input_box_y), input_box_width, search_box_height, buffer, buffer_max_length, MM
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 正規(guī)的合作合同
- 餐飲服務(wù)合同正規(guī)年
- 合伙經(jīng)營(yíng)利潤(rùn)分成協(xié)議
- 以租代購(gòu)擔(dān)保合同
- (新生兒)急救車(chē)備用藥品基數(shù)目錄
- 2025年國(guó)際貿(mào)易實(shí)務(wù)課件制作流程詳解
- 新員工入職培訓(xùn)成績(jī)表
- 2025年南寧年貨運(yùn)從業(yè)資格證考試題大全
- 2025年六盤(pán)水道路運(yùn)輸貨運(yùn)從業(yè)資格證考試項(xiàng)目
- 三農(nóng)信息資源整合與發(fā)展戰(zhàn)略研究
- 2024年10月高等教育自學(xué)考試07454傳感器技術(shù)應(yīng)用試題及答案
- 七年級(jí)歷史下冊(cè) 第一單元 隋唐時(shí)期繁榮與開(kāi)放的時(shí)代 第1課 隋朝的統(tǒng)一與滅亡說(shuō)課稿1 新人教版
- 2025年春人教版九年級(jí)英語(yǔ)下冊(cè) 2025年中考模擬測(cè)試卷
- DB4117T 245.1-2019 主要林業(yè)有害生物調(diào)查與防控技術(shù)規(guī)范 第1部分 總則
- 加油站事故隱患排查清單(主要負(fù)責(zé)人級(jí))
- 《醫(yī)療事故處理?xiàng)l例》解讀
- 四年級(jí)下冊(cè)綜合實(shí)踐活動(dòng)課件- 用身體說(shuō)話|長(zhǎng)春版
- 廣西版五年級(jí)下冊(cè)美術(shù)全冊(cè)教案【完整版】
- 農(nóng)村勞動(dòng)力資源調(diào)查工作方案
- 《中國(guó)人民站起來(lái)了》教學(xué)設(shè)計(jì) 2024-2025學(xué)年統(tǒng)編版高中語(yǔ)文選擇性必修上冊(cè)
- 3輸變電工程施工質(zhì)量驗(yàn)收統(tǒng)一表式(變電工程電氣專(zhuān)業(yè))-2024年版
評(píng)論
0/150
提交評(píng)論