Silverlight在嵌入式平台Windows ce中的应用
- 博客分类:
- 技术杂绘
Silverlight在嵌入式平台Windows ce中的应用
2010年07月23日
之前一直在web领域应用Silverlight效果还不错;随着对用户体验的不懈最求,近期公司希望将Silverlight引入嵌入式平台(Windows Embedded CE)
最近做了些探索性学习和研究!首先来个图看看我的Silverlight for windows ce 的处子Show(DEMO中哪个轮子和温度计都处于运动状态)!
第一步:创建Silverlight for Window Embedded CE开发环境(本人安装了所有VS及Windows Embedded CE 6.0 相关的组件)
1.1:所需硬件及系统环境
1.1.1:所需系统 windows XP SP2及以上版本(本人使用windows server 2003 sp2),
1.1.2:所需磁盘空间:系统盘6G+,安装盘10G+
1.1.3:保证系统干净,原有如VS2008,SL3.0,FX3.5,FX3.0等高版本的统统删除干净后重启机器;特别注意(否则可能安装不能成功)
1.1.4:其它硬件环境当然是越高越好(运行模拟器,编译OS会流畅点)
1.2:所需软件及安装顺序:
1.2.1:Visual studio 2005 TM版本(专业版本以上)
1.2.2:Visual studio 2005 TM SP1
1.2.3:Microsoft .NET Framework2.0 SP1
1.2.4:Windows Embedded CE 6.0 Evaluation Edition.exe(在线安装),如要离线安装需要完整下载Windows Embedded ce 6.0.msi及相关CAB(合计365个文件)包至本地相同目录(本人采取的方式,公司环境不能上外网)
1.2.5: Windows Embedded CE 6.0 Platform Builder Service Pack 1(WinCE 6.0 Platform Builder Service Pack 1.msi);
1.2.6: wince6.0R2(ce6R2.ISO)
1.2.7: wince6.0R3(ce6R3.ISO)
1.2.8: Microsoft .NET Framework3.5 SP1(安装 Blend 2.0所须)
1.2.9:Microsoft Expression Blend 2.0 en
1.2.10:Microsoft Expression Blend 2.0(en) SP1
第二步:定制和创建一个可以在模拟器上运行的那么多Windows Embedded CE 6.0 R3 OS(使用Platform Builder向导,并用开发机器模拟一个硬件平台)
第三步:添加Catalog items选项以支持Silverlight
3.1:设置Catalog Item View ->Core OS ->Shell and User Interface -> User Interface->Silverlight for windows Embedded(选中选项或者设置系统变量SYSGEN_XAML_RUNTIME=1)
3.2:注意事项一编译错误"Getuserinfo未定义"解决方法(网上说是CE bug为VS选项添加引用)VS->选项->项目和解决方案->VC++目录:wince600\public\common\oak\inc
3.3:注意事项二 如需在非Debug模式下启用模拟器则:解决方案资源管理器->项目->属性->配置属性->Build Options->取消 Enable KITL(no IMGNOKITL=1)
3.4:编译OS生成(这个过程比较慢似开发机器的配置,由于我选择选项比较多编译了将进40分钟才完成,故建议做好所有设置后再谨慎编译)
第四步:在Subprojects目录下创建子项目(这个比较简单按提示一步一步进行这样的方式会将项目编译进操作系统)
4.1:选择你编译的OS Project->下一步 选择WCE Application 给子项目命名->下一步 选择创建 An empty subproject完成
4.2:设置添加子项目 sources文件目标类库节点如:
TARGETLIBS= \
$(_PROJECTROOT)\cesysgen\sdk\lib\$(_CPUINDPATH)\co redll.lib \
$(_PROJECTROOT)\cesysgen\sdk\lib\$(_CPUINDPATH)\xa mlruntime.lib\
$(_PROJECTROOT)\cesysgen\sdk\lib\$(_CPUINDPATH)\uu id.lib
4.3:在子项目Parameter files文件夹下ProjSysgen.bat中加入"set SYSGEN_SAMPLEXAMLPERF=1"参数命令
4.4:如果编译还出错则尝试点击子项目右键属性 ->link-> Additional libraries中输入:$(_PROJECTROOT)\cesysgen\sdk\lib\$(_CPUINDPATH)\co redll.lib $(_PROJECTROOT)\cesysgen\sdk\lib\$(_CPUINDPATH)\xa mlruntime.lib $(_PROJECTROOT)\cesysgen\sdk\lib\$(_CPUINDPATH)\uu id.lib
上属过程中如果出现什么头文件找不到,库文件找不到尝试将文件拷贝至项目根目录或者将相关路径添加至VS属性VC++目录以实现引用;
4.5:详细页面代码:
4.5.1 XAML文件page.xml 4.5.2:cpp源码: // sl_demo.cpp : Defines the entry point for the application. // #include "stdafx.h" #include "pwinuser.h" #include "xamlruntime.h" #include "xrdelegate.h" #include "xrptr.h" #include "resource.h" #include #include using std::string; UINT exitcode; IXRVisualHostPtr vhost; IXRStoryboardPtr sbRun; IXRStoryboardPtr sbOil; IXRTextBlockPtr txtOil; float oilValue=0; bool isAdd = false; class BtnEventHandler //按钮点击事件 { public: HRESULT OnClick(IXRDependencyObject* source,XRMouseButtonEventArgs* args) { BSTR btnName; if(FAILED(source->GetName(&btnName))) return -1; char* pstr1; pstr1=(char*)btnName; if (_tcscmp((WCHAR*)pstr1,L"btnStop")==0) { sbRun ->Stop(); } else if (_tcscmp((WCHAR*)pstr1,L"btnRun")==0) { sbRun ->Stop(); sbRun ->Begin(); } else { MessageBox(NULL,TEXT("Exit Application!"),TEXT("Silverlight for Embedded test"),MB_OK); // ExitProcess(NULL); vhost->EndDialog(exitcode); } /* _bstr_t copName(btnName,true); _bstr_t btnRun("btnRun"); _bstr_t btnStop("btnStop"); if(copName._Compare(btnRun)) { } else if (copName._Compare(btnStop)) { MessageBox(NULL,TEXT("1"),TEXT("Silverlight for Embedded test"),MB_OK); sbRun ->Stop(); } else { MessageBox(NULL,TEXT("Exit Application!"),TEXT("Silverlight for Embedded test"),MB_OK); // ExitProcess(NULL); vhost->EndDialog(exitcode); } */ return S_OK; } }; template const WCHAR* to_wstring(T const &value) { std::wstring ss; //ssGetChildren(&coll))) { int count; if(!FAILED(coll->GetCount(&count))) { for(int i=0;iGetItem(i,&frames))) { IXRDoubleKeyFrameCollection* framecoll; if(!FAILED(frames->GetKeyFrames(&framecoll))) { IXRSplineDoubleKeyFrame* kf0; IXRSplineDoubleKeyFrame* kf1; framecoll->GetItem(0,&kf0); framecoll->GetItem(1,&kf1); float tempValue; if(oilValue =125) { isAdd=false; } if(isAdd) { oilValue+=5; } else { oilValue-=10; } kf1->GetValue(&tempValue); kf0->SetValue(tempValue); kf1->SetValue(oilValue); sbOil->Begin(); } } } } } } if(txtOil != NULL) //由于本人C++刚摸索页面字符显示乱码解决中望高手指点 { /*int decimal, sign,err; WCHAR txt=(WCHAR)_fcvt(oilValue,6,&decimal,&sign); MessageBox(NULL,&txt,TEXT("Silverlight for Embedded test"),MB_OK); txtOil ->SetText(&txt);*/ /*int decimal, sign,err; const char * s = _fcvt(oilValue,6,&decimal,&sign); int nlen = strlen(s); int nwLen = MultiByteToWideChar(CP_ACP,0,s,nlen,NULL,0); WCHAR lpszFile[256]; MultiByteToWideChar(CP_ACP,0,s,nlen,lpszFile,nwLen ); const WCHAR desc = (WCHAR)lpszFile;*/ txtOil ->SetText(to_wstring(&txtOil)); } return 0; } }; //页面主函数 int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow) { // TODO: Place code here. if(!XamlRuntimeInitialize()) return -1; HRESULT retcode; IXRApplicationPtr app; if (FAILED(retcode=GetXRApplicationInstance(&app))) return -1; if (FAILED(retcode=app->AddResourceModule(hInstance))) return -1; XRWindowCreateParams wp; ZeroMemory(&wp, sizeof(XRWindowCreateParams)); wp.Style = WS_OVERLAPPED; wp.pTitle = L"Wince Test"; wp.Left = 0; wp.Top = 0; XRXamlSource xamlsrc; //动态从文件系统中加载XAML xamlsrc.SetFile(L"\\Storage Card\\Page.xaml"); /* xamlsrc.SetFile(L"\\Page.xaml"); xamlsrc.SetResource(hInstance,TEXT("XAML"),MAKEINT RESOURCE(IDR_XAML1)); */ if (FAILED(retcode=app -> CreateHostFromXaml(&xamlsrc, &wp, &vhost))) return -1; IXRFrameworkElementPtr root; if (FAILED(retcode=vhost->GetRootElement(&root))) return -1; if(FAILED(retcode=root->FindName(TEXT("sbRun"),&sbR un))) return -1; sbRun->Begin(); if(!FAILED(retcode=root->FindName(TEXT("sbOil"),&sb Oil))) //注册storyboard Complete事件 { IXRDelegate* completedelegate; CompleteEventHandler comHandler; if(FAILED(retcode = CreateDelegate(&comHandler,&CompleteEventHandler:: OnStoryBoardComplete,&completedelegate))) return -1; if(FAILED(retcode = sbOil->AddCompletedEventHandler(completedelegate))) return -1; sbOil ->Begin(); } //注册按钮点击事件 IXRButtonBasePtr btn; IXRButtonBasePtr btnRun; IXRButtonBasePtr btnStop; //IXRCanvasPtr btn; if (FAILED(retcode=root->FindName(TEXT("btnDialog"), &btn))) return -1; if (FAILED(retcode=root->FindName(TEXT("btnRun"), &btnRun))) return -1; if (FAILED(retcode=root->FindName(TEXT("btnStop"), &btnStop))) return -1; retcode=root->FindName(TEXT("txtOil"),&txtOil); IXRDelegate* clickdelegate; BtnEventHandler handler; if (FAILED(retcode=CreateDelegate(&handler,&BtnEventH andler::OnClick,&clickdelegate))) return -1; if (FAILED(retcode=btn->AddClickEventHandler(clickdele gate))) return -1; if (FAILED(retcode=btnRun->AddClickEventHandler(clickd elegate))) return -1; if (FAILED(retcode=btnStop->AddClickEventHandler(click delegate))) return -1; clickdelegate->Release(); MessageBox(NULL,TEXT("load Successful!"),TEXT("Silverlight for Embedded test"),MB_OK); if (FAILED(retcode=vhost->StartDialog(&exitcode))) return -1; return 0; } 如需演示DEMO请留脚印!
下一节将介绍如何生成SDK,使用SDK进行开发,并在SL中实现资源()加载及应用全局样式!
发表评论
-
通过ACL和.net Framework实施对Windows对象访问的管理
2012-01-20 01:53 832通过ACL和.net Framework实施对Windows对 ... -
在android 2.3 AVD 模拟器上安装 google market 安卓市场
2012-01-20 01:53 667在android 2.3 AVD 模拟器上安装 google ... -
在android 2.3 AVD 模拟器上安装 google market 安卓市场
2012-01-20 01:53 789在android 2.3 AVD 模拟器上安装 google ... -
Windows Azure(四-2):云端的文件系统(Blob Storage)
2012-01-20 01:53 851Windows Azure(四-2):云端的文件系统(Blob ... -
永不放弃 never give up 我的校园
2012-01-19 09:40 649永不放弃 never give up 我 ... -
孩子们,老师现在说的,你们能懂吗
2012-01-19 09:40 512孩子们,老师现在说的, ... -
恶作剧之吻
2012-01-19 09:40 680恶作剧之吻 2012年01月14日 长大是一种忧伤的颜色 ... -
应聘教师时的常见问题2012-1-1
2012-01-19 09:39 805应聘教师时的常见问题2 ... -
【iphone】开发者传授APP开发,审核,发布流程!
2012-01-17 02:15 1789【iphone】开发者传授APP ... -
基于FLEX技术的应用架构设计及其应用
2012-01-17 02:15 753基于FLEX技术的应用架构 ... -
多线程
2012-01-17 02:15 693多线程 2011年05月15日 ... -
七雄争霸服务端详细安装说明【更新WIN系统架设教程】
2012-01-17 02:15 2103七雄争霸服务端详细安装说明【更新WIN系统架设教程】 201 ... -
利用HaRET移植android - 老知识收藏
2012-01-17 02:14 766利用HaRET移植android - 老 ... -
基于C#的Socket开发快速入门
2012-01-15 21:51 771基于C#的Socket开发快速 ... -
C++ socket编程(tcp udp)
2012-01-15 21:51 752C++ socket编程(tcp udp) 2011 ... -
一个封装的C++ Socket类
2012-01-15 21:51 988一个封装的C++ Socket类 2011年06月03日 ... -
C#托管Socket的实现方法
2012-01-15 21:51 716C#托管Socket的实现方法 2009年10月23日 ... -
C# Socket编程笔记
2012-01-15 21:51 542C# Socket编程笔记 2010年03月14日 看到 ...
相关推荐
Windows_Phone_7入门经典-使用Silverlight和XNA开发Windows_Phone应用
对Windows Phone 7应用程序生命周期的深度剖析,在与硬件进行交互和使用Expression Blend来创建更丰富的用户界面方面提供的建议,这些都有助于你学习创建独特而又实用的Windows Phone 7应用程序。
Silverlight for Windows Embedded CE
本课程是嵌入式Windows Standard (嵌入式 ...同时会介绍其最新的产品特性幵辅亍演示,比如利用Silverlight在嵌入式设备上开发精致的图形界面应用程序等。无论您是否曾经接触过嵌入式Windows不否,都将会有所得。
Silverlight for Windows Phone Toolkit.msi 其中包含了很多Windows Phone 开发需要的组件。 你正在开发Windows Phone程序的时候, 当你需要添加日历控件的时候,你发现在基本工具箱里面没有你想要的空间,并且也没有...
Silverlight for Windows Phone 7
Silverlight技术在公共气象服务平台WEB开发中的应用
Silverlight for Windows Phone开发系列课程(9):在Windows Phone设备上进行调试 Silverlight for Windows Phone开发系列课程(10):应用程序生命周期
MEF框架在Silverlight中应用,MEF是微软的插件解决方案。
尽管微软对于Silverlight的战略已经转变,不再吹捧将Silverlight作为提供跨平台运行时的承载工具,但是微软在继续推动Silverlight成为Windows Phone以及一些媒体和业务线(line-of-business)应用程序的开发平台。...
Microsoft.Silverlight.4.Business.Application.Development.Apr.2010.zip 《Silverlight 4 商业应用开发》PDF电子书
(1)创建第一个Silverlight应用
IIS7部署Silverlight应用程序(1)
Silverlight剪切板应用源码 这是一个在Silverlight中应用剪切板的实例程序。剪切板类提供了便于在系统剪切板中 保存和读取数据的静态方法。 详细请查看代码。
Silverlight矢量化图形系统在煤矿自动化平台中的应用.rar
Silverlight矢量化图形系统在煤矿自动化平台中的应用.pdf
本书适合于Windows Phone 7开发入门的读者,也适合于从其他智能手机平台转向Windows Phone 7平台的读者,同时对于有Windows Phone 7开发经验的读者也极具参考价值。 本书系统论述了Windows Phone 7操作系统的应用...
IIS7部署Silverlight应用程序(1)
Microsoft.Silverlight.for.Windows.Phone.7
Silverlight OOB应用源码,包含OOB自定义窗口组件开发和安装、升级等。