国产毛片a精品毛-国产毛片黄片-国产毛片久久国产-国产毛片久久精品-青娱乐极品在线-青娱乐精品

軟鍵盤(pán)產(chǎn)品界面顯示的通用程序設(shè)計(jì)

發(fā)布時(shí)間:2010-3-10 22:51    發(fā)布者:蹦蹦
可視頻程序的一個(gè)重要特點(diǎn)是:有大量的窗口、對(duì)話(huà)框等界面與用戶(hù)進(jìn)行交互,并根據(jù)用戶(hù)在界面上的操作進(jìn)行相應(yīng)的事務(wù)處理。設(shè)計(jì)良好的用戶(hù)界面不僅可以提高用戶(hù)與軟件的交互效率,而且可以減少用戶(hù)操作與控制狀態(tài)轉(zhuǎn)換出錯(cuò)的概率。好的設(shè)計(jì)界面不但要注意屏幕布局,更在充分理解待完成工作的基礎(chǔ)上,快速地構(gòu)架系統(tǒng)的有效結(jié)構(gòu),使編程人員有更多的精力去實(shí)現(xiàn)系統(tǒng)的處理功能。下面介紹一種在Nucleus仿真器MNT中快速實(shí)現(xiàn)產(chǎn)品界面設(shè)計(jì)的經(jīng)驗(yàn)。

1 系統(tǒng)分析

(1)問(wèn)題的由來(lái)
嵌入式系統(tǒng)是一種軟、硬件結(jié)合的產(chǎn)物。一個(gè)控制類(lèi)嵌入式產(chǎn)品的軟件開(kāi)發(fā)離不開(kāi)它所依賴(lài)的硬件環(huán)境。如今有了仿真軟件的支持,使得嵌入式系統(tǒng)軟件與硬件的開(kāi)發(fā)可以同時(shí)進(jìn)行,也因?yàn)榍度胧介_(kāi)發(fā)工具的強(qiáng)大,越來(lái)越多的軟鍵盤(pán)產(chǎn)品在不斷問(wèn)世。無(wú)論是仿真開(kāi)發(fā)硬鍵盤(pán)產(chǎn)品,還是開(kāi)發(fā)軟鍵盤(pán)產(chǎn)品,待開(kāi)發(fā)軟件除顯示界面之外,主要處理的是設(shè)備與外界環(huán)境的復(fù)雜交互。由于復(fù)合控制行為的數(shù)量和種類(lèi)都不可預(yù)測(cè),導(dǎo)致了這類(lèi)軟件設(shè)計(jì)非常復(fù)雜,此時(shí)使用常規(guī)設(shè)計(jì)方法,難于充分保證實(shí)現(xiàn)每種控制行為的組合,更難于保證控制界面的逐級(jí)返回。例如,當(dāng)開(kāi)發(fā)圖1所示的PDA軟鍵盤(pán)產(chǎn)品時(shí),其中每項(xiàng)功能的控制界面上都有眾多按鈕用于接受控制行為,根據(jù)用戶(hù)點(diǎn)擊行為的不同,進(jìn)入下一級(jí)不同的界面,或處理不同的事務(wù)。盡管有產(chǎn)品可能將固定鍵盤(pán)做成一組固定的硬件按鈕,但無(wú)論怎樣,這類(lèi)軟件都需要為不同的界面設(shè)計(jì)許多不同的控件,并處理控制行為對(duì)應(yīng)的事務(wù)。因此,開(kāi)發(fā)中快速地實(shí)現(xiàn)界面顯示,可保證有更多的精力處理所有控制行為對(duì)應(yīng)的事務(wù)。



圖1 PDA產(chǎn)品的主界面和部分功能操作界面

(2)狀態(tài)圖
美國(guó)ATI公司的Nucleus嵌入式操作系統(tǒng)是一個(gè)嵌入式系統(tǒng)開(kāi)發(fā)包。該軟件包借助Visual C++的調(diào)試器和編譯器進(jìn)行程序的調(diào)試與編譯,基本控制語(yǔ)句標(biāo)準(zhǔn)C語(yǔ)句。使用其中的Nucleus MNT仿真器提供的專(zhuān)用庫(kù)函數(shù),可以實(shí)現(xiàn)產(chǎn)品開(kāi)發(fā)。
為了編寫(xiě)PDA的控制軟件,首先分析整個(gè)產(chǎn)品的功能,并以狀態(tài)轉(zhuǎn)換圖進(jìn)行描述。圖2是系統(tǒng)記事本部分狀態(tài)轉(zhuǎn)換圖。



圖2 系統(tǒng)記束本部分狀態(tài)轉(zhuǎn)換圖

2 系統(tǒng)的實(shí)現(xiàn)

