1. gzyueqian
      18078865874
      首頁 > 新聞中心 > > 正文

      如何編寫Windows CE結構的應用程序

      更新時間: 2007-06-29 09:53:54來源: 粵嵌教育瀏覽量:1405

        我選擇編寫的這一應用程序,雖然相對簡單,但你卻可以從中知道怎么去編寫比較復雜的程序(比“Hello World.”復雜)。這一應用程序包括屬性頁和屬性表,即所說的TAB控件,它含有自定義的圖標和跳格符,能把參數選擇保存到注冊表中。

        程序開發的一個關鍵之處是保持和微軟用戶界面相一致的特性。在開發過程中我盡可能的采用了微軟的應用程序的字體和布局,商業開發人員更應該為他們的Windows CE應用程序設計出優美的界面。

        類結構

        所有的代碼加起來也有幾千行,共分為5個文件。我選擇用微軟基礎類庫(MFC)來實現,軟件也具有很好的擴展性。

        CCNETConfig:這是程序的主線程,它起動與注冊表的連接,建立與CPageTab1, CPageTab2, and CPageTab3的關聯,然后利用屬性表生成模態對話框,CCNETConfig是獨立的。

        CPropertySheet: CpropertySheet類基本上是空的,當你點擊不同的標簽時,MFC會處理不同的屬性頁,CpropertySheet也是獨立的。

        CPageTab: CpageTab類包含了與各自標簽相關的代碼,它完成屬性頁上數據的保存,傳遞,校驗。

        用戶界面

        在默認狀態下,Embedded Tools軟件上傳應用程序到\Windows\Start Menu目錄下。如果你把應用程序上傳到\Windows\Start Menu\Settings目錄下,在文件夾中也可以找到圖標,如下圖所示。

        這一結構程序具有三個屬性頁。CPageTab1處理的是與數據更新相關的任務,CpageTab2處理參數選擇相關的任務,CpageTab3傳送到cnet.com的任務。

        從整體上看,程序并不是很復雜。程序員可以很容易地把代碼移植到諸如無線802.11b驅動程序上。

        屬性頁面和其屬性

        每一個類都有它的特有成員變量表,這些變量能夠通過MFC’s DDX保持編譯環境的設置。在每一屬性頁的OnInitDialog函數中都執行UpdateData(FALSE)事件,然后在OnKillActive事件中通過UpdateData(TRUE)校驗并把參數保存到注冊表。

        當OnKillActive事件被觸發時程序就會把所有的信息保存到注冊表,即使在程序發生異常的時候。而函數OnInitDialog則是對程序進行了初始化。

        通過利用資源編輯器,我建立了如圖D所示的三個屬性表。標題欄遵循了其他程序的設計標準,標題欄下面的文字也采用了其他程序的字體和顏色。

        字體下面的直線是采用1bit位圖實現并當成一幅圖片,除此之外,我還添加了檢查框,靜態文本框,編輯框,組合框等。

        自定義靜態文本框的字體和風格

        為了獲取靜態文本框的合適字體,必需在CpageTab類中觸發WindowProc事件,而只要發送WM_CTLCOLORSTATIC消息就可以更換靜態文本框中的當前字體和字體的顏色了。

        WM_CTLCOLORSTATIC把hDC和hWnd傳送到靜態文本框。

        你可以看到,我使用了一個靜態變量來生成字體,然后重載這一指針變量就可以更改這些字體。如果你不想改變字體,即不要重載PropertyPages中的WindowProc事件,代碼的其他部分都會正常運行。

        除了要生成合適的字體外,我還注重把界面設計成具有Windows CE系統專業的水平。

        生成帶有屬性頁的屬性表

        對于以上我生成的附帶屬性頁的屬性表,你一定會迷惑這一整個過程。我只是采用了MFC向導來自動生成四個獨立的類,其中一個是派生于CpropertySheet類,其他三個是派生于CpropertyPage類。在CWinApp::InitInstance事件中,我在屬性表中增加了屬性頁。

        我還舉例說明了怎么樣從CPropertySheet 和 CpropertyPage而不是從CPropertySheet 和CpropertyPage派生出對象。

        我初始化了所有的變量并把頁和表關聯起來,之后調用DoModal事件就可以生成模態對話框。

        當InitInstance返回FALSE,MFC不再執行窗體消息循環。我可以通過使用CPropertySheet::Create()而不是使用CPropertySheet::DoModal()來生成一個非模態對話框。如果我這樣做,程序就返回TRUE,窗體消息循環就會進行。如果生成一個非模態對話框而返回FALSE,就會退出消息循環。

        訪問注冊表

        為了保存信息到注冊表中,程序必需執行CpageTab類中的OnInitDialog和OnKillActive事件。Listing C中的代碼說明了這一過程。

        MFC能自動訪問注冊表,這一過程程序執行了GetProfileInt, GetProfileString, WriteProfileInt, 和 WriteProfileString函數。

        我采用EMbedded Tools 3.0軟件中的Windows CE遠程注冊表編輯器來查看遠距離設備上的注冊表。


        將鍵值保存在HKEY_CURRENT_USER\Software\CNET Networks, Inc\CNETConfig\etc…

        你也應該注意到如何把關鍵字保存在HKEY_CURRENT_USER\Software\CNET Networks, Inc\CNETConfig\etc…下。

        當采用MFC方式時,通常程序員都要調用

        WriteProfileInt
        WriteProfileString
        GetProfileInt
        GetProfileString

        為了保存或恢復注冊表中程序的原內容,下面函數要在以下位置訪問注冊表:

        HKEY_CURRENT_USER\Software\<company name>\<application name>\<section name>\<value name>。

        軟件名稱通過SetRegistryKey來設置,各個部分名稱和其他一些變量可以由以上的四個函數來實現。

        Unicode(統一的字符編碼標準)

        在本文中所有的代碼中,你應該注意到TEXT都是在圓括號內出現的,這是因為Windows CE采用Unicode標準來編寫代碼。Unicode要本質上是采用每字符16位而不是每字符8位的方式。

        程序中我也采用了L””來替代TEXT(“”),這一方法顯得更加方便,這也是采用了Unicode標準的字符串的原因。

        結論

        在編譯器提供的功能強大的幫助文獻下,我成功地編寫了一個Windows CE結構應用程序,程序可以訪問和保存變量到注冊表。程序的代碼很少,卻十分牢固,高效,并具有很好的擴展性。我也花了主要精力把界面盡可能地達到標準窗口的水準,我想這些對程序員的編程經歷有很大的幫助

      免費預約試聽課

      亚洲另类欧美综合久久图片区_亚洲中文字幕日产无码2020_欧美日本一区二区三区桃色视频_亚洲AⅤ天堂一区二区三区

      
      

      1. 日韩欧洲区精品一区二区 | 日本有码三级欧美国产 | 亚洲精品国产首次亮相 | 亚洲国产精品久久久久久久 | 中文字幕在线制服丝袜 | 中文有码在线观看 |