|
|||||||||||
| 技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng) 驅(qū)動編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機(jī) | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計(jì) | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe |
來一段多國語言菜單的處理。見笑 歡迎討論 |
| 作者:peng007 欄目:嵌入式系統(tǒng) |
//.........................................................// (1)..... //.........................................................// //"MENU"字符串,英文 CHAR code C16_MENU_E[] ={ CHAR_M,CHAR_E,CHAR_N,CHAR_U,0}; //"MENU"字符串,中文 CHAR code C16_MENU_C[] = {CN_CAI,CN_DAN,0}; //"SYSTEM"字符串,英文 CHAR code C16_SYSTEM_E[] = {CHAR_S,CHAR_Y,CHAR_S,CHAR_T,CHAR_E,CHAR_M,0}; //"SYSTEM"字符串,中文 CHAR code C16_SYSTEM_C [] = {CN_XI,CN_TONG,0}; ... typedef struct MSG_DATA { *pc16str[2]; }MSG_DATA; MSG_DATA code stMSG_Data { {C16_MENU_E,C16_MENU_C}, {C16_SYSTEM_E,C16_SYSTEM_E}, ... } //.........................................................// typedef enum { MSG_MENU, MSG_SYSTEM, ..... }MSG_ID typedef enum { MSG_Language_EN, MSG_Language_CN, ..... }MSG_Language en_Language = xxx; //.........................................................// CHAR *getMSGString(MSG_ID enMSG) { CHAR *pc16get = stMSG_Data[enMSG].pc16str[enLanguage]; while(*pc16get+i) { c16StrBuffer[i] = *pc16get+i; i++; } return c16StrBuffer; } //.........................................................// (1)點(diǎn)陣生成及鏈表定義略。 調(diào)用getMSGString前設(shè)好語言種類。 在MSG_ID中設(shè)好菜單。 |
| 2樓: | >>參與討論 |
| 作者: wswh2o 于 2006/9/28 10:40:00 發(fā)布:
不錯 |
|
| 3樓: | >>參與討論 |
| 作者: sockit 于 2006/9/29 9:00:00 發(fā)布:
最好先提供些思路 然后再給代碼...:) |
|
| 4樓: | >>參與討論 |
| 作者: enbed 于 2006/10/1 9:24:00 發(fā)布:
再來一個思路: 樓上的是數(shù)據(jù)和程序沒有分離. 實(shí)現(xiàn)程序和數(shù)據(jù)分離. 程序處理語言包,語言包附在程序最后,當(dāng)然,這個地址要告訴程序的. |
|
| 5樓: | >>參與討論 |
| 作者: peng007 于 2006/10/9 9:31:00 發(fā)布:
to enbed 你說的方法是不是在第一段程序?qū)⒆址椭羔樂蛛x,字符串再獨(dú)立出一個包? |
|
| 6樓: | >>參與討論 |
| 作者: 農(nóng)民講習(xí)所 于 2006/10/9 10:28:00 發(fā)布:
描述屏幕的語言是字符串,不是字符。 要做到字符串和程序無關(guān),使用“字符串ID”來描述,程序中調(diào)用字符串ID(一個字符串句柄)進(jìn)行繪圖。更進(jìn)一步做到程序和字符串分離,字符串的描述中引入起始坐標(biāo),讓字符串的定位也和程序無關(guān)。 所有字符串合并成資源文件,和WINDOW的資源文件一樣的作用。 |
|
| 7樓: | >>參與討論 |
| 作者: liandao 于 2006/10/12 14:06:00 發(fā)布:
我也提個問題:中斷如何使用LCD? 舉個例子: 我的手機(jī),在編輯短信的時候,或者正在編輯一個圖片,或者剛進(jìn)入某層菜單的時候,把充電器接上,手機(jī)會顯示一個界面提示正在充電中,而后回到剛才顯示的界面,各位覺得這是如何做到的? 若是原來在某層菜單下,那么恢復(fù)顯示也好辦--因?yàn)椴藛蝺?nèi)容固定的,得到字符指針就能還原了,而若是想在編輯圖片的時候呢?如何恢復(fù)?難道是備份顯存? |
|
| 8樓: | >>參與討論 |
| 作者: 農(nóng)民講習(xí)所 于 2006/10/12 18:07:00 發(fā)布:
窗口切換 |
|
| 9樓: | >>參與討論 |
| 作者: peng007 于 2006/10/13 18:32:00 發(fā)布:
可能是不同顯示層的疊加吧 |
|
| 10樓: | >>參與討論 |
| 作者: liandao 于 2006/10/16 15:43:00 發(fā)布:
窗口切換 TO: 農(nóng)民講習(xí)所: 你說的“窗口切換”切換到底如何實(shí)行? 1。CPU內(nèi)存一直備份顯示緩沖,且還有另外一個顯示緩沖,需要是把不同的顯示緩沖切換給LCD? 2。利用LCD內(nèi)置的SRAM,一般的LCD會可以設(shè)定該SRAM的那個地址開始的空間作為顯示緩沖的,通過修改該地址值把不同的SRAM空間作為顯示緩沖? 3。還有什么方法? 請問你說的是那種?還是有其它辦法實(shí)現(xiàn)窗口切換? 對應(yīng)缺點(diǎn): 1。占用內(nèi)存。換屏速度取決于CPU速度咯。 2。取決于LCD型號!要是有的型號根本不支持這樣,就沒轍了。 |
|
| 11樓: | >>參與討論 |
| 作者: 51avr 于 2006/10/17 9:14:00 發(fā)布:
只要你編輯的數(shù)據(jù)還在,數(shù)據(jù)就可以復(fù)原。 比如編輯的短消息,你會放在一個buffer里面吧?窗口切換回來的時候,讀出數(shù)據(jù)再寫一遍就可以了。 也見過有人為了優(yōu)化刷新速度而把某區(qū)域的lcd ram直接作備份的。但只用在特殊操作下。 至于窗口切換,程序里面首先要有窗口的概念才行。 |
|
| 12樓: | >>參與討論 |
| 作者: yappy 于 2006/10/17 11:47:00 發(fā)布:
窗口切換 gui 都是非常消耗內(nèi)存的,畢竟也算是多媒體 窗口切換簡單處理方法: 1.有的 lcdc 可以支持多頁顯示, 頁面切換只需要設(shè)定某頁屏幕對應(yīng)的 VSRAM 的地址作為顯示緩存即可, 一般只需要修改寄存器, 各頁之間的數(shù)據(jù)互不影響。 2.單頁顯示, 先讀出當(dāng)前屏幕對應(yīng)的數(shù)據(jù)(整屏或某個區(qū)域),保存到某個緩沖區(qū), 然后繪制新的屏幕畫面(區(qū)域), 操作完畢后,再將緩沖區(qū)中的數(shù)據(jù)拷貝回顯存; 這樣操作的速度確實(shí)比較慢。 可以使用部分 vram 作為緩沖區(qū), 有的 lcdc 提供這樣的硬件支持,速度極快! 我使過 EPSON 的S1D13506, 50MHZ arm7 + S1D13506 的窗口切換速度要比 200Mhz arm9 (內(nèi)部lcdc) 快的多,沒有任何延遲感, 當(dāng)然有些 arm9 的內(nèi)部 lcdc 也有這樣的功能。 通常的 GUI 窗口管理措施要復(fù)雜的多: 每個窗口的結(jié)構(gòu)體中包括很多的 widget (按鈕、進(jìn)度條、滾動條、菜單、圖片、文本....), 每個 widget 也保存足夠的數(shù)據(jù)信息, 通過這些信息可以完整的重新繪制窗口, 也可以通過保存顯存數(shù)據(jù)的方式恢復(fù)窗口。 具體可參考 miniGUI 或 uc\gui 的源代碼, |
|
| 13樓: | >>參與討論 |
| 作者: liandao 于 2006/10/18 14:51:00 發(fā)布:
呵呵,其實(shí)我原本的目標(biāo)不是做個大的GUI 呵呵,其實(shí)我原本的目標(biāo)不是做個大的GUI,儀器儀表上用的,一般不會給配很大的LCD,而MCU很多可能就是8bit的,所以我問關(guān)于窗口切換的問題,因?yàn)樵谛?nèi)存的MCU上很難做事情的。 對了,有空可以看看http://liandao.googlepages.com/menu 《手機(jī)菜單分析和代碼實(shí)現(xiàn)》不完整版本,也曾對一些問題做過思考的。抱歉很亂的文字。 |
|
| 14樓: | >>參與討論 |
| 作者: 農(nóng)民講習(xí)所 于 2006/10/18 16:19:00 發(fā)布:
樓上的可以只使用窗口概念而不使用窗口緩沖 比如:失效菜單窗口,使菜單不輸出到屏幕,從而將屏幕內(nèi)容出讓給其它窗口。其它窗口退出后再發(fā)送刷新命令將菜單內(nèi)容全部輸出。 不帶輸出緩沖,必須程序自己刷新。(GUI可以自己自刷新) |
|
| 15樓: | >>參與討論 |
| 作者: liandao 于 2006/10/18 18:25:00 發(fā)布:
如果內(nèi)容是動態(tài)的呢? TO:農(nóng)民講習(xí)所 如果當(dāng)前屏幕的內(nèi)容均是可以單單通過代碼重新執(zhí)行就能還原,那么很好辦,重新執(zhí)行代碼就是了; 可問題是若原有屏幕顯示的內(nèi)容是動態(tài)的,也就是說當(dāng)前屏幕顯示的內(nèi)容不單單取決于程序代碼,也配合了按鍵輸入什么的(比如正在通過鍵盤配合液晶畫簡單的圖--Nokia手機(jī)不就是可以這么做么),這種時候如何做呢?似乎沒有辦法不備份顯示緩沖了、 |
|
| 16樓: | >>參與討論 |
| 作者: enbed 于 2006/10/18 22:01:00 發(fā)布:
我來繼續(xù): 1:多語言: 輸入法數(shù)據(jù)和字符串資源和程序分離,不同語言編入不同的 這個包即可。 輸入法:不算智能輸入的情況下: 一個表格,每個按鍵對應(yīng)那些輸入, 字符串:設(shè)計(jì)一個文件格式,前面是表,后面跟數(shù)據(jù),通過ID查找后面數(shù)據(jù)區(qū)地址,得到字符串,UNICODE編碼。使用時,緊緊跟ID有關(guān),切換語言時,使用不同的這個字符串文件即可。 每個界面可以單獨(dú)做一個事件處理函數(shù) 界面開始,初始化 按鍵處理 界面結(jié)束這些消息。 至于界面的打斷后重繪,方法還是很多的 除了上訴各位的方法,還可以截屏,再恢復(fù)回去。 |
|
| 17樓: | >>參與討論 |
| 作者: 農(nóng)民講習(xí)所 于 2006/10/19 8:35:00 發(fā)布:
動態(tài)問題 ‘當(dāng)前屏幕顯示的內(nèi)容不單單取決于程序代碼’發(fā)生,是因?yàn)槟愠绦蚪Y(jié)構(gòu)性不好造成的。 按你的例子:‘正在通過鍵盤配合液晶畫簡單的圖’,你在菜單結(jié)構(gòu)中加入動畫狀態(tài)變量:動畫索引、動畫狀態(tài)ID,當(dāng)重畫窗口時就可以將動畫也重新繪圖出來。 現(xiàn)在的手機(jī)基本都采用OS,意味著RAM都不小,使用了GUI。 對黑白機(jī),也可以使用帶緩沖的窗口機(jī)制,可以使用BIT表示一個象素點(diǎn),象手機(jī)這么大小的,一般差不多10K左右RAM圖象窗口。 |
|
| 18樓: | >>參與討論 |
| 作者: 陳雙君 于 2006/10/24 10:16:00 發(fā)布:
這程序好使么 這程序好使么 |
|
| 19樓: | >>參與討論 |
| 作者: kyokyxxj 于 2006/10/24 13:39:00 發(fā)布:
樓主程序好象有點(diǎn)問題 雖然樓下說得很熱鬧,不過還是要說樓主程序有問題 |
|
| 20樓: | >>參與討論 |
| 作者: peng007 于 2006/11/6 10:56:00 發(fā)布:
to:kyokyxxj 有不妥之處,請指出,大家共同進(jìn)步嘛 |
|
| 21樓: | >>參與討論 |
| 作者: john1225cn 于 2006/12/13 19:57:00 發(fā)布:
呵呵不錯啊。 [嵌入式硬件開發(fā)]ARM7擴(kuò)展12864LCD的眾多方法 嘆為觀止的活動金屬小人 轉(zhuǎn)來的,超級好的嵌入式資料匯總 ············ 好多有用的嵌入式資料。。。 快去我的博客看看吧~~~~~~~ john1225cn.gkbk.com |
|
| 免費(fèi)注冊為維庫電子開發(fā)網(wǎng)會員,參與電子工程師社區(qū)討論,點(diǎn)此進(jìn)入 |
Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號 |