2.1 數(shù)據(jù)結(jié)構(gòu)的建立

通過(guò)對(duì)狀態(tài)圖的分析得知,整個(gè)系統(tǒng)有38種功能不同的控件,共70個(gè)。在不同的界面上發(fā)生的不同控制行為決定了系統(tǒng)的不同轉(zhuǎn)移狀態(tài),并啟動(dòng)響應(yīng)事務(wù)處理。假設(shè)全部的數(shù)據(jù)結(jié)構(gòu)預(yù)先定義在pda_init.h文件中,為了完成系統(tǒng)設(shè)計(jì),主要需要設(shè)計(jì)如下數(shù)據(jù)結(jié)構(gòu):控件數(shù)組、狀態(tài)控件鏈、顯示狀態(tài)鏈、顯示狀態(tài)棧。

(1)控件數(shù)組
在Nucleus MNT中,用Window CreateWindow(int wClass,char*ttl,int x,int y,int w,int h,int(*wndProc)(),unsigned long attrib)和CTRL *Control(Window wnd,int type,char name[],int x,int y,int w,int h,int id)函數(shù),可分別創(chuàng)建窗口窗的各種控件,所以設(shè)計(jì)了一個(gè)二維int型控件數(shù)組。其中存儲(chǔ)的是70個(gè)控件的相關(guān)參數(shù),函數(shù)調(diào)用時(shí),直接引用控件數(shù)組的不同分量就可以顯示出不同的控制界面。控件數(shù)組的定義格式為:static int Controls[70][7];
        

控件屬性偏移值LeftTopWidthHeightID
Controls[X][Y]Y=0Y=1Y=2Y=3Y=4Y=5Y=6

Controls[X][0]:控件屬性,表示控件的類(lèi)型。例如,0表示按鈕,13表示文本輸入框,23表示圖片,29表示靜態(tài)文本框,51表示中英字符的三塊鍵盤(pán),52表示數(shù)字小鍵盤(pán),53表示號(hào)碼查詢(xún)鍵盤(pán),54表示計(jì)算器鍵盤(pán)。
Controls[X][1]:控件偏移植。作用是區(qū)分或設(shè)定同一類(lèi)型不同控件的編號(hào)。編號(hào)從0開(kāi)始。例如,對(duì)于系統(tǒng)中的17個(gè)按鈕可分別設(shè)置為
{0,0,50,110,60,20,5501},
{0,1,150,110,60,20,5502},
……
{0,16,230,160,35,40,5517}
系統(tǒng)的21個(gè)靜態(tài)文本框分別設(shè)置為
{29,17,10,15,50,30,5601},
{29,35,10,40,50,30,5619},
……
{29,38,10,15,50,30,5622},
偏移值指定的內(nèi)容是需要顯示的字符串,如圖3所示。



Controls[X][2]:控件距所處窗處左邊界的距離。
Controls[X][3]:控件距所處窗體右邊界的距離。
Controls[X][4]:控件的寬度。
Controls[X][5]:控件的高度。
Controls[X][6]:控件的標(biāo)識(shí)號(hào)碼,為了系統(tǒng)調(diào)用方便而取的編號(hào)。

圖4 界面控件鏈

(2)狀態(tài)控件鏈
控件鏈(static int StateControlList[53][6])是一個(gè)動(dòng)態(tài)的單向鏈表結(jié)構(gòu)。在應(yīng)用程序初始化階段,根據(jù)對(duì)pda_init.h文件中定義的界面控件靜態(tài)數(shù)組的遍歷動(dòng)態(tài)生成。當(dāng)程序進(jìn)入某個(gè)界面時(shí),只要循環(huán)顯示該鏈表中的控件即可。
Static int StateControlList[53][6]數(shù)組的具體定義格式如下:
    

Y=0Y=1Y=2Y=3Y=4Y=5
StateControlList[X][Y]控件1控件2控件3控件4控件5控件6
StateControlList[1][6]464748490NU

其中“控件1”、“控件2”……表示當(dāng)前狀態(tài)的第一、第二等控件。數(shù)據(jù)“46”表示控件數(shù)組的第47個(gè)控件,與Controls[46][Y]數(shù)組中的內(nèi)容相對(duì)應(yīng)。“0”是控件結(jié)束標(biāo)志,“NULL”表示沒(méi)有數(shù)據(jù)。
為了處理方面,在程序初始化的過(guò)程中,假設(shè)這個(gè)靜態(tài)數(shù)組生成了一個(gè)單向鏈表數(shù)組,PDAStateControlsList[53]。具體格式如圖4所示。



