這是我十三年前讀研究生的時(shí)候?qū)懙南盗形恼隆?a href="http://www.brongaenegriffin.com/v/tag/1743/" target="_blank">C語(yǔ)言嵌入式系統(tǒng)編程修煉》系列文章中的一小節(jié),是一個(gè)用面向?qū)ο?,把LCD上面菜單,對(duì)象化的例子。該文章原始出處:
http://soft.yesky.com/lesson/188/2023188.shtml
菜單操作無(wú)數(shù)人為之絞盡腦汁的問(wèn)題終于出現(xiàn)了,在這一節(jié)里,我們將看到,在C語(yǔ)言中哪怕用到一丁點(diǎn)的面向?qū)ο笏枷?,軟件結(jié)構(gòu)將會(huì)有何等的改觀!筆者曾經(jīng)是個(gè)笨蛋,被菜單搞暈了,給出這樣的一個(gè)系統(tǒng):
|
|
要求以鍵盤(pán)上的"← →"鍵切換菜單焦點(diǎn),當(dāng)用戶(hù)在焦點(diǎn)處于某菜單時(shí),若敲擊鍵盤(pán)上的OK、CANCEL鍵則調(diào)用該焦點(diǎn)菜單對(duì)應(yīng)之處理函數(shù)。我曾經(jīng)傻傻地這樣做著:
| /* 按下OK鍵 */void onOkKey(){/* 判斷在什么焦點(diǎn)菜單上按下Ok鍵,調(diào)用相應(yīng)處理函數(shù) */Switch(currentFocus){case MENU1:menu1OnOk();break;case MENU2:menu2OnOk();break;…}}/* 按下Cancel鍵 */void onCancelKey(){/* 判斷在什么焦點(diǎn)菜單上按下Cancel鍵,調(diào)用相應(yīng)處理函數(shù) */Switch(currentFocus){case MENU1:menu1OnCancel();break;case MENU2:menu2OnCancel();break;…}} |
終于有一天,我這樣做了:
| /* 將菜單的屬性和操作"封裝"在一起 */typedef struct tagSysMenu{char *text; /* 菜單的文本 */BYTE xPos; /* 菜單在LCD上的x坐標(biāo) */BYTE yPos; /* 菜單在LCD上的y坐標(biāo) */void (*onOkFun)(); /* 在該菜單上按下ok鍵的處理函數(shù)指針 */void (*onCancelFun)(); /* 在該菜單上按下cancel鍵的處理函數(shù)指針 */}SysMenu, *LPSysMenu; |
當(dāng)我定義菜單時(shí),只需要這樣:
| static SysMenu menu[MENU_NUM] ={{"menu1", 0, 48, menu1OnOk, menu1OnCancel},{" menu2", 7, 48, menu2OnOk, menu2OnCancel},{" menu3", 7, 48, menu3OnOk, menu3OnCancel},{" menu4", 7, 48, menu4OnOk, menu4OnCancel}…}; |
OK鍵和CANCEL鍵的處理變成:
| /* 按下OK鍵 */void onOkKey(){menu[currentFocusMenu].onOkFun();}/* 按下Cancel鍵 */void onCancelKey(){menu[currentFocusMenu].onCancelFun();} |
程序被大大簡(jiǎn)化了,也開(kāi)始具有很好的可擴(kuò)展性!我們僅僅利用了面向?qū)ο笾械姆庋b思想,就讓程序結(jié)構(gòu)清晰,其結(jié)果是幾乎可以在無(wú)需修改程序的情況下在系統(tǒng)中添加更多的菜單,而系統(tǒng)的按鍵處理函數(shù)保持不變。
面向?qū)ο螅嫔窳耍?/span>
-
C語(yǔ)言
+關(guān)注
關(guān)注
183文章
7642瀏覽量
145129 -
LCD菜單
+關(guān)注
關(guān)注
0文章
2瀏覽量
6478
原文標(biāo)題:C語(yǔ)言對(duì)象化設(shè)計(jì)的實(shí)例——LCD菜單
文章出處:【微信號(hào):LinuxDev,微信公眾號(hào):Linux閱碼場(chǎng)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
C語(yǔ)言lcd上創(chuàng)建菜單的對(duì)象化實(shí)例分享
如何將LCD與STM32F103C8T6 STM32開(kāi)發(fā)板連接并編程
求教如何將Labview的程序轉(zhuǎn)換為C語(yǔ)言啊
單片機(jī)c語(yǔ)言下如何實(shí)現(xiàn)lcd多級(jí)菜單?
怎樣用C語(yǔ)言去實(shí)現(xiàn)LCD多級(jí)菜單呢
嵌入式編程中C語(yǔ)言的模塊化和模擬面向對(duì)象的相關(guān)資料推薦
單片機(jī)C語(yǔ)言中LCD菜單的方法實(shí)現(xiàn)
單片機(jī)C語(yǔ)言LCD多菜單的實(shí)現(xiàn)
使用C語(yǔ)言實(shí)現(xiàn)LCD多級(jí)菜單的方法資料和程序免費(fèi)下載
如何使用單片機(jī)C語(yǔ)言實(shí)現(xiàn)LCD的多級(jí)菜單
談?wù)?b class='flag-5'>如何將機(jī)器學(xué)習(xí)引入自動(dòng)化
為什么要用C語(yǔ)言實(shí)現(xiàn)面向對(duì)象
C語(yǔ)言是如何實(shí)現(xiàn)面向對(duì)象的
C語(yǔ)言設(shè)計(jì)學(xué)習(xí),教你如何將LCD菜單對(duì)象化

評(píng)論