當(dāng)前位置:首頁 > 公眾號精選 > 嵌入式云IOT技術(shù)圈
[導(dǎo)讀]一般來說我們的產(chǎn)品都有按鍵,按鍵用來操作相應(yīng)的界面,那就會有相應(yīng)的界面處理方法,有兩種結(jié)構(gòu)的編寫。


微信公眾號:嵌入式開發(fā)圈
關(guān)注可了解更多的教程。問題或建議,請公眾號留言;
如果你覺得本文對你有幫助,歡迎贊賞

由于之前的文章沒有好看的格式,故現(xiàn)在重新發(fā)表,讓圈友看起來更加舒服,也可以直接復(fù)制粘貼商用。

▲長按圖片保存可分享至朋友圈


    一般來說我們的產(chǎn)品都有按鍵,按鍵用來操作相應(yīng)的界面,那就會有相應(yīng)的界面處理方法,以下有兩種結(jié)構(gòu)的編寫

A類編寫

 1//針對左鍵的處理函數(shù),傳入的參數(shù)為當(dāng)前頁面
2void left_key_process(int current_page)
3
{
4    switch(current_page)
5    {
6        case MAIN_PAGE:
7            //針對main_page的左鍵處理
8             main_page_left_key_process();
9            break ;
10        case SETTING_PAGE:
11            //針對setting_page的左鍵處理
12            setting_page_left_key_process();
13             break ;
14        case LOG_PAGE:
15            //針對log_page的左鍵處理
16            log_page_left_key_process();
17            break ;
18        case LANGUAGE_PAGE: 
19            //針對language_page的左鍵處理
20            language_page_left_key_process();
21            break ;
22             ....
23    }
24}
25
26//針對右鍵的處理函數(shù),傳入的參數(shù)為當(dāng)前頁面
27void right_key_process(int current_page)
28
{
29    //....
30}
31//針對確認(rèn)鍵的處理函數(shù),傳入的參數(shù)為當(dāng)前頁面 
32void enter_key_process(int current_page)
33
{
34    //....
35}
36//UI頁面處理函數(shù),傳入的參數(shù)為當(dāng)前的鍵值
37void UI_Page_Process(int KeyValue)
38
{
39    switch(KeyValue)
40    {
41        case LEFT_KEY :
42             left_key_process(KeyValue);
43             break ;
44
45        case RIGHT_KEY:
46             right_key_process(KeyValue);
47             break ;
48        case ENTER_KEY:
49             enter_key_process(KeyValue);
50             break ;
51        ...
52    }
53}

    

    A類編寫,我可以起個(gè)名字叫直男式編寫,邏輯沒有錯(cuò),也能正常操作相應(yīng)的頁面,沒有問題,可它就是一條線,直! 首先拿到鍵值,然后操作界面,和我們正常人的思維差不多。但如果代碼量劇增,頁面眾多,每個(gè)頁面有不同的處理按鍵,相信A類的編寫給后面的人來維護(hù)或者增加處理方法人一定會非常抱怨,為啥找個(gè)界面處理這么痛苦?

    我們再來看看B類,我可以起個(gè)名字叫人機(jī)接口式編寫。首先我們要操作界面,界面就是人機(jī)接口,每個(gè)不同的界面由對應(yīng)的按鍵操作方法,這樣看起來,是不是更好維護(hù)了?以后,我要往界面添加、刪除等相關(guān)按鍵的處理方法,那是不是就更好找了?

B類編寫

 1//主頁面處理
2void main_page_process(int KeyValue)
3
{
4    switch(KeyValue)
5    {
6        case LEFT_KEY:
7             //針對main_page的左鍵處理
8             break ;
9        case RIGHT_KEY:
10             //針對main_page的右鍵處理
11             break ;
12        case ENTER_KEY:
13             //針對main_page的Enter鍵處理
14             break ;
15        case BACK_KEY:
16             //針對main_page的back鍵處理
17             break ;
18        ...
19    }
20}
21//設(shè)置頁面處理 
22void setting_page_process(int KeyValue)
23
{
24    switch(KeyValue)
25    {
26        case LEFT_KEY:
27             ...
28             break ;
29        case RIGHT_KEY:
30             ...
31             break ;
32        case ENTER_KEY:
33             ...
34             break ;
35        case BACK_KEY:
36             ...
37             break ;
38        ...
39    }
40}
41//記錄頁面處理 
42void Log_page_process(int KeyValue)
43
{
44    switch(KeyValue)
45    {
46        case LEFT_KEY:
47             ...
48             break ;
49        case RIGHT_KEY:
50             ...
51             break ;
52        case ENTER_KEY:
53             ...
54             break ;
55        case BACK_KEY:
56             ...
57             break ;
58        ...
59    }
60}
61//UI主頁面處理 ,傳入鍵值
62void UI_Page_Process(int KeyValue)
63
{
64
65    switch(current_page)
66    {
67        case MAIN_PAGE:
68             main_page_process(KeyValue);
69             break ;
70        case SETTING_PAGE:
71             setting_page_process(KeyValue);
72             break ;
73        case LOG_PAGE:
74             Log_page_process(KeyValue);
75             break ;
76        ....
77    }
78}

    雖然說B類看起來更加的易維護(hù),但仍然存在缺陷,那就是一旦菜單項(xiàng)數(shù)變多以后,就存在效率低下的問題了,我們有一種更好的解決方法函數(shù)跳轉(zhuǎn)表,我們將B類的方式改一下,引入C類編寫。

