自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

微軟Silverlight嵌入式開(kāi)發(fā)實(shí)例詳解

開(kāi)發(fā) 后端
在這里我們將介紹Silverlight for Embedded(SE)在Windows嵌入式系統(tǒng)上開(kāi)發(fā)絢麗界面,希望對(duì)大家有所幫助。

本文將為大家講述銀光在嵌入式方面的應(yīng)用,希望通過(guò)本文能為大家打開(kāi)一個(gè)更加絢麗的Silverlight新界面。

#T#

這文章寫(xiě)給對(duì)使用Silverlight for Embedded(SE)在Windows嵌入式系統(tǒng)上開(kāi)發(fā)絢麗界面感興趣的朋友。要求讀者有一定的Win32基礎(chǔ),C++基礎(chǔ),雖然SE是基于COM的,但是不需要你了解太多有關(guān)COM的知識(shí),但是知道COM的原理會(huì)幫助你更好的理解SE,另外如果有接觸過(guò)Silverlight/WPF會(huì)更好。

這里有一篇文章幫你從全局來(lái)了解SE:微軟最新嵌入式界面開(kāi)發(fā)技術(shù)

首先看一下我已經(jīng)跑起來(lái)的應(yīng)用程序的效果(我沒(méi)有自己去做XAML,而是使用上次去微軟培訓(xùn)時(shí)Samples提供的),這些圖是從模擬器截取下來(lái)的,看起來(lái)效果不是太好,后面我有解釋為什么,我放到NVIDIA Tegra上面跑起來(lái)效果很好(動(dòng)畫(huà)的幀率在四五十左右),這么好的板子沒(méi)道理不好。

效果

完成效果2

完成效果

1.What is SE? Why COM based?

看到iPhone、Android的UX不錯(cuò),市場(chǎng)也漸漸的流入到對(duì)方手里,微軟問(wèn)自己:我要拿點(diǎn)什么與他們對(duì)抗呢?既然我一向平臺(tái)做的不錯(cuò),那我就拿出一個(gè)UX開(kāi)發(fā)平臺(tái)吧!這樣一個(gè)在Windows Embedded上的UX開(kāi)發(fā)平臺(tái)(SE)誕生了。

