silverlight   发布时间:2022-05-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了WinCE7.0 下 Silverlight(XAML) 类型的应用启动逻辑大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

概述

WinCE7.0 下 Silverlight(XAML) 类型的应用启动顺序,如下堆栈所示:   SWEClock.exe!MainPage::OnLoaded(IXRDependencyObject* pRoot = 0x00047840) 行: 37, 字节偏移量: 0x24 C++ SWEClock.exe!XRCustomUserControlImpl<MainPage,IXRCustom
WinCE7.0 下 Silverlight(XAML) 类型的应用启动顺序,如下堆栈所示:
  @H_944_19@
SWEClock.exe!MainPage::OnLoaded(IXRDependencyObject* pRoot = 0x00047840) 行: 37,字节偏移量: 0x24	C++
SWEClock.exe!XRCustomUserControlImpl<MainPage,IXRCustomUserControl>::Create(IXRDependencyObject* pExisTingDependencyObject = 0x0004782c,IXRDependencyObject** ppNewDp = 0x0003fbf4) 行: 568,字节偏移量: 0x188	C++
 0x40158c30	
 0x40158e98	
 0x4015c850	
>SWEClock.exe!IXRApplication::CreateObject<IXRCustomUserControl>(_GUID& riid = {...},IXRCustomUserControl** ppObject = 0x0003fcb0) 行: 3112,字节偏移量: 0x3c	C++
SWEClock.exe!App::CreateHost(XRWindowCreateParams* pCreateParams = 0x0003fd00) 行: 112,字节偏移量: 0x54	C++
SWEClock.exe!App::Initialize(HINSTANCE__* hInstance = 0x064c005E) 行: 146,字节偏移量: 0x148	C++
SWEClock.exe!WinMain(HINSTANCE__* hInstance = 0x064c005e,HINSTANCE__* __formal = 0x00000000,wchar_t* __formal = 0x0003fe88,int __formal = 0x00000005) 行: 32,字节偏移量: 0x6c	C++
SWEClock.exe!WinMainCRTStartupHelper(HINSTANCE__* hInstance = 0x00000054,HINSTANCE__* hInstancePrev = 0x00000000,unsigned short* lpszCmdLine = 0x00000000,int nCmdShow = 0x00070005) 行: 71,字节偏移量: 0x40	C

调用 XAML 解析库后,再通过 OnLoaded() @L_772_1@返回应用代码。这样的话,OnLoaded() @L_772_1@名是指定的,不能修改
IXRApplication::CreateObject 定义在 x:\Program Files\Windows CE Tools\SDKs\HSW_T9_SDK\Include\Armv4i\xamlruntime.h 中
XRCustomUserControlImpl<MainPage,IXRCustomUserControl>::Create 定义在 x:\Program Files\Windows CE Tools\SDKs\HSW_T9_SDK\Include\Armv4i\xrcustomcatontrol.h 中

在 MainPage::OnLoaded() 中开始正式解析 XAML 文件,按 XAML 文件内容,定义相应的元素变量。XAML 解析库具体支持哪些元素,可以查看头文件:x:\Program Files\Windows CE Tools\SDKs\HSW_T9_SDK\Include\Armv4i\xrptr.h 的最后,类似于如下的定义:
	#define XR_smaRTPTR(X) typedef XRPtr< x > x##Ptr
	
	XR_smaRTPTR(IXRArcSegment);
	XR_smaRTPTR(IXRBeginStoryboard);
	XR_smaRTPTR(IXRBezierSegment);
	XR_smaRTPTR(IXRBitmapCachE);
	XR_smaRTPTR(IXRBitmapImagE);
	XR_smaRTPTR(IXRBorder);
	XR_smaRTPTR(IXRBrush);
	XR_smaRTPTR(IXRCanvas);

还可以为元素定义事件,如:加载、点击等,一般窗体在加载时需要特殊处理的,会定义加载事件,以事件处理@L_772_1@中完成必要的准备工作。
(1) Layout 加载
例如: Canvas 的 Root Element,则定义如下: IXRCanvasPtr m_pLayoutRoot;
@H_944_19@
FindName(L"LayoutRoot",&m_pLayoutRoot);
	if (m_pLayoutRoot)
	{
		m_pLayoutRoot->AddLoadedEventHandler(CreateDelegate(this,&MainPage::Canvas_Loaded));
	}
	
	// ============================================================================
	//  Canvas_Loaded
	// 
	//  Description: Event handler implementation
	//	Leo 与 Canvas 的 Loaded="Canvas_Loaded" 没有必然的联系,因为修改为 Loaded="Canvas_Loaded_2" 程序还可正常运行
	//  Parameters:  pSender - The dependency object that raised the click event.
	//               pArgs - Event specific arguments.
	// ============================================================================
	HRESULT MainPage::Canvas_Loaded (IXRDependencyObject* pSender,XRRoutedEventArgs* pArgs)
	{
		......
	}

(2) 新增加按键处理的方法
我们可以通过在 Expression Blend(XAML) 中或直接编辑 XAML 时指定的 Name 来访问我们的按钮。使用定义在 x:\Program Files\Windows CE Tools\SDKs\HSW_T9_SDK\Include\Armv4i\xrptr.h 文件中的 XAML 元素类型,具体如下:
    IXRButtonBasePtr MyBtn;
    if (@L_874_15@(retCode=root->FindName(TEXT("MyButton"),&MyBtn)))
        return -1;

为了能够收到用户点击按钮时的通知,我们需要提供一个委托(delegatE)。使用C#开发的朋友对委托的概念应该比较清楚,在这里一个委托即是一个指向具有指定原型(prototypE)的C++实例的成员的指针。 
我们可以在我们的cpp文件中声明一个简单的C++类,并在其中实现按钮点击事件的委托:
class BtnEventHandler
{
public:
    HRESULT OnClick(IXRDependencyObject* source,XRMouseButtonEventArgs* args)
    {
        messageBox(NULL,TEXT("Click!"),TEXT("Silverlight for Windows Embedded test"),MB_OK);
        return S_OK;
    }
};

当按钮被点击时我们的事件处理器(event handler)仅仅是简单的显示一个消息框。
正如你看到的事件处理器(event handler)有2个参数:一个指向产生事件(我们的按钮)的对象的指针和一个包含事件参数的结构体的指针。 
为了连接事件处理器(event handler)和按钮,我们需要创建一个委托对象:
    BtnEventHandler handler;
    IXRDelegate<XRMouseButtonEventArgs>* clickDelegate;
    if (@L_874_15@(retCode=CreateDelegate(&handler,&BtnEventHandler::OnClick,&clickDelegatE)))
        return -1;
    if (@L_874_15@(retCode=MyBtn->AddClickEventHandler(clickDelegatE)))
        return -1;


事件处理器已经连上我们的按钮了,现在只需要等待用户去点击我们漂亮的按钮并显示我们的UI。
指向委托对象的指针并不是一个智能指针(smart pointer),我们需要显式释放它:
 
   clickDelegate->Release();

大佬总结

以上是大佬教程为你收集整理的WinCE7.0 下 Silverlight(XAML) 类型的应用启动逻辑全部内容,希望文章能够帮你解决WinCE7.0 下 Silverlight(XAML) 类型的应用启动逻辑所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。