C類編寫

 1#include 
2#include 
3using namespace std ;
4#define NR(x) (sizeof(x)/sizeof(x[0]))
5
6int main_page_process();
7int detect_page_process();
8int log_page_process();
9int setting_page_process();
10
11//菜單枚舉 
12typedef enum
13{
14    MAIN_PAGE = 0,
15    DETECT_PAGE,
16    LOG_PAGE,
17    SETTING_PAGE
18}MENU_INDEX;
19
20typedef int(*OPERATE_FUNC)();
21
22class MENU
23{

24    public:
25    MENU_INDEX index ;     //菜單索引
26    OPERATE_FUNC op_func ; //菜單對應(yīng)的函數(shù)
27};
28
29//構(gòu)造函數(shù)跳轉(zhuǎn)表
30static MENU OP_MENU_STRUCT[] = 
31{
32    {MAIN_PAGE   ,  main_page_process},
33    {DETECT_PAGE ,  detect_page_process},
34    {LOG_PAGE    ,  log_page_process},
35    {SETTING_PAGE,  setting_page_process},
36};
37
38int Goto_execute(int op)
39
{
40    if(op >= NR(OP_MENU_STRUCT) || op < 0)
41        return -1 ;
42    //根據(jù)索引值op,調(diào)用相應(yīng)的函數(shù)
43    return OP_MENU_STRUCT[op].op_func();
44}
45
46int main(int argc , char **argv)
47
{
48    char ch ;
49    int menu_index = 0;
50    while(1)
51    {
52        ch = getch();
53        if(ch == 'a')     //左鍵 
54           menu_index > 0 ? menu_index-- : menu_index = 0 ;
55        else if(ch == 'd')//右鍵 
56           menu_index < NR(OP_MENU_STRUCT) ? menu_index++ : menu_index = NR(OP_MENU_STRUCT);
57        //執(zhí)行菜單操作 
58        Goto_execute(menu_index);
59    }
60    return 0 ;
61
62
63int main_page_process()
64
{
65    cout << "主頁面" << endl ;
66}
67
68int detect_page_process()
69
{
70    cout << "檢測頁面" << endl ; 
71}
72
73int log_page_process()
74
{
75    cout << "記錄頁面" << endl ;
76}
77
78int setting_page_process()
79
{
80    cout << "設(shè)置頁面" << endl ;
81}

    如果圈友有什么更好的應(yīng)用框架,歡迎留言推薦,一起共同學(xué)習(xí)! 

    另外推薦一部近期出的典型巨作,冬瓜哥的大話計(jì)算機(jī),可以說是一部經(jīng)典了,雖然貴,但我也入手了一部,看了第一章,基本上我覺得可以秒殺國產(chǎn)同類書籍了,甚至可以類比國外的一些經(jīng)典書籍,強(qiáng)烈推薦入手! 


另外推薦相關(guān)課程:

  韋東山老師優(yōu)質(zhì)嵌入式學(xué)習(xí)干貨推薦:包括ARM裸機(jī)開發(fā)、Linux設(shè)備驅(qū)動程序、Linux應(yīng)用程序開發(fā)、Android系統(tǒng)學(xué)習(xí)、Linux設(shè)備樹等。


在我這里購買韋東山老師的課程還可得到本人的技術(shù)支持,手把手帶你學(xué)習(xí)嵌入式!

王爭老師優(yōu)秀數(shù)據(jù)結(jié)構(gòu)算法學(xué)習(xí)課程推薦


免責(zé)聲明:本文內(nèi)容由21ic獲得授權(quán)后發(fā)布,版權(quán)歸原作者所有,本平臺僅提供信息存儲服務(wù)。文章僅代表作者個(gè)人觀點(diǎn),不代表本平臺立場,如有問題,請聯(lián)系我們,謝謝!

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫?dú)角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

加利福尼亞州圣克拉拉縣2024年8月30日 /美通社/ -- 數(shù)字化轉(zhuǎn)型技術(shù)解決方案公司Trianz今天宣布,該公司與Amazon Web Services (AWS)簽訂了...

關(guān)鍵字: AWS AN BSP 數(shù)字化

倫敦2024年8月29日 /美通社/ -- 英國汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時(shí)1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動 BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運(yùn)行,同時(shí)企業(yè)卻面臨越來越多業(yè)務(wù)中斷的風(fēng)險(xiǎn),如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報(bào)道,騰訊和網(wǎng)易近期正在縮減他們對日本游戲市場的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會開幕式在貴陽舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

要點(diǎn): 有效應(yīng)對環(huán)境變化,經(jīng)營業(yè)績穩(wěn)中有升 落實(shí)提質(zhì)增效舉措,毛利潤率延續(xù)升勢 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競爭力 堅(jiān)持高質(zhì)量發(fā)展策略,塑強(qiáng)核心競爭優(yōu)勢...

關(guān)鍵字: 通信 BSP 電信運(yùn)營商 數(shù)字經(jīng)濟(jì)

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺與中國電影電視技術(shù)學(xué)會聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會上宣布正式成立。 活動現(xiàn)場 NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會上,軟通動力信息技術(shù)(集團(tuán))股份有限公司(以下簡稱"軟通動力")與長三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