SE是使用C++本地代碼編寫(xiě)的。(本地代碼表示不是執(zhí)行在托管層之上的,所以你無(wú)法使用像C#這樣的托管語(yǔ)言開(kāi)發(fā)。)

SE依賴于Embedded XAML Runtime (EXR) Framework,而非依賴于.Net CF或者瀏覽器。不要跟Silverlight for Windows Mobile等技術(shù)混淆。

除此之外我們還知道SE是基于COM (Component Object Model)的。為啥微軟又搞出COM技術(shù)來(lái),而不是基于.Net技術(shù)呢?

桌面系統(tǒng)上我們看到非常多的技術(shù)是基于.Net技術(shù),比如XNA(http://creators.xna.com/en-US/),XNA Framework最初構(gòu)建于.Net Framework 2.0之上,另外還加入了一些專注于游戲開(kāi)發(fā)的類庫(kù),以達(dá)到很高的代碼重用。代碼執(zhí)行在通用語(yǔ)言運(yùn)行時(shí)(Common Language Runtime)之上。在這樣的平臺(tái)上開(kāi)發(fā)游戲,你只需要關(guān)系游戲本身的邏輯,還不需要擔(dān)心跨微軟平臺(tái)的問(wèn)題。

那么微軟SE為什么沒(méi)有基于.Net?我認(rèn)為還是運(yùn)行時(shí)效率問(wèn)題。CE設(shè)備(將來(lái)也許在Windows Phone上支持這個(gè)技術(shù))多是CPU主頻不到500MHz、RAM不到256M的設(shè)備,考慮到這點(diǎn)微軟還是選擇了基于COM技術(shù)。雖然COM還是損耗了很多運(yùn)行時(shí)效率,但是它帶來(lái)的好處也是明顯的:減少了開(kāi)發(fā)時(shí)間和開(kāi)發(fā)錯(cuò)誤。

另外可以說(shuō)微軟的技術(shù)很大部分是構(gòu)架在COM技術(shù)上的:IE、Media Player等應(yīng)用的擴(kuò)展,DirectX中無(wú)處不COM,DirectShow的Graph Manager、Filter、Pin是COM組件…

2.SE技術(shù)的本質(zhì)是什么?

傳統(tǒng)界面開(kāi)發(fā)流程中負(fù)責(zé)UI的Designer和負(fù)責(zé)Code的Developer的工作混雜在一起,如果你從事過(guò)這樣的開(kāi)發(fā),相信你能了解到其中的痛苦:開(kāi)發(fā)緩慢,開(kāi)發(fā)流程不能很好的并行,Designer和Developer各自的成果不能很好的重用…

那么SE就采用XAML作為Designer和Developer之間銜接的關(guān)鍵,比較好的分開(kāi)了他們之間的工作。其實(shí)并沒(méi)有完全的分開(kāi),WPF會(huì)更好的實(shí)現(xiàn)這個(gè)理想。SE底層使用DirectDraw或者OpenGL ES的驅(qū)動(dòng)來(lái)實(shí)現(xiàn)硬件加速(先思考一下如何使用到硬件加速)。也就是說(shuō)如果你采用SE開(kāi)發(fā)的Application沒(méi)有這些硬件加速支持,那就可憐了。

與SE相比,微軟內(nèi)部還有個(gè)更輕量級(jí)的界面開(kāi)發(fā)技術(shù),叫做Confetti,它的升級(jí)版叫做ConfettiPlus。它們的出現(xiàn)是解決沒(méi)有較好的硬件加速支持下的用戶界面(很好的圖形硬件加速代表著要不少M(fèi)oney)。

Confetti也是采用XAML很好的分割開(kāi)Designer和Developer的工作,布局、圖形、動(dòng)畫(huà)基本在XAML中定義(與SE的一個(gè)區(qū)別在于Confetti在XAML中只能定義簡(jiǎn)單的動(dòng)畫(huà),復(fù)雜一點(diǎn)的動(dòng)畫(huà)需要在Code中實(shí)現(xiàn)),Designer和Developer之間定義好接口(interation points)之后工作基本上能很好的分開(kāi)了。(因?yàn)楦p量級(jí),Designer和Developer工作還是沒(méi)有SE、WPF分開(kāi)的充分。)

題外話:

Windows Mobile 6.5的界面即是基于ConfettiPlus開(kāi)發(fā)出來(lái)的,如果你能拿到Windows Mobile的源碼,那么ConfettiPlus的源碼在private/shellw/confetti/core目錄下?;贑onfettiPlus編寫(xiě)的Application依賴于Confetti Rendering Engine,從字面意思也能知道,它的職責(zé)主要是呈現(xiàn)(Render)。這個(gè)Engine低下會(huì)依賴GWES組件和DDRAW。

還記得我的文章http://www.cnblogs.com/wangkewei/archive/2009/10/16/1584773.html嗎?

這篇文章提到定制Today工作主要分為3部分:注冊(cè)表配置(包括兩部分:Today整體配置部分,比如整體布局、所要使用的CPR文件等;數(shù)據(jù)源配置,比如配置按鍵的布局等)、CPR文件(基于XML)編寫(xiě)。再與這里介紹到的ConfettiPlus結(jié)合起來(lái),不知道你是否能夠明白Windows Mobile 6.5 UI的內(nèi)部運(yùn)行機(jī)制?

這種開(kāi)發(fā)模型可并不是微軟發(fā)明的,微軟發(fā)明了它自己的基于XML的XAML。如果你從事Android開(kāi)發(fā),你會(huì)發(fā)現(xiàn)采用Java開(kāi)發(fā)的Android Application也很好的采用這種方式來(lái)分開(kāi),而且更成熟一點(diǎn),為什么這么說(shuō)?請(qǐng)看:

工具欄

Android也是采用基于XML文件的可變化的UI開(kāi)發(fā)模型,一個(gè)簡(jiǎn)單的XML布局實(shí)例代碼如下:

  1. xml version="1.0" encoding="utf-8"?>    
  2. <TextView xmlns:android="http://schemas.android.com/apk/res/android"   
  3. android:layout_width="fill_parent"   
  4. android:layout_height="fill_parent"   
  5. android:text="Hello, Android"/>   

這樣的XML文件你會(huì)經(jīng)常在/res/layout下看到。

另外Android開(kāi)發(fā)工具(ADT插件)會(huì)根據(jù)XML文件幫你生成好一些如下代碼:

  1. public final class R {    
  2. public static final class attr {    
  3.  };    
  4. public static final class drawable {    
  5. public static final int icon=0x7f020000;    
  6. };    
  7. public static final class layout {    
  8. public static final int main=0x7f030000;    
  9. };    
  10. public static final class string {    
  11. public static final int app_name=0x7f040000;    
  12. };    
  13. };   

這些代碼生成在R.java文件中,你本身的代碼需要通過(guò)這個(gè)R類來(lái)使用XML資源。

是不是很方便?這是目前SE不能辦到的,但是相信未來(lái)微軟會(huì)搞出來(lái)類似的一套。另外一個(gè)國(guó)外朋友已經(jīng)幫我們寫(xiě)好一個(gè)實(shí)現(xiàn)類似功能的SE開(kāi)發(fā)插件:XAML2CPP,我會(huì)在后面介紹到。

通過(guò)上面的介紹相信你已經(jīng)簡(jiǎn)單了解了SE的本質(zhì),如果廣義上來(lái)看,UI(用戶看的到的部分)其實(shí)也可以看做是程序的數(shù)據(jù),SE的本質(zhì)是利用XML(也可以是其它存放數(shù)據(jù)的媒介)來(lái)分開(kāi)程序的數(shù)據(jù)和代碼。

3.環(huán)境搭建

安裝順序:

(1). Visual Studio 2005(VS08不可以,因?yàn)镃E 6.0是在VS08之前出來(lái)的)

