專(zhuān)利名稱(chēng):一種基于嵌入式Linux的桌面系統(tǒng)的實(shí)現(xiàn)方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種基于嵌入式Linux的桌面系統(tǒng)的實(shí)現(xiàn)方法,屬于計(jì)算機(jī)嵌入式技術(shù)領(lǐng)域。
背景技術(shù):
隨著嵌入式應(yīng)用的日益普及,業(yè)界對(duì)嵌入式操作系統(tǒng)用戶(hù)界面美觀(guān)性等諸多方面提出了更高的要求,而桌面環(huán)境為操作系統(tǒng)提供一個(gè)更加完善的界面以及大量各類(lèi)整合工具和應(yīng)用程序,由于嵌入式系統(tǒng)軟硬資源的局限性,臺(tái)式機(jī)上成熟、龐大的桌面系統(tǒng)不適合應(yīng)用到嵌入式設(shè)備上。在嵌入式設(shè)備上研究與實(shí)現(xiàn)輕量級(jí)的桌面環(huán)境具有十分重要的現(xiàn)實(shí)意義。如專(zhuān)利號(hào)為CN01141429. 4、發(fā)明名稱(chēng)為“在實(shí)時(shí)多任務(wù)操作系統(tǒng)中建立嵌入式圖形化用戶(hù)界面的方法”的專(zhuān)利即屬于此列。
目前嵌入式Linux平臺(tái)的主流GUI (Graphical User hterface,簡(jiǎn)稱(chēng)GUI,又稱(chēng)圖形用戶(hù)接口 )主要包括 MiniGUI、Microwindows、OpenGUI、Qt/Embedded,這些接口在接口定義、體系結(jié)構(gòu)、功能特性存在很大差別,采取的技術(shù)路線(xiàn)也有所不同。
Mini⑶I是建立在比較成熟的圖形引擎之上,開(kāi)發(fā)的重點(diǎn)在于窗口系統(tǒng),其小巧精致并且盡量與Win32兼容。MicroWindows目前開(kāi)發(fā)的重點(diǎn)在底層的圖形引擎,窗口系統(tǒng)和圖形接口方面功能比較欠缺,與Win32和XWindows窗口系統(tǒng)保持兼容,提供了相對(duì)完善的圖形功能。Open⑶I基于一個(gè)用匯編實(shí)現(xiàn)的x86圖形內(nèi)核,提供了一個(gè)高層的C、C++圖形窗口接口,它的資源消耗小,可移植性差,不支持多進(jìn)程。
Qt/Embedded是一個(gè)多平臺(tái)的C++圖形用戶(hù)界面應(yīng)用程序框架,其對(duì)象容易擴(kuò)展, 可移植性好,支持多個(gè)⑶I平臺(tái)的交互開(kāi)發(fā)?,F(xiàn)在,Qt/Embedded被廣泛地應(yīng)用于各種嵌入式產(chǎn)品和設(shè)備中,從消費(fèi)電器(如智能手機(jī)、機(jī)頂盒)到工業(yè)控制設(shè)備(如醫(yī)學(xué)成像設(shè)備、 移動(dòng)信息等)。
傳統(tǒng)的GUI雖然對(duì)桌面環(huán)境所有特性都支持的比較好,但是所帶來(lái)的系統(tǒng)開(kāi)銷(xiāo)非常大,開(kāi)發(fā)周期太長(zhǎng),界面風(fēng)格不太容易被用戶(hù)接受。發(fā)明內(nèi)容
針對(duì)現(xiàn)有技術(shù)存在的缺陷和不足,本發(fā)明提供了一種基于嵌入式Linux的桌面系統(tǒng)的實(shí)現(xiàn)方法。
本發(fā)明的技術(shù)方案如下
一種基于嵌入式Linux的桌面系統(tǒng)的實(shí)現(xiàn)方法,桌面系統(tǒng)用C++語(yǔ)言編寫(xiě),包括窗口管理器模塊和桌面管理器模塊兩大功能模塊;窗口管理器模塊包括窗口管理模塊、窗口堆棧維護(hù)模塊和窗口主題風(fēng)格變換模塊,窗口管理模塊需要處理的事件包括鼠標(biāo)左鍵按下事件、鼠標(biāo)左鍵放開(kāi)事件、窗口變化事件;桌面管理器模塊分為桌面快捷圖標(biāo)模塊和系統(tǒng)托盤(pán)模塊;嵌入式Linux的桌面系統(tǒng)的實(shí)現(xiàn)方法如下
所述的鼠標(biāo)左鍵按下事件處理流程如下1、開(kāi)始;2、檢測(cè)到鼠標(biāo)左鍵按下;3、設(shè)置所點(diǎn)擊的窗口屬性為活動(dòng)窗口;4、保存鼠標(biāo)相對(duì)于活動(dòng)窗口的位置;5、結(jié)束ο所述的鼠標(biāo)左鍵放開(kāi)事件處理流程如下1、開(kāi)始;2、檢測(cè)到鼠標(biāo)左鍵放開(kāi);3、判斷點(diǎn)擊的窗口屬性是否為活動(dòng)窗口,如果是則轉(zhuǎn)入步驟4,如果不是則轉(zhuǎn)入步4、判斷鼠標(biāo)點(diǎn)擊區(qū)域,如果是關(guān)閉按鈕區(qū)域則轉(zhuǎn)入步驟5,如果是最小化按鈕區(qū)域入步驟6,如果是最大化按鈕區(qū)域則轉(zhuǎn)入步驟7 ;5、關(guān)閉窗口;6、最小化窗口;7、最大化窗口;8、結(jié)束ο所述的窗口變化事件處理流程如下1、開(kāi)始;2、檢測(cè)到窗口變化;3、判斷窗口屬性是否是活動(dòng)窗口,如果是則轉(zhuǎn)入步驟4,如果不是則轉(zhuǎn)入步驟10;4、判斷是否是窗口移動(dòng),如果是則轉(zhuǎn)入步驟5,如果不是則轉(zhuǎn)入步驟7;5、根據(jù)鼠標(biāo)移動(dòng)的大小計(jì)算窗口的x、y坐標(biāo)的位移;6、根據(jù)計(jì)算值移動(dòng)窗口;7、判斷是否是窗口改變大小,如果是則轉(zhuǎn)入步驟8,如果不是則轉(zhuǎn)入步驟10;8、根據(jù)鼠標(biāo)所在的位置以及鼠標(biāo)移動(dòng)的大小計(jì)算窗口寬度和高度的位移;9、根據(jù)計(jì)算值改變窗口大??;10、結(jié)束。所述的窗口堆棧維護(hù)模塊運(yùn)行步驟如下1、開(kāi)始;2、用戶(hù)選擇窗口切換;3、判斷是否是全屏窗口,如果是則轉(zhuǎn)入步驟4,如果不是則轉(zhuǎn)入步驟5;4、隱藏其它窗口;5、將該窗口提升到最頂端;6、結(jié)束ο所述的窗口主題風(fēng)格變換模塊運(yùn)行步驟如下1、開(kāi)始;2、用戶(hù)選擇切換窗口主題風(fēng)格,觸發(fā)窗口主題風(fēng)格變化事件;3、把用戶(hù)選擇的窗口主題風(fēng)格映射成字符串;4、窗口主題風(fēng)格模塊根據(jù)接收到的字符串查找對(duì)應(yīng)在風(fēng)格文件中的風(fēng)格名字,如果沒(méi)有查找到則轉(zhuǎn)入步驟8,如果查找到則轉(zhuǎn)入步驟5 ;
5、根據(jù)風(fēng)格名字查找該類(lèi)風(fēng)格需要的圖標(biāo);
6、查找對(duì)應(yīng)的數(shù)據(jù)結(jié)構(gòu);
7、根據(jù)數(shù)據(jù)結(jié)構(gòu)查找圖標(biāo)文件,如果沒(méi)有查找到則轉(zhuǎn)入步驟8,如果查找到則轉(zhuǎn)入步驟9 ;
8、加載默認(rèn)主題風(fēng)格;
9、加載用戶(hù)選擇的主題風(fēng)格;
10、切換窗口主題風(fēng)格;
11、結(jié)束。
所述的桌面快捷圖標(biāo)模塊運(yùn)行步驟如下
1、開(kāi)始;
2、讀取配置文件;
3、創(chuàng)建窗口;
4、根據(jù)配置文件中應(yīng)用程序類(lèi)型顯示圖標(biāo)和文字到桌面;
5、用戶(hù)點(diǎn)擊鼠標(biāo),進(jìn)入事件處理;
6、釋放用到的資源;
7、結(jié)束。
所述的系統(tǒng)托盤(pán)模塊運(yùn)行步驟如下
1、開(kāi)始;
2、獲取管理程序選擇區(qū)域;
3、設(shè)置窗口屬性獨(dú)占屏幕區(qū)域;
4、讀取應(yīng)用程序,啟動(dòng)配置文件;
5、接收事件;
6、判斷是否是操作碼消息,如果是則轉(zhuǎn)入步驟7,如果不是則轉(zhuǎn)入步驟9 ;
7、讀取操作碼;
8、開(kāi)始顯示消息菜單;
9、判斷是否改變圖標(biāo)顯示,如果是則轉(zhuǎn)入步驟10,如果不是則轉(zhuǎn)入步驟11 ;
10、改變圖標(biāo)顯示順序;
11、結(jié)束。
本發(fā)明實(shí)現(xiàn)了一種基于嵌入式Linux的桌面系統(tǒng),本系統(tǒng)開(kāi)銷(xiāo)較小,系統(tǒng)穩(wěn)定,易于維護(hù)且提供良好的用戶(hù)操作界面。
圖1是桌面系統(tǒng)的整體結(jié)構(gòu)框圖。
圖2是鼠標(biāo)左鍵按下事件處理流程圖。
圖3是鼠標(biāo)左鍵放開(kāi)事件處理流程圖。
圖4是窗口變化事件處理流程圖。
圖5是窗口堆棧維護(hù)模塊處理流程圖。
圖6是窗口主題風(fēng)格變換模塊處理流程圖。
圖7是桌面快捷圖標(biāo)模塊處理流程圖。
圖8是系統(tǒng)托盤(pán)模塊處理流程圖。
其中,1、應(yīng)用程序,2、桌面快捷圖標(biāo)模塊,3、桌面管理器模塊,4、系統(tǒng)托盤(pán)模塊,5、 窗口管理模塊,6、窗口堆棧維護(hù)模塊,7、窗口主題風(fēng)格變換模塊,8、窗口管理器模塊。
具體實(shí)施例方式
下面結(jié)合附圖和實(shí)施例對(duì)本發(fā)明做進(jìn)一步說(shuō)明,但不限于此。
實(shí)施例
一種基于嵌入式Linux的桌面系統(tǒng)的實(shí)現(xiàn)方法,桌面系統(tǒng)的整體結(jié)構(gòu)如圖1所示, 實(shí)現(xiàn)方法流程圖如圖2-圖8所示,桌面系統(tǒng)用C++語(yǔ)言編寫(xiě),包括窗口管理器模塊(8)和桌面管理器模塊⑶兩大功能模塊;窗口管理器模塊⑶包括窗口管理模塊(5)、窗口堆棧維護(hù)模塊(6)和窗口主題風(fēng)格變換模塊(7),窗口管理模塊( 需要處理的事件包括鼠標(biāo)左鍵按下事件、鼠標(biāo)左鍵放開(kāi)事件、窗口變化事件;桌面管理器模塊C3)分為桌面快捷圖標(biāo)模塊(2)和系統(tǒng)托盤(pán)模塊;嵌入式Linux的桌面系統(tǒng)的實(shí)現(xiàn)方法如下
所述的鼠標(biāo)左鍵按下事件處理流程如下
1、開(kāi)始;
2、檢測(cè)到鼠標(biāo)左鍵按下;
3、設(shè)置所點(diǎn)擊的窗口屬性為活動(dòng)窗口 ;
4、保存鼠標(biāo)相對(duì)于活動(dòng)窗口的位置;
5、結(jié)束。
所述的鼠標(biāo)左鍵放開(kāi)事件處理流程如下
1、開(kāi)始;
2、檢測(cè)到鼠標(biāo)左鍵放開(kāi);
3、判斷點(diǎn)擊的窗口屬性是否為活動(dòng)窗口,如果是則轉(zhuǎn)入步驟4,如果不是則轉(zhuǎn)入步驟8 ;
4、判斷鼠標(biāo)點(diǎn)擊區(qū)域,如果是關(guān)閉按鈕區(qū)域則轉(zhuǎn)入步驟5,如果是最小化按鈕區(qū)域則轉(zhuǎn)入步驟6,如果是最大化按鈕區(qū)域則轉(zhuǎn)入步驟7 ;0099]5、關(guān)閉窗口 ;0100]6、最小化窗口 ;0101]7、最大化窗口 ;0102]8、結(jié)束ο0103]所述的窗口變化事件處理流程如下0104]1、開(kāi)始;0105]2、檢測(cè)到窗口變化;0106]3、判斷窗口屬性是否是活動(dòng)窗口,如果是則轉(zhuǎn)入步驟4,如果不是則轉(zhuǎn)入步驟100107]4、判斷是否是窗口移動(dòng),如果是則轉(zhuǎn)入步驟5,如果不是則轉(zhuǎn)入步驟7 ;0108]5、根據(jù)鼠標(biāo)移動(dòng)的大小計(jì)算窗口的x、y坐標(biāo)的位移;0109]6、根據(jù)計(jì)算值移動(dòng)窗口 ;0110]7、判斷是否是窗口改變大小,如果是則轉(zhuǎn)入步驟8,如果不是則轉(zhuǎn)入步驟10 ;
8、根據(jù)鼠標(biāo)所在的位置以及鼠標(biāo)移動(dòng)的大小計(jì)算窗口寬度和高度的位移;
9、根據(jù)計(jì)算值改變窗口大?。?br>
10、結(jié)束。
所述的窗口堆棧維護(hù)模塊運(yùn)行步驟如下
1、開(kāi)始;
2、用戶(hù)選擇窗口切換;
3、判斷是否是全屏窗口,如果是則轉(zhuǎn)入步驟4,如果不是則轉(zhuǎn)入步驟5 ;
4、隱藏其它窗口 ;
5、將該窗口提升到最頂端;
6、結(jié)束。
所述的窗口主題風(fēng)格變換模塊運(yùn)行步驟如下
1、開(kāi)始;
2、用戶(hù)選擇切換窗口主題風(fēng)格,觸發(fā)窗口主題風(fēng)格變化事件;
3、把用戶(hù)選擇的窗口主題風(fēng)格映射成字符串;
4、窗口主題風(fēng)格模塊根據(jù)接收到的字符串查找對(duì)應(yīng)在風(fēng)格文件中的風(fēng)格名字,如果沒(méi)有查找到則轉(zhuǎn)入步驟8,如果查找到則轉(zhuǎn)入步驟5 ;
5、根據(jù)風(fēng)格名字查找該類(lèi)風(fēng)格需要的圖標(biāo);
6、查找對(duì)應(yīng)的數(shù)據(jù)結(jié)構(gòu);
7、根據(jù)數(shù)據(jù)結(jié)構(gòu)查找圖標(biāo)文件,如果沒(méi)有查找到則轉(zhuǎn)入步驟8,如果查找到則轉(zhuǎn)入步驟9 ;
8、加載默認(rèn)主題風(fēng)格;
9、加載用戶(hù)選擇的主題風(fēng)格;
10、切換窗口主題風(fēng)格;
11、結(jié)束。
所述的桌面快捷圖標(biāo)模塊運(yùn)行步驟如下
1、開(kāi)始;
2、讀取配置文件;
3、創(chuàng)建窗口 ;
4、根據(jù)配置文件中應(yīng)用程序類(lèi)型顯示圖標(biāo)和文字到桌面;
5、用戶(hù)點(diǎn)擊鼠標(biāo),進(jìn)入事件處理;
6、釋放用到的資源;
7、結(jié)束。
所述的系統(tǒng)托盤(pán)模塊運(yùn)行步驟如下
1、開(kāi)始;
2、獲取管理程序選擇區(qū)域;
3、設(shè)置窗口屬性獨(dú)占屏幕區(qū)域;
4、讀取應(yīng)用程序,啟動(dòng)配置文件;
5、接收事件;
6、判斷是否是操作碼消息,如果是則轉(zhuǎn)入步驟7,如果不是則轉(zhuǎn)入步驟9 ;
7、讀取操作碼;
8、開(kāi)始顯示消息菜單;
9、判斷是否改變圖標(biāo)顯示,如果是則轉(zhuǎn)入步驟10,如果不是則轉(zhuǎn)入步驟11 ;
10、改變圖標(biāo)顯示順序;
11、結(jié)束。
權(quán)利要求
1. 一種基于嵌入式Linux的桌面系統(tǒng)的實(shí)現(xiàn)方法,桌面系統(tǒng)用C++語(yǔ)言編寫(xiě),包括窗口管理器模塊和桌面管理器模塊兩大功能模塊;窗口管理器模塊包括窗口管理模塊、窗口堆棧維護(hù)模塊和窗口主題風(fēng)格變換模塊,窗口管理模塊需要處理的事件包括鼠標(biāo)左鍵按下事件、鼠標(biāo)左鍵放開(kāi)事件、窗口變化事件;桌面管理器模塊分為桌面快捷圖標(biāo)模塊和系統(tǒng)托盤(pán)模塊;其特征在于,嵌入式Linux的桌面系統(tǒng)的實(shí)現(xiàn)方法如下 所述的鼠標(biāo)左鍵按下事件處理流程如下\1、開(kāi)始;\2、檢測(cè)到鼠標(biāo)左鍵按下;\3、設(shè)置所點(diǎn)擊的窗口屬性為活動(dòng)窗口;\4、保存鼠標(biāo)相對(duì)于活動(dòng)窗口的位置;\5、結(jié)束ο所述的鼠標(biāo)左鍵放開(kāi)事件處理流程如下\1、開(kāi)始;\2、檢測(cè)到鼠標(biāo)左鍵放開(kāi);\3、判斷點(diǎn)擊的窗口屬性是否為活動(dòng)窗口,如果是則轉(zhuǎn)入步驟4,如果不是則轉(zhuǎn)入步驟\8 \4、判斷鼠標(biāo)點(diǎn)擊區(qū)域,如果是關(guān)閉按鈕區(qū)域則轉(zhuǎn)入步驟5,如果是最小化按鈕區(qū)域則轉(zhuǎn)入步驟6,如果是最大化按鈕區(qū)域則轉(zhuǎn)入步驟7 ;\5、關(guān)閉窗口;\6、最小化窗口;\7、最大化窗口;\8、結(jié)束ο所述的窗口變化事件處理流程如下\1、開(kāi)始;\2、檢測(cè)到窗口變化;\3、判斷窗口屬性是否是活動(dòng)窗口,如果是則轉(zhuǎn)入步驟4,如果不是則轉(zhuǎn)入步驟10;\4、判斷是否是窗口移動(dòng),如果是則轉(zhuǎn)入步驟5,如果不是則轉(zhuǎn)入步驟7;\\5、根據(jù)鼠標(biāo)移動(dòng)的大小計(jì)算窗口的x、y坐標(biāo)的位移;\6、根據(jù)計(jì)算值移動(dòng)窗口;\7、判斷是否是窗口改變大小,如果是則轉(zhuǎn)入步驟8,如果不是則轉(zhuǎn)入步驟10;\8、根據(jù)鼠標(biāo)所在的位置以及鼠標(biāo)移動(dòng)的大小計(jì)算窗口寬度和高度的位移;\9、根據(jù)計(jì)算值改變窗口大小;\10、結(jié)束。所述的窗口堆棧維護(hù)模塊運(yùn)行步驟如下\1、開(kāi)始;\2、用戶(hù)選擇窗口切換;\3、判斷是否是全屏窗口,如果是則轉(zhuǎn)入步驟4,如果不是則轉(zhuǎn)入步驟5;\4、隱藏其它窗口;\5、將該窗口提升到最頂端;·6、結(jié)束所述的窗口主題風(fēng)格變換模塊運(yùn)行步驟如下·1、開(kāi)始;·2、用戶(hù)選擇切換窗口主題風(fēng)格,觸發(fā)窗口主題風(fēng)格變化事件;·3、把用戶(hù)選擇的窗口主題風(fēng)格映射成字符串;·4、窗口主題風(fēng)格模塊根據(jù)接收到的字符串查找對(duì)應(yīng)在風(fēng)格文件中的風(fēng)格名字,如果沒(méi)有查找到則轉(zhuǎn)入步驟8,如果查找到則轉(zhuǎn)入步驟5 ;·5、根據(jù)風(fēng)格名字查找該類(lèi)風(fēng)格需要的圖標(biāo);·6、查找對(duì)應(yīng)的數(shù)據(jù)結(jié)構(gòu);·7、根據(jù)數(shù)據(jù)結(jié)構(gòu)查找圖標(biāo)文件,如果沒(méi)有查找到則轉(zhuǎn)入步驟8,如果查找到則轉(zhuǎn)入步驟·9 ;·8、加載默認(rèn)主題風(fēng)格;·9、加載用戶(hù)選擇的主題風(fēng)格;·10、切換窗口主題風(fēng)格;·11、結(jié)束ο所述的桌面快捷圖標(biāo)模塊運(yùn)行步驟如下·1、開(kāi)始;·2、讀取配置文件;·3、創(chuàng)建窗口;·4、根據(jù)配置文件中應(yīng)用程序類(lèi)型顯示圖標(biāo)和文字到桌面;·5、用戶(hù)點(diǎn)擊鼠標(biāo),進(jìn)入事件處理;·6、釋放用到的資源;·7、結(jié)束ο所述的系統(tǒng)托盤(pán)模塊運(yùn)行步驟如下·1、開(kāi)始;·2、獲取管理程序選擇區(qū)域;·3、設(shè)置窗口屬性獨(dú)占屏幕區(qū)域;·4、讀取應(yīng)用程序,啟動(dòng)配置文件;·5、接收事件;·6、判斷是否是操作碼消息,如果是則轉(zhuǎn)入步驟7,如果不是則轉(zhuǎn)入步驟9;·7、讀取操作碼;·8、開(kāi)始顯示消息菜單;·9、判斷是否改變圖標(biāo)顯示,如果是則轉(zhuǎn)入步驟10,如果不是則轉(zhuǎn)入步驟11;·10、改變圖標(biāo)顯示順序;·11、結(jié)束ο
全文摘要
一種基于嵌入式Linux的桌面系統(tǒng)及其實(shí)現(xiàn)方法,屬于計(jì)算機(jī)嵌入式技術(shù)領(lǐng)域。桌面系統(tǒng)分為窗口管理器和桌面管理器兩大功能模塊。窗口管理器模塊分為窗口管理、窗口堆棧維護(hù)和窗口主題風(fēng)格變換模塊,它的主要功能包括管理應(yīng)用程序創(chuàng)建的頂層窗口,維護(hù)頂層窗口堆棧順序,對(duì)頂層窗口進(jìn)行外觀(guān)修飾等。桌面管理器模塊分為桌面快捷圖標(biāo)、系統(tǒng)托盤(pán)模塊,可以設(shè)計(jì)擴(kuò)展控件來(lái)支持多個(gè)桌面顯示;顯示指示特定狀態(tài)的瞬時(shí)圖標(biāo)以及一些消息菜單。它具備以下特點(diǎn)系統(tǒng)結(jié)構(gòu)層次清晰,能對(duì)桌面環(huán)境的特性進(jìn)行比較好的支持;系統(tǒng)開(kāi)銷(xiāo)較小,系統(tǒng)穩(wěn)定;實(shí)現(xiàn)窗口透明效果和動(dòng)畫(huà)效果,提供良好的用戶(hù)操作界面。
文檔編號(hào)G06F9/44GK102520946SQ20111040896
公開(kāi)日2012年6月27日 申請(qǐng)日期2011年12月9日 優(yōu)先權(quán)日2011年12月9日
發(fā)明者孫志猛, 孫文, 徐偉濤, 徐加利, 李宗璋, 紀(jì)洪亮, 翟慶羽, 赫明哲 申請(qǐng)人:山東大學(xué)