1.7 處理用戶界面的旋轉
Windows Embedded Compact 7支持以90°爲增量旋轉其用戶界面,使Windows Embedded Compact 7設備橫放使用或者堅放使用。例如,對於一般的Web Pad、Internet Appliance設備,屏幕多爲橫向顯示,而對於掌上電腦等手持式移動設備,屏幕多爲縱向顯示。
目前基於Windows Embedded Compact 7設備的屏幕旋轉僅支持單屏幕的旋轉顯示,不支持多屏幕的旋轉顯示,而與屏幕旋轉對應的應用程序主要有兩個:Shell應用程序,任務條應用程序。當出現屏幕旋轉時,鼠杯和光標會自動調整以適應新的屏幕顯示方向。
只有當基於Windows Embedded Compact 7設備的顯示驅動支持屏幕旋轉時才能真正實現屏幕的旋轉顯示,如果開發者使用白己的顯示驅動而非Platform Builder提供的顯示驅動,那麼開發者必須保證自己的顯示驅動支持屏幕旋轉。
在Windows Embedded Compact 7中微軟提供的RFlat和Geode MediaGx例顯示驅動支持屏幕的旋轉,RFlat驅動位於﹪_WINCEROOT%\ Public\Common\0AK\Drivers\Display\RFlat文件夾中,Oeode MediaGx驅動位於%_WINCEROOT%\Public\Common\OAK\CSP\X86\Geode\GXvideo文件夾中。支持旋轉的顯示驅動應該繼承相應的旋轉類,並實現一些給定的方法;
同時,支持旋轉顯示的驅動應該與GPERotate.iib和EmulRotate.lib進行鏈接。RFlar驅動的
RGPEFIat類繼承於GDI的GPERotate類,同時,RFlat驅動的GetRutate ModeFromnReg函數從註冊表[HKEY_LOCAL_MACHINE\SYSTEM\GDI\ROTATION]返回Angle鍵的dword鍵值並以此來決定當前的屏幕旋轉角度。
在顯示驅動程序支持屏幕旋轉的情況下,還需要創建一個使屏幕產生旋轉的應用程序並設置相應的註冊表。
1.7.1 創建一個操作系統設計
創建一個支持屏幕旋轉的操作系統設計,在New platform嚮導中進行如下選擇:
·命名操作系統設計爲Screen Rotation:
·從可用的BSP列表中選擇Virtual PC: X86:
·從可用的設計模板列表中選擇Handheld。
1.7.2 修改註冊表設置
在默認情況下,當操作系統映像下載到目標平臺之後,屏幕的旋轉角度爲0°,即不產生旋轉,開發者可以通過修改相應的註冊表來更改這個默認設置。隨後,在目標平臺上運行的任何應用程序可以旋轉屏幕,覆蓋這個註冊表設置。表9-3展示了可以在註冊表中設置的Angle子鍵的值。
表3-3 屏幕旋轉角度Angle註冊表子鍵
Angle的值 | 描 述 |
Ox0 | 不旋轉 |
Ox5A | 順時針旋轉90° |
OxB4 | 順時針旋轉180° |
Ox10E | 順時針旋轉270° |
下面的過程設置屏幕旋轉註冊表鍵:
(l)在Solution窗口,選擇ParameterFile選項卡如圖1.1:
圖1.1選擇ParameterFile選項卡
(2)展開目錄樹,選擇Project Specific Files結點;
(3)雙擊OSdesign.reg在編輯窗口中打開它;
(4)爲了設置當前操作系統設計屏幕旋轉的默認角度,將下列文本添加到Project.reg文件的末尾,下面的例代碼將默認的屏幕角度設置爲Ox5A,即90。:
: Settings to rotate the scrcen by 90 degrees clockwise upon download
[HKEY_LOCAL_MACHINE\System\GDI\Rotation]
“Angle”=dword:5A
(5)保存並關閉Project.reg文件,如圖1.2:
圖1.2保存並關閉Project.reg文件
1.7.3 創建屏幕旋轉應用程序
這裏我們將在當前的操作系統設計中創建一個使用戶能操作屏幕旋轉的應用程序,使用戶能根據需要以90°爲增量順時針旋轉屏幕。
下面過程創建一個屏幕旋轉應用程序工程:
(1)打開ScreenRotation操作系統設計。
(2)從“File”菜單上選擇“New Project or File”,在“Projects”選項卡上選擇“MFC Smart DeviceApplication”。
(3)在“Project name”框中輸入屏幕旋轉應用程序工程名“Rotate”,默認情況下,Platform Builder將這個工程存儲在當前操作系統設計的文件夾下.
(4)選擇“Workspace Project”單選按鈕,單擊“OK”按鈕,系統顯示“New ProjectWizard”對話框。
(5)選擇yincheng_OS SDK.
(6)在當前工程的創建結束後,在“FileView”選項卡的Projects目錄樹下會顯示新創建的Rotate工程。
(7)在“Workspace”窗口中選擇“ClassView”選項卡,找到WndProc回調函數,雙擊WndProc在編輯窗口中打開它。
(8)在WndProc函數的Switch語句中添加以下代碼:
case WM_CREATE:
HWND hwndRotateButton;
hwndRotateButton= CreateWindow(TEXT(”button”).TEXT(”Rotate Me”),
WS_CHILDIWS_VISIBLE IBS_PUSHBUTTON, 50. 50.100.75. hWnd.
(HMENU)J,((LPCREATESTRUCT)iParam)->hlnstance,NULL);
break;
這段代碼通過在WM_CREATE消息中添加一個“Rotate Me”按鈕來爲用戶提供一個界面,允許用戶通過單擊這個按鈕來旋轉屏幕。WM_CREATE消息是在應用程序主窗口創建時自動被調用的。
(9)爲了處理Rotate按鈕消息,需要在WndProc函數的Switch語句中添加“case WM_ COMMAND ”消息處理語句,當用戶按下“Rotate Me”按鈕時,應用程序調用WM_COMMAND消息。
下面的“case WM_COMMAND”代碼響應“Rotate”按鈕來設置屏幕旋轉:
case WM_COMMAND:
// 返回當前屏幕方向
DEVMODE devMode;
memset(&devMode.0x00,sizeof( devMode));
devMode.dmSize =sizeof(devMode);
devMode.dmFields= DM_DISPLAYORIENTATION:
ChangeDisplaySettingsEx(NULL,&devMude,NULL,CDS_TEST.NULL);
// 計算新的旋轉角度
switch( devMode.dmDisplayOrientation)
{
case DMDO_0:
devMode,dmDisplayOnentation= DMD0_90;
break;
case DMD0_90;
devMode,dmDisplayOrierjtation = DMDO_180;
break;
case DMD0_180:
devMode.dmDisplayOrientation = DMD0_270;
break:
case DMD0_270:
devMode.dmDisplayOrientat.ion = DMDO_0:
break:
default;
devMode.dmDisplayOrientaiion = DMDO_0;
Break ;
﹜
// 設置新的屏幕方向
devMode.dmFields =DM_DISPLAYORIENTATION;
ChangeDisplaySetcingsEx(NULL.&devMode.NULL,CDS_RESET.NULL);
break;
在以上代碼中,使用ChangeDisplaySettingsEx函數將特定顯示設備設置爲特定的圖形模式,如果設置成功,則操作系統將向所有運行的應用程序發送WM_SETTINGCHANGE消息。同時,上面的代碼還使用了DEVMODE結構來查詢顯示驅動程序支持的旋轉角度。
(10)在設置新的屏幕方向之後,還需要在WndProc函數的Switch語句中添加“case WM_ SETTINGCHANGE ”消息來旋轉屏幕顯示,代碼如下:
case WM_SETTINGCHANGE
// 在旋轉之後刷新顯示器
Sleep(250); // 給系統一點時間完成旋轉
int Screen_x, Screen_y;
Screen_x= GetSystemMetricsf( SM_CXSCREEN); // 獲得屏幕x和Y方向的尺寸
Screen_y= GetSyscemMetrics( SM_CYSCREEN);
MoveWindowthWnd,0,O,Screen_x, Screen_y, TRUE); // 改變窗口大小並重畫窗口
Break;
(11)保存Rotate.cpp文件。
1.7.4 創建並下載操作系統運行時映像
創建並下載操作系統運行時映像的過程如下:
(1)從Platform builder工具條的“Set Active Configuration”下拉式列表中選擇“Virtual PC: X86” 配置。
(2)在“Build OS”菜單上,確認選擇了"Clean Before Building"、“Copy Files to Release Directory after Build”和“Make Run _Time Image After Build”選項。
(3)執行“Build OS”菜單上的“Sysgen”命令,創建操作系統運行時映像。
(4)在創建結束後,單擊“Target”菜單上的“Conectivity Options”命令,配置目標設備連接。
(5)打開Virtual PC: X86虛擬機,單擊Platform Builder的“Target”菜單上“Attach Device”命令,下載並在Virtual PC: X86虛擬機上運行操作系統運行時的映像,正常情況下一會就會在目標設備上看到Windows Embedded Compact 7桌面。
1.7.5 運行屏幕旋轉應用程序測試屏幕旋轉
單擊Virtual PC: X86 目標設備上的“Start”菜單,選擇“Run”,鍵入“Rotate”,運行Rotate應用程序。
單擊Rotate應用程序上的“Rotate Me”按鈕,確認屏幕以順時針90°方向發生了旋轉。
1.8 定製用戶界面
Windows Embedded Compact 7 允許開發者對它的用戶界面進行全方位的定製,以使開發者的產品區別於其他用戶的產品,本節將詳細討論定製Windows Embedded Compact 7用戶界面的換膚技術。
1.8.1 創建一個皮膚
Windows Embedded Compact 7允許開發者創建一個完全定製的用戶界面,一般將這個定製的用戶界面稱爲皮膚(Skin),即一個定製用戶界面的過程也就是一個創建皮膚(Create a Skin)的過程,它允許定製控件的外表以及其他用戶界面元素等。這種定製用戶界面的能力使OEM或開發者可以定製適合於自己產品或自身風格的產品顯示界面,提高產品的靈活性,增加產品的吸引力。
爲了支持創建皮膚,Windows Embedded Compact 7將控件和窗口的非客戶區域的繪圖代碼與實現那些用戶界面元素的其他代碼區分開來。例如,在Windows Embedded Compact 7E中滾動條的實現由兩個組件構成:Sbcmn和Sbcmnview,Sbcmnview組件包含的是滾動條的繪圖代碼,而Sbcmn包含的是實現滾動條的其餘代碼。通過這種區分,當開發者在創建一個皮膚時,只需要修改控件和窗口非客戶區域的繪圖代碼,而不需要修改其他部分的代碼。
在Windows Embedded Compact 7中,可換膚的用戶界面元素的繪圖代碼被放置在$(_WINCEROOT)\ public\ common \oak\drivers \skinnableui. 文件夾中。每個可定製的控件以及窗口的非客戶區域都對應於一個c++類,開發者可以通過改變這些類所包含的實現方法來定製用戶界面。如果開發者基於除家庭網關和數字媒體接收機之外的設計模板創建一個包含完整用戶界面的操作系統設計,在創建操作系統運行映像時,Platform Builder會自動將修投後的代碼結合到GWES模塊。因此,由於開發者修改的代碼作爲GWES模塊的一部分來運行,所以開發者必須細心並保證修改的代碼運行可靠且不會影響操作系統的穩定性。
1.8.2 可以被換膚的用戶界面元素
可以被換膚的用戶界面元素主要包括以下三類:
· 常用控件( Common Controls);
· 窗口控件(Windows Controls);
· 窗口的非客戶區域。
1.常用控件
常用控件可修改的代碼忙於%_WINCEROOT%\Public\Common\Oak\Drivers\Skinnableui\Commctrl文件夾中。表1-4對可定製其界面的常用控件進行了總結,列出了這些控件的名稱、包含可定製控件實現方法的類名、實現方法所在的文件以及可定製的控件元素。
表1-4可定製UI的常用控件
控件名稱 | 類 | 文件名 | 可定製元素 |
Header control | HeaderView _t | Headerview.cpp | Bitmap圖片或文本的位置,Header按鈕的邊界.Header控件的高度 |
Progress bar | ProgressBarView_t | Progressview.cpp | 用於繪製整個進度條的代碼 |
Rebar | RebarView_t | Rebarview.cpp | Gripper(分割線)、項與項之間的間隔 |
Tab control | TabView_ t | TabView.cpp | 繪製選項卡控件的代碼 |
Toolbar | ToolBarView _t | ToolBarView.cpp | 按鈕圖片的位置,按鈕邊界.下拉箭頭.按鈕邊界矩形,按鈕之間的間隔,系統定義的Bitmap圖片 |
Trackbar | TrackBarView _t | TrackBarView.cpp | 通道(Channel),焦點矩形,滑動條和刻度標記 |
Up-down | UpdownView_t | Updownview.cpp | 按鈕的樣式,邊界和邊界矩形 |
值得讀者注意的是,不能通過創建皮膚的方法定製下列常用控件:
· Date and time picker;
· Image list;
· List view;
· Month calendar control;
· Status bar;
· ToolTip control;
· Tree view .
2.窗口控件
窗口控件可修改的代碼位於%_WINCEROOT%\Public\Common\Oak\Drjvers\Skinnableui\Gwe文件夾中。表1-5對可定製其界面的窗口控件進行了總結,列出了這些控件的名稱、包含可定製控件實現方法的類名、實現方法所在的文件以及可定製的控件元素。
表1-5可定製UI的窗口控件
控件名稱 | 類 | 文件名 | 可定製元素 |
Button | Button View _t | Brnet\ButtonView.cpp | 拔鈕的狀態、樣式和文本,分組框的文本和着色,Hit_test代碼,繪製單選按鈕、多選框和按鈕的代碼 |
Cornho box | Cornho boxView_t | Cmbctl\Cornho boxView.cpp | 邊界樣式,焦點矩形,邊界矩形頂部的y座標 |
ListBox | ListBoxView_t | Lbetlview\ListBoxView.cpp | 項日的高度、焦點矩形,繪製項目文本的y座標 |
Scroll Bar | Scroll BarView_t | Sbemn\Scroll BarView.cpp | 滑塊的座標代碼,確定滾動條特定點位置的代碼,確定滑塊位置並繪製滑塊的代碼,滾動條繪製代碼 |
Static control | Static controlView_t | Stcctl\Static controlView | 靜態控件的圖像和文本格式 |
3.窗口的非客戶區域
爲了定製窗口的非客戶區域開發者可以修改NonClientView_t類的實現方法,實現這些方法的代碼位於_WINCEROOT%\Public\Common\OaklDrivers\Skinnableui\Gwe\Nclient\Nclientview.cpp文件中。表1-6列出了NonCUentView_t類中開發者可修改的方法。
表1-6NonClientView-t類中可修改的方法
方法 | 描述 |
NonClientView_t: :BoundingRect | 返回邊界矩形的座標 |
NonClientView_t: :BoundPoint | 限制屏幕,可觸及的矩形座標 |
NonClientView_t::CalcClientRectWithHorzScrollBars | 確定一個具有水平滾動條的窗口客戶區域的大小,對於沒有水平滾動條的窗口給出客戶矩形的大小 |
NonClientView_t: :CalcClientRectWithNoScrollBars | 確定一個沒有水平滾動條的窗口客戶區域的大小 |
NonClientView_t::CalcClientRectWithVertScrollBars | 確定—個具有垂直滾動條的窗口客戶區域的大小,對於沒有垂直滾動條的窗口給出客戶矩形的大小 |
NonClientView_t : : DoesHorz ScrollBarFit | 確定一個水平滾動條是否適合於一個窗口 |
NonClientView_t : :DoesVertScrollBarFit | 確定一個垂直滾動條是否適合於一個窗口 |
NonClientView_t: : DoHitTest | 確定在非客戶區域是否出現一個單機(hit)以及單機的位置 |
NonClientView_t: :DoPaint | 繪製非客戶區域 |
NonClientView_t: :DrawBorder | 允許繪製分組框的邊界 |
NonClientView_t: :DrawFrameControl | 繪製特定類型和樣式的框架(Frame)控件 |
NonClientView_t: :ExposedDrawFrameControl | 繪製特定類型和樣式的框架(Frame)控件,它是NonClientView_t:DrawFrameControl函數的一個更新版本 |
NonClientView_t: :WidretRect | 計算在非客戶區域的一個按鈕的大小 |
1.8.3 附加的用戶界面定製選項
除了常用控件、窗口控件和窗口非客戶區域之外,開發者還可以定製下列用戶界面組件:
· 系統顏色;
· 字符;
· 操作系統用戶界面組件。
1. 系統顏色
開發者可以通過修改註冊表HKEY_LOCAL_MACHINE\SYSTEM\GWEISysColor的註冊表入口來定製系統顯示元素的顏色,這個註冊表入口是一個由29個DWORD值組成的二進制大對象(Binary Large Object,BLOB)。下面是定義系統顏色註冊表的一個例子:
[HKEY_LOCAL_MACHINE\SYSTEM\GWE]
"SysColor"=hex : EO, EO*EO, 00. 00,80.8 0,00. SO, 80.FF.OO , SO, 80.80,00.
co,co.co, 00. FF, FF.FF.OO, 00 , oo.oo .oo, oo.oo.o n.oo,
00.00,00,00. FF.FF.OO,OO, CO.CO.CO,OO. co,cotco.oo.
80.80, so,oo, OO ?OO.FF.oo. FF.OO.OO.OO , COTCO,CO.OO.
80, 80*80, 00. SO, 80.80, 00. 00.00.00, 00. co,co.co,oo ,
FF.FF,FF,OO 00.00.00,00. DF.DF,DF.OO, 00.00,00,00,
FF, FF.EI ,OO. FF,FF,E1,OO. oo.oo.oo,oo. IO,84,DO,OO,
B5,B5,B5,JO
這29個DWORD值所對應的系統顏色見表9-7。
表1-7SysColor註冊表入口對應的系統顏色
註冊表順序 | 系統顏色 | 描述 |
0 | COLOR_SCROLLHAR | 滾動條灰色區域的顏色 |
1 | COLOR_BACKGROUND | 桌面窗口的背景顏色 |
2 | COLOR_ACTfVECAPTJON | 活動窗口標題欄的顏色 |
3 | COLOR_lNACTIVECAPTioN | 非活動窗口標題欄的顏色 |
4 | COLOR_MENU | 菜單的背景顏色 |
3.操作系統用戶界面組件
Windows Embedded Compact 7還允許以下其他的操作系統用戶界面組件:
(1)內存溢出對話框(Out of Memory dialog box)
當程序內存小夠用時系統向用戶顯示內存溢出對話框,提示用戶重新從對象存儲分配內存。開發者可以通過修改位於%_WINCEROOT%\Public\CommonhOak\Drivers\OomUI文件夾中的源代碼對它進行定製。
(2)啓動用戶界面(Startup User Interface)
當用戶喚醒一個設備時,系統顯示啓動用戶界面,用於輸入密碼或顯示用戶和系統信息。開發者可以通過修改位於%_WINCEROOT%\PubliclCommon\Oak\DriverslStarlUI文件夾中的源代碼肘它進行定製。
(3)觸摸屏校準屏幕(Touch Screen Calibration Screen)
觸摸屏梭準組件用於將觸摸屏的物理位置映射爲屏幕座標,實現屏幕的準確定位。開發者可以通過修改位於%_WINCEROOTTolPublic \ Common \ Oak \Drivers\CalibrUI文件夾中的源代碼對它進行定製。
1.9 Shell走制實例:IEShell
在Platform Builder中包含了兩個瀏覽器例應用程序:IESAMPLE瀏覽器,IESIMPLE瀏覽器。
當開發者創建一個操作系統設計時,如果選擇r添加Internet Explorer7 samplebrowser組件或設置了SYSGEN_IESAMPLE環境變量,那麼操作系統將包含IESample.exe瀏覽器應用程序,它包含一個標準的菜單條和一個地址欄。如果開發者想創建一個定製的瀏覽器Shell,那麼應該以IESAMPLE爲起點進打修改和定製。IESIMPLE瀏覽器是一個全屏幕的瀏覽器應用程序,它沒有菜單、地址欄和狀態條,開崖者也可以修改、編澤並在自己的操作系統設計中包含JFSIMPLE瀏覽器應用程序,它和IESAMPLE瀏覽器具有同樣的功能。
下面我們將在IESIMPLE瀏覽器例代碼的基礎上,創建一個以瀏覽器Web頁耐作爲Shell的操作系統設計。
1.9.1 創建一個MyShell操作系統設計
創建一個MyShell操作系統設計,在Platform Builder的“New platform”嚮導中進行如下選擇:
(1)命名操作系統設計爲“MyShell“:
(2)從可用的BSP列表中選擇“Virtual PC: X86”:
(3)從可用的設計模板列表中選擇“Network projector”。
3.9.2 創建、下載並測試操作系統運行時映像
(l)設置當前活動配置爲“GEODE: X86_Debug”或者“GEODE: X86_Release”,運行“Sysgen”命令創建操作系統運行時映像;
(2)配置“Connectivity Option”,運行“Attach Device”命令下載操作系統運行時映像;
(3)確認操作系統運行時映像能正常下載並運行;
(4)運行“Detach Device”命令斷開Platform Builder與目標設備的連接。
1.9.3創建並測試IEShell應用程序
(l)從Platform Builder的“File”菜單上選擇“New Project File”,在“Projects”選項卡上選擇“Win32 Smart DeviceApplication”,輸入“IESHELL”作爲工程名,並選擇“Workspace Project”單選按鈕,單擊“OK”按鈕,系統顯示“New Project Wizard”對話框;
(2)在stepl of 3對話框中,輸入相應的信息,單擊“Next”按鈕;
(3)在step2 of 3對話框中,選擇“An empty project“,單擊“Finish”按鈕,完成當前工程的創建;
(4)在當前工程的創建結束後,在“File View"選項卡的“Projects”目錄樹下會顯示新創建的Shell工程;
(5)使用資源管理器,將%_WINCEROOT%\PUBLIC、IE\OAK、IESIMPLE文件夾下的所有.cpp、.h和.rc文件複製到IEShell的工程文件夾%_WINCEROOT%\PBWorkspaces\MySheII\IESHELL下;
(6)將IEShellF的iesimple.rc文什重命名爲ieshell.rc;
(7)在Platform Buildcr中,選擇“Workspace”窗口的“FileView”選項卡,展開Projects目錄樹的所有分支;
(8)在“Source Files”、“Include Files”和“Resource Files”分支上分別單擊鼠標右鍵,選擇“Add Fijes”命令,將mainwnd.cpp、mainwnd.h和resource.h、ieshell.rc分別添加到IEShell工程中;
(9)右擊IEShell工程,然後選擇“Open”,在編輯窗口中打開它的sources文件,在文件的末尾添加下列代碼:
$(_WINCEROOT)1PUBLJC\IE\SDK\INC;
$(_WINCEROOT)\PUBLIC\COIVWlON\OAK\INC;
修改 TARGETUBS部分的代碼如下:
TARGE'17YPE=PROGR}LM
TARGETLIBS= \
$(_PROJECTROOT)\cesysgen\sdk\lib\$(_CPUINDPATH)\coredll.lib \
$(_PROJECTROOD\cesysgen\sdk\lib\$(_CPUINDPATH)\wininet,lib \
$(_PROJECTROOT)\cesysgen\sdk\lib\Sf_CPUINDPATH)\commctrl.lib \
$(_PROJECTROOT)\ccsysgenlsdk\lib\S(_CPUINDPATH)\uuid.lib \
$LPROJECTROOT)\cesysgen\sdk\libl$(_CPUINDPATH)V)le32+llb \
$(_PROJECTROOT)\cesysgen\sdkVib\$( _CPUINDPATHl\oleaut32.lib \
POSTLINX_PASS_CMD=postlink. bat
PRELINK_PASS_CMD=prclink.bat
(10)保存sources文件;
(11)選擇“Build Project”菜單上的“Build Current Projcct”命令來編譯當前工程,確認沒有任何編譯錯誤;
(12)選擇“Build OS”菜單上的“Make Run-Time Image”命令重新創建操作系統運行時映像;
(13)選擇“Artach Device”命令,下載操作系統運行時映像到目標設備;
(14)配置目標設備IP地址、子網掩碼以及代理服務器等;
(15)在目標設備上,運行IEShell.exe應用程序,如果目標設備連接到Internet則應該看到www.msn.com頁面;
(16)運行“Detach Device”命令斷開Platform Builder與目標設備的連接。
1.9.4 設置IEShell爲目標設備的Shell
爲了將一個Web頁面作爲目標設備的Shell界面,不同的開發者可以根據白己的設備設計特定的Web頁面。至於如何設計Web頁面,這裏我們不作討論。下而我們借用微軟網站提供的例IEShell中提供的部分文件來說明下面的過程,讀者可從下列站點下載到IEShell.exe包:
http://www.microsoft.com/downloads/details.aspx/FamilyID=8CFCA431-C81D-4E2E-9C0D-2DA4F49A3C70&displaylang=en
爲了將IEShell設置爲目標設備的Shell,需執行下列過程:
(l)將IEShell.exe壓縮包解壓縮到單獨的IEShell文件夾下,在這個文件夾下只有Files子文件夾下的文件是這裏所需要的。
(2)在MyShell工作空間的%_WINCEROOT%\PBWorkspaces\ MySheIE\IESHEL文件夾下創建一個名爲ShellFiles的新文件夾,並將上述Files文件夾下的所有文件複製到ShellFiles文件夾中。
(3)將ShellFiles文件夾下的IEShell.reg文件複製到其上一級文件夾,覆蓋位於這一文件夾下的IEShell.reg文件:在創建操作系統映像時,IEShell.reg文件中的Init\Launch50鍵值將使用“IEShell,exe”替換Common.reg文件中的“explorer.exe”入口,以達到使用定製Shell替換系統標準Shell的目的。
(4)打開IEShell工程中的mainwnd.cpp文件,將光標移動到171行的開始,添加下列代碼來處理SignalStaned()調用:
// 存開發過程中允許帶命令行參數運行
// 當從註冊表的Init鍵加載時initSignal爲非0
int initSignal= _wtoI(LpCmdLine):
if(initSignall=0)
{
SignaIStafred(imtSignal);
if{FAILED(HandleNewWindow2(_T(""), NULL》)
、 {
guco Cleanup:
}
}
else
注意:這坐的else與後面的if語句構成一個else if執行語句。
(5)展開“FileView”選項卡中IEShell目錄樹的所有分支,雙擊“Parameter Files”下的IEShell.reg文件以在編輯窗口中打開它,可以看到它已經包含了一個IEShell.exe文件入口。
(6)在IEShell.exe入口的下面,添加下列註冊表入口,這將使構成新Shell的所有文件被包含到操作系統運行時映像中:
FILES
BKG.jpg $(PBWORKSPACEROOTNESHFJI)L\SheIIFiles\B KG.jpg NK U
Bucton(}.jpg $(PBWORKSPACEROOT)\IESHELL/SbeIIFijes\ButtonO.jpg NK U
Buttonl.jpg $tPBWORKSPACEROOT)lIESHELL\SheIIFiles\Buttonl.jpg NK U
Buttun2.jpg $(PBWORKSPACEROOT)\IESHELL\SheIIFileslBucton2.jpg NK U
BuUtm3 jpg $(PBWORKSPACEROOT)\IESHELL\SheIIFiles\Buuon3.j pg NK U
Button4.jpg $(PBWORKSPACEROOT)lIESHELL\ShcIIFileslButton4.jpg NK U
Button5.jpg $(PBWORKSPACEROOT)\IESHELL\ShelLFiles\Buiton5.jpg NK U
Button6.jpg $(PBWORKSPACEROOT)\IESHELL\ShellFiles\Button6.jpg NK U
Bucton7.jpg $(PBWORKSPACEROOTNESHELL\SheIIFiles\Button7jpg NK U
ButtonS.jpg $(PBWORKSPACEROOT)\IESHFI.I.\SheIIFiles、ButtonSjpg NK U
Button9.jpg :S(PBWORKSPACEROOT)\IESHELL\SheIIFiles\Butron9.jpg NK U
ButtonPOUND.jpg $(PBWORKSPACEROOTl\IESHELL\SheIIFiles\BuctonPOUND.jpg NK U
ButtonSTAR.jpg $(PBWORKSPACEROOT)\IESHELL\SheIIFileslButtonSTAR.jpg NK U
default.htm $(PBWORKSPACEROOT)\lESHELL\ShellFileskdeFault.htm NK U
homelogo+gif $(PBWORKSPACE7ZOOT)\IESHELL\ShcIIFiles\homelogo.gif NK U
Shell.htm $(PBWORKSPACEROOT)lIESHELL\SheijFilcs\Shell.htm NK U
(7)在 Platform Builder的 "File"菜單中,選擇 "Save AlI”保存所有修改過的文件。
(8)執行 Platform菜單上的 "Settings..."命令,打開 "Platform Settings"對話框,選擇 "Environment"選項卡,單擊 "New..."按鈕,創建一個值爲1的 IMGIESHELL變量,單擊 "OK"按鈕。
(9)單擊"OK" 關閉 "Platform Settings"對話框。
(10)在“Workspace”窗口中的“FileView”選項卡中,右擊IEShell,選擇“Build Current Project”編譯當前工程;
(11)執行“Build OS”菜單上的“Build and Sysgen Current BSP”命令,創建MyShell操作系統設計的系統運行映像;
(12)在創建完畢後,運行“Target”菜單上的“Attach Device”命令,下載並運行操作系統映像,一會開發者就應該在目標設備上看到Shell界面。
1.10本章小結
Shell開發是Windows Embedded Compact 7操作系統開發的一個重要方面,Windows Embedded Compact 7 爲開發者提供了豐富的Shell和任務管理器例Shell選項及完整的源代碼,並提供了IE瀏覽器的完整源代碼,開發者可以再此基礎上開發適合於自己的定製Shell。爲了幫助讀者更好地理解這些Shell源代碼並開發定製Shell,本章對必要的Shell功能、Shell組件、如何安裝一個定製的Shell、如何處理屏幕旋轉和定製用戶界面元素進行了專題論述。作爲Shell開發的一個實例,本章最後以IEShell的開發爲例詳細講解了將瀏覽器作爲定製Shell的開發過程。