(2). Visual Studio 2005 SP1

(3). Windows Embedded CE 6.0

CE 6.0的Key可以獲得一個(gè)180天試用版的,在這里:http://www.microsoft.com/windowsembedded/en-us/downloads/default.mspx

CD序列號(hào)

想看系統(tǒng)源碼的朋友記得把Shared Source選上。

(4). Windows Embedded CE 6.0 SP1

在這里下載:http://www.microsoft.com/downloads/details.aspx?familyid=BF0DC0E3-8575-4860-A8E3-290ADF242678&displaylang=en

(5). Windows Embedded CE 6.0 R2

在這里下載:http://www.microsoft.com/downloads/details.aspx?FamilyId=F41FC7C1-F0F4-4FD6-9366-B61E0AB59565&displaylang=en

(6). Windows Embedded CE 6.0 R2各月補(bǔ)丁

ARM處理器有關(guān)的補(bǔ)丁大概有這些,從網(wǎng)上應(yīng)該都能搜到:
WinCEPB60-081231-Product-Update-Rollup-Armv4I.msi
WinCEPB60-090131-2009M01-Armv4I.msi
WinCEPB60-090228-2009M02-Armv4I.msi
WinCEPB60-090331-2009M03-Armv4I.msi
WinCEPB60-090430-2009M04-Armv4I.msi
WinCEPB60-090531-2009M05-Armv4I.msi

(7). Windows Embedded CE 6.0 R3

在這里下載:http://www.microsoft.com/downloads/details.aspx?displaylang=en&FamilyID=bc247d88-ddb6-4d4a-a595-8eee3556fe46

(8). Windows Embedded CE 6.0 R3各月補(bǔ)丁(這個(gè)可以先不管)

