EVC開發例項一 視窗切換

2021-04-13 05:34:44 字數 4040 閱讀 5071

嵌入式平台下應用於民用領域的軟體有它的特點:占用資源低、操作介面簡單、反應迅速。而且傳統觀念上嵌入式平台同一時刻只執行一兩個程式。這不同於pc下軟體,除了實現基本功能外,還要求華麗的介面,甚至換膚,啟動n個程序也無所謂。所以在windows ce下構思乙個應用於民用領域的軟體時,必須考慮軟體的實用性、易操作性等。太複雜的軟體就不要想了,也不要妄想把pc下所有軟體都移植到windows ce下。

不過隨著嵌入式cpu的快速發展和ram的降價,在windows ce下實現多個程式同時執行也是可行的。而且執行速度也可以接受。我們公司的產品就能夠一邊上網,一邊聽***。使用起來真的很爽。

假如我們要做乙個產品,需要同時執行多個程式,這就涉及到視窗切換的問題。windows ce 自帶了資源管理器explorer.exe作為外殼程式。它有視窗切換的功能。但是絕大多數基於windows ce的產品都不可能用這個程式做主介面。原因之一,它的介面和pc下資源管理器一樣(也就是桌面),不符合我們這個產品的整體介面風格。可能我的所有應用程式的介面風格都很好,很漂亮,但主介面,既資源管理器的介面和其它所有程式介面風格不相符,那樣太糟糕了。而且總用同乙個介面,使用者遲晚會煩的。原因之二,它將所有資源管理功能都暴露給使用者,那樣太危險。使用者肆意更改資源設定很容易造成裝置損壞或無法啟動,一旦無法啟動,使用者一定會來找你維修,但是你很冤。所以我們必須自己做乙個主操作介面(也就是乙個應用程式,或者稱為外殼程式)。這樣既可以設計實現自己理想的介面風格,又可以限制留給使用者操作的功能。這個想法雖然好,但是如果允許同時執行多個程式,就必須先解決視窗切換問題。好在windows ce 的api和pc下的差不多,實現也不算難。其實難的是如何把自定義的程式作為外殼程式,替換原來標準的程式。

注:windows ce允許同時開啟最多32個程序,這包括windows ce啟動時系統程式。

注:以後稱主操作介面程式為自定義外殼程式。

一、 新增自定義外殼

原來打算不講解pb方面的知識,但是在windows ce下開發,pb和evc關係緊密,必須兩個都懂,才能做出理想的產品。所以在這裡我簡單說說pb和ce方面的知識。

1、pb是用於定製作業系統核心的工具,可以把它看成是乙個ide,整合了編輯器(可以編輯原始碼、登錄檔等)、編譯器(編譯作業系統核心、編譯某乙個模組)、各種嚮導(生成新核心嚮導、生成bsp嚮導、sdk匯出嚮導、元件特徵匯出嚮導)、核心除錯工具集合、x86模擬器、支援新增或刪除元件等。通常情況下,通過pb來新增、刪除元件,每個元件對應乙個特定的功能。假如你希望你的產品具有上網功能,那你就新增某一種網路連線元件和瀏覽器元件。假如希望你的產品具有永久儲存功能,那你就新增支援永久儲存裝置的元件,再新增支援某一種檔案系統的元件。設定完畢後,編譯整個核心。最後pb將編譯後的所有功能模組組合在一起,形成乙個.bin檔案,預設為nk.bin。 

2、nk.bin包含了你定義的windows ce核心的全部。在裝置啟動時需要解壓nk.bin並且將一些系統模組(dll、exe)載入到記憶體中。用於做解壓和載入工作的程式,稱為引導程式,可以放在rom中,也可以放在永久儲存裝置中。當裝置啟動時先檢測硬體,再載入引導程式,引導程式解壓nk.bin,再把系統模組載入到特定記憶體區域中,然後將cpu交給ce核心。

3、當你安裝完windows ce.net(windows ce.net 安裝分為三部分。分別安裝pb、platform manager、sdk)後,大部分功能模組的原始碼被複製到安裝目錄下。你可以修改這些原始碼,然後重新編譯。這些原始碼為oem提供了更廣闊的開發空間。也是windows ce比其它windows作業系統更適合研究的原因。

4、修改原始碼不是簡單的事。使用pb開發乙個核心很少需要修改原始碼,更多的工作是新增元件、新增檔案、修改登錄檔資料、新增環境變數等。要新增自定義外殼,涉及到修改登錄檔和新增檔案兩個工作。

下面講具體操作方法:

以下假設你已經利用生成核心嚮導建立了乙個核心工程。

1、修改登錄檔:

windows ce啟動時分別執行[hkey_local_machineinit]鍵下所有子鍵列出的程式。例如:

[hkey_local_machineinit]

"launch20"="device.exe"

"launch30"="gwes.exe"