該鏈表的每個(gè)節(jié)點(diǎn)是一個(gè)pdacontrolslist型常量,具體結(jié)構(gòu)如下:
struct pdacontrolslist //以下的“X”為控件數(shù)組的編號(hào)
{
int propertyvalue; //控件屬性值,大小等于Controls[X][0]
int default_flag; //缺省偏移值,大小等于Controls[X][1]
int x; //控件距窗體左邊界位置,大小等于Controls[X][2]
int y; //控件距離窗體上邊界位置,大小等于Controls[X][3]
in w; //控件寬度,大小等于Controls[X][4]
int h; //控件高度,大小等于Controls[X][5]
int idvalue; //控件的id值,大小等于Controls[X][6]
struct pdacontrolslist *next; //指向下一條記錄
};

(3)顯示狀態(tài)鏈

系統(tǒng)各種狀態(tài)之間的轉(zhuǎn)換用顯示狀態(tài)鏈(static int ShowStateList[22][11])進(jìn)行控制。它是一個(gè)動(dòng)態(tài)結(jié)構(gòu)的雙向鏈表,在應(yīng)用程序初始化階段,遍歷pda_init.h文件中定義的狀態(tài)轉(zhuǎn)換順序靜態(tài)數(shù)組,動(dòng)態(tài)生成該狀態(tài)鏈。這種數(shù)據(jù)結(jié)構(gòu)為電話(huà)簿和記事本的添加和修改操作提供了方便。由于電話(huà)簿和記事本的操作狀態(tài)轉(zhuǎn)換是單向的,所以采用雙向鏈表結(jié)構(gòu)實(shí)現(xiàn)線(xiàn)性狀態(tài)的前后續(xù)狀態(tài)轉(zhuǎn)換。
Static int ShowStateList[22][11]數(shù)組的具體定義格式如下:
      

Y=0Y=1Y=2Y=3Y=4 Y=11
ShowStateList[X][Y]狀態(tài)1狀態(tài)2狀態(tài)3狀態(tài)4狀態(tài)5狀態(tài)11
ShowStateList[10][11]3839400NULLNULL

其中“狀態(tài)1,2,3……”依次表示當(dāng)前狀態(tài)鏈的不同狀態(tài)。“0”是結(jié)束標(biāo)志,“NULL”表示沒(méi)有數(shù)據(jù)。
在程序初始化的過(guò)程中,由這個(gè)靜態(tài)數(shù)組生成一個(gè)雙向鏈表數(shù)組OperationStates[22]。雙向鏈表的每個(gè)節(jié)點(diǎn)數(shù)據(jù)域是一個(gè)整型常量。它的值等于與其相對(duì)應(yīng)的狀態(tài)控件鏈數(shù)組(PDAStateControlsList[53])的下標(biāo)值。例如,如果節(jié)點(diǎn)的數(shù)據(jù)域?yàn)?2,則對(duì)應(yīng) PDAStateControlsList[12]狀態(tài)控件鏈。具體的生成格式如圖5所示。



(4)顯示狀態(tài)棧
顯示狀態(tài)棧存放的數(shù)據(jù)是顯示狀態(tài)編號(hào)。具體數(shù)據(jù)是從初始狀態(tài)到達(dá)當(dāng)前狀態(tài)所經(jīng)過(guò)的所有狀態(tài),棧數(shù)據(jù)處理由int StateStackPop()、intStateStackGet()、void StateStackPush(int a)三個(gè)函數(shù)實(shí)現(xiàn)。具體處理情況如圖6所示。



2.2 編程實(shí)現(xiàn)

有了以上一套數(shù)據(jù)結(jié)構(gòu)之后,具體編寫(xiě)程序代碼時(shí),根據(jù)不同功能所要完成的任務(wù)和使用的數(shù)據(jù)結(jié)構(gòu),可歸類(lèi)待編寫(xiě)模塊,從而提供代碼復(fù)用率。如電話(huà)簿和記事本就可以共用同一套程序代碼。因此,關(guān)于PDA的所有系統(tǒng)模塊劃分如圖7所示。



系統(tǒng)各個(gè)模塊間的連接用狀態(tài)棧以及一些公共變量實(shí)現(xiàn),根據(jù)狀態(tài)棧的信息確定工作到了哪個(gè)狀態(tài),根據(jù)公共變量獲得完成操作所需要的信息。程序每進(jìn)入一個(gè)新模塊調(diào)用的通用處理函數(shù),先屏蔽主界面上固定鍵盤(pán)內(nèi)的所有按鈕,再顯示本界面的按鈕,最后將固定按鈕連接到進(jìn)入模塊的處理函數(shù)中,實(shí)現(xiàn)固定鍵盤(pán)操作含義的轉(zhuǎn)變。

3 小結(jié)

利用狀態(tài)圖分析和以上定義的數(shù)據(jù)結(jié)構(gòu),可以進(jìn)行任何界面的顯示。這種編程方法有兩大優(yōu)點(diǎn)。
①快速方便地完成界面的任意修改。當(dāng)需要改變界面時(shí),只要改變控制數(shù)組中的值和控件靜態(tài)數(shù)組中的值即可,無(wú)需修改任何代碼。
②擴(kuò)展嵌入式系統(tǒng)功能。只要進(jìn)一步進(jìn)行狀態(tài)圖分析,把新功能的狀態(tài)順序關(guān)系填寫(xiě)到狀態(tài)鏈數(shù)組中,就可以完成新功能的進(jìn)入和返回。

參考文獻(xiàn)

   1. 李建兵.來(lái)衛(wèi)國(guó) 嵌入式系統(tǒng)編程中的代碼優(yōu)化單片機(jī)與嵌入式系統(tǒng)應(yīng)用 2002(6)
   2. Lucy Lockwood.UML China翻組 掌握項(xiàng)目界面設(shè)計(jì)的可用性規(guī)則 2002(2)
   3. Rick Grehan.許汝峰 32位嵌入式系統(tǒng)編程 2001
   4. 探矽工作室 嵌入式系統(tǒng)圣經(jīng) 2002
   5. 嚴(yán)蔚敏.吳偉民 數(shù)據(jù)結(jié)構(gòu) 1992
   6. 旋極公司 Nucleus系統(tǒng)文檔

作 者:北京電子科技學(xué)院 章小莉 宋燕紅 北京工業(yè)大學(xué) 王佳寧  
來(lái) 源:?jiǎn)纹瑱C(jī)與嵌入式系統(tǒng)應(yīng)用 2003(8)
本文地址:http://m.qingdxww.cn/thread-9197-1-1.html     【打印本頁(yè)】

本站部分文章為轉(zhuǎn)載或網(wǎng)友發(fā)布,目的在于傳遞和分享信息,并不代表本網(wǎng)贊同其觀點(diǎn)和對(duì)其真實(shí)性負(fù)責(zé);文章版權(quán)歸原作者及原出處所有,如涉及作品內(nèi)容、版權(quán)和其它問(wèn)題,我們將根據(jù)著作權(quán)人的要求,第一時(shí)間更正或刪除。
您需要登錄后才可以發(fā)表評(píng)論 登錄 | 立即注冊(cè)

廠(chǎng)商推薦

  • Microchip視頻專(zhuān)區(qū)
  • 安靜高效的電機(jī)控制——這才是正確的方向!
  • 無(wú)線(xiàn)充電基礎(chǔ)知識(shí)及應(yīng)用培訓(xùn)教程3
  • 無(wú)線(xiàn)充電基礎(chǔ)知識(shí)及應(yīng)用培訓(xùn)教程2
  • 5分鐘詳解定時(shí)器/計(jì)數(shù)器E和波形擴(kuò)展!
  • 貿(mào)澤電子(Mouser)專(zhuān)區(qū)

相關(guān)視頻

關(guān)于我們  -  服務(wù)條款  -  使用指南  -  站點(diǎn)地圖  -  友情鏈接  -  聯(lián)系我們
電子工程網(wǎng) © 版權(quán)所有   京ICP備16069177號(hào) | 京公網(wǎng)安備11010502021702
快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 日韩欧美色视频 | 丁香婷婷亚洲 | 国产在线播放网址 | 麻豆国内精品久久久久久 | 欧美另类视频在线观看 | 中文字幕在线一区二区在线 | 四虎永久在线精品波多野结衣 | 91极品尤物在线观看 | 欧美午夜精品久久久久免费视 | 91免费国产在线观看尤物 | 五月伊人网 | 久久国产精品一区二区三区 | 啪影院免费线在线观看 | 伊人9999| 免费看日本羞羞视频 | 麻豆久久 | 羞羞官网 | 在线视频91 | 亚洲色图视频在线 | 9cao视频精品 | 蓝月战士奥特曼免费看 | 欧美男女网站 | 成在线人免费视频一区二区三区 | 日韩一级黄色毛片 | 国产亚洲精品自在久久77 | 一区二区三区亚洲视频 | 老司机在线精品视频 | 男人色网站 | 日本成人一区二区三区 | 老司机狠狠k免费毛片 | 欧美图片在线观看 | 自拍偷拍第一页 | 91欧美一区二区三区综合在线 | 免费一区二区三区久久 | 成人精品视频一区二区三区尤物 | 四虎国产精品永久在线播放 | h番无遮挡动漫在线观看 | 欧洲一区二区 | 天天在线精品视频在线观看 | 国产在线观看青草视频 | 激情五月开心婷婷 |