下一步就可以打開(kāi)Visual Studio 2005創(chuàng)建一個(gè)OS Design Project,定制過(guò)程比較簡(jiǎn)單,你可以參考馬寧老師的文章:http://www.cnblogs.com/aawolf/archive/2009/10/31/1593596.html

特別提醒的是:如果你想在定制的系統(tǒng)上跑起來(lái)SE based Application的話一定記得選中Core OS\CEBASE\Shell and User Interface\User Interface\目錄下的Silverlight for Windows Embedded,或者直接加上SYSGEN:SYSGEN_XAML_RUNTIME。

前面提高如何使用到圖形硬件加速,你只需添加一個(gè)SYSGEN:SYSGEN_XAML_RUNTIME_DDRAW即可使用自帶的DirectDraw rendering plug-in來(lái)實(shí)現(xiàn)圖形硬件加速,當(dāng)然你也可以使用OpenGL ES加速,后面會(huì)提到。

4.應(yīng)用程序整體流程介紹

(1).實(shí)現(xiàn)我們需要通過(guò)Expression Blend生成好我們需要的XAML、Pictures等文件,XAML文件里面定義了控件、動(dòng)畫(huà)、布局等UI元素。

(2).然后我們新建一個(gè)Win32智能設(shè)備項(xiàng)目工程(如果你需要ATL庫(kù)的支持,也可以選擇ATL智能設(shè)備項(xiàng)目工程),選擇Alchemy SDK,如果選擇其它CE SDK的話,需要自己包含頭文件和Lib庫(kù)。將第(1)步得到的XAML等文件導(dǎo)入到項(xiàng)目的資源(rc)文件里面。

特別提醒:很久前我使用XamlRuntime.h頭文件時(shí)發(fā)現(xiàn)它少包含了pwinuser.h頭文件,造成編譯時(shí)出現(xiàn)GESTUREINFO未定義錯(cuò)誤。
我發(fā)現(xiàn)GESTUREINFO在頭文件pwinuser.h中定義,這個(gè)頭文件在C:\WINCE600\PUBLIC\COMMON\OAK\INC。
在Visual Studio 2005中包含該目錄,并在XamlRuntime.h中添加#include 。
再次編譯成功。該錯(cuò)誤應(yīng)該是微軟員工疏忽造成的。

運(yùn)行結(jié)果

提醒 

(3).Code, Debug。

原文標(biāo)題:Silverlight for Embedded應(yīng)用編寫(xiě)參考

鏈接:http://www.cnblogs.com/wangkewei/archive/2009/12/22/1629869.html

責(zé)任編輯:彭凡 來(lái)源: 博客園
相關(guān)推薦

2010-01-13 09:51:21

微軟Linux嵌入式

2011-01-14 13:13:23

嵌入式Linux開(kāi)發(fā)

2009-11-30 16:54:28

微軟

2009-11-07 19:15:51

嵌入式軟件開(kāi)發(fā)

2011-08-16 16:32:13

Linux驅(qū)動(dòng)程序

2009-12-09 10:50:53

嵌入式Linux

2009-07-17 16:06:59

ARM嵌入式開(kāi)發(fā)

2009-08-20 10:57:40

嵌入式開(kāi)發(fā)微軟

2009-12-24 17:21:38

嵌入式Linux

2010-01-06 11:21:05

嵌入式開(kāi)發(fā)

2010-01-13 09:15:35

嵌入式

2011-11-30 17:19:06

微軟

2009-07-10 17:36:29

嵌入式開(kāi)發(fā)微軟Windows Emb

2011-11-23 18:28:47

微軟

2011-07-05 15:42:02

QT 嵌入式 Embedded

2021-10-26 21:50:10

Rust嵌入式開(kāi)發(fā)

2009-12-22 17:46:56

Fedora 9嵌入式

2010-03-18 11:22:10

Windows Emb

2011-12-13 14:51:05

微軟

2010-02-24 16:02:45

PerstSilverlight
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)