"depend30"=hex:14,00核心啟動時執行device.exe和gwes.exe 。「launchxx」中的xx為序列數,核心依據這個序列數按由小到大的順序來分別執行所有子鍵列出的應用程式。「dependxx」為「launchxx」的附屬鍵,此鍵鍵值表示「launchxx」指定的程式需要依靠哪個程式才能啟動。例如「depend30」=hex:14,00 。十六進製制數14等於十進位制數20,既gwes.exe需要device.exe先啟動後才能啟動。因為自定義外殼程式是最後啟動的,所以你可以在你的平台選擇乙個最大的序列數,比如80,然後在common.reg中「[hkey_local_machineinit]」鍵下新增如下格式:

"launch80"="customshell.exe"  ///自定義的外殼程式,名為customshell.exe

"depend80"=hex:14,00,1e,00  ///依靠gwes.exe 和 device.exe新增後千萬別忘了把原來預設的標準外殼元件從你的核心中刪除,找到「shell and user inte***ce-shell-standard shell」,單擊滑鼠右鍵,再單機「delete」。當然,你也可以把其它外殼程式都刪除。

修改登錄檔工作到此結束。

2、新增自定義外殼程式:

只要允許多個程式同時執行,必然涉及到視窗切換問題,但不同的產品所採取的視窗切換解決方案也不一樣。假如你的產品攜帶標準鍵盤,那你可以註冊乙個或幾個熱鍵,當熱鍵按下時,啟動視窗切換程式,然後選擇你要操作的視窗,然後視窗在最上層顯示。這比較像windows下任務管理器。如果你的產品沒有攜帶標準鍵盤,而是幾個按鈕,那可以通過串列埠通訊方式或其它通訊方式解決,當按下按鈕時,通過串列埠傳送訊息給系統,系統啟動視窗切換程式。如果你的產品在外觀上沒有鍵盤,也沒有任何按鈕,那就必須做乙個視窗,像工作列一樣,讓它時刻保持在所有視窗最上層,以便響應使用者操作。具體方法你自己選。我假設現在你用evc已經把自定義外殼程式做完了。接著要做的是如何將自定義外殼程式放入核心中,也就是nk.bin裡。從上述「修改登錄檔」中你會發現,要啟動的程式都只有檔名,而沒有路徑名,這是因為ce只允許把啟動程式放到nk.bin中,nk.bin中的所有檔案在ce系統啟動後被放在目錄windows 中。這一步要做的就是把已經做好的自定義外殼程式放入nk.bin中。

先把編譯完的程式customshell.exe複製到核心工程目錄下。假設你的核心名為abc,核心工程所在路徑為c:abc,採用cpu為national geode。那麼就複製到「c:abcreldirnational_geode_x86release」目錄中。接著在project.bib中新增下列格式:customshell.exe  $(_flatreleasedir)customshell.exe nk

這表示在pb編譯核心時將customshell.exe加入到nk.bin中,並且在ce核心載入時將customshell.exe放入記憶體的系統區域中,核心啟動後在windows目錄下可以看到這個檔案。

新增自定義外殼程式工作到此結束。

3、編譯核心

現在編譯前期工作已經完成,單擊「build platform」或「rebuild platform」開始編譯。編譯前相關設定在此不再多說。啟動ce核心後就可以看到自己設計的外殼程式了。

二、實現視窗切換

圖1 假想的任務管理器介面

乙個簡單的視窗切換例項。開啟此程式時,顯示所有視窗(不包含隱藏視窗),單擊某乙個視窗名稱,再單擊「切換」按鈕,相應的視窗出現在z軸最上層。在這裡我只給出了部分重要的**。此處假設工程名為wndlist。

///全域性函式和全域性變數

hwnd   g_hwndarray[50]; //存所有視窗控制代碼

cstring g_strarray[50];  //存所有視窗標題

int   g_iwndcount = 0; //計數器

bool callback enumwindowsproc(hwnd hwnd, lparam lparam)

}return true;

}bool cwndlist::oninitdialog()

///相應「切換」按鈕

void cwndlist::onok()

cgdb 除錯 如何使用cgdb(一) 視窗切換

cgdb是乙個輕量級的基於控制台的多視窗gdb除錯介面。除了標準的gdb控制台之外,cgdb還提供了乙個分屏檢視,可以在執行的時候顯示具備語法高亮的源 鍵盤控制是仿照vim設計的,所以vim使用者使用起來將會得心應手。cgdb使用方式與gdb一樣,可以通過 cgdb attach p pid 以及 ...

OFBIZ 例項開發 一

注意 系統環境microsoft windows 7 此版本適用於ofbiz 16.11.02 ofbiz目錄hot deploy資料夾,目的是讓開發者擴充套件開發自己的元件存放處,這裡我開發乙個hello world例子元件 1.在hot deploy 新建hello資料夾 2.在hot depl...

C winform 只執行乙個例項視窗

using system using system.windows.forms using system.diagnostics using system.runtime.interopservices using system.reflection namespace emailoperation...