windows mobile activex and atl create (from csdn)

windows mobile activex and atl create (from csdn)
2011年01月13日
  Microsoft Corporation 适用于:
  Microsoft ActiveX
  Microsoft eMbedded Visual C++
  基于 Windows Mobile 的设备
  Microsoft Visual Studio 2005
  摘要:使用这一自己控制进度的动手体验,来获得完成 Microsoft Visual Studio 2005 本机设备开发体验的指导教程。将通过使用应用程序和类向导来生成 Microsoft Windows Mobile C++ 应用程序,设计其 UI,并对该应用程序进行数字签名和调试,这些操作都是在 Visual Studio 中进行的。完成此体验后,您就可以开始使用 Visual Studio 2005 作为新的 IDE 来进行本机 Windows Mobile 应用程序开发。此体验的技术等级为 Level 200(中级),您在 40 分钟内应该能够完成。
  
  简介
  
  练习 1:创建 ATL ActiveX 控件
  
  练习 2:创建 MFC ActiveX 宿主应用程序
  
  总结
  要完成此练习,您需要具备: Windows XP Professional。此体验要求具备 Windows XP Professional。 Visual Studio 2005
  此体验要求具备 Visual Studio 2005 Standard Edition、Professional Edition 或 Team System Edition。使用任何 Express Edition 将无法进行此体验。如果您不具备适当的 Visual Studio 2005 版本,请访问 Visual Studio 2005 Developer Center 以了解如何获取该版本。 ActiveSync 4.0
  通过 ActiveSync 4.0 可以在基于 Windows Mobile 的设备与您的计算机之间进行连接。 Windows Mobile 5.0 SDK。
  通过 Windows Mobile 5.0 SDK for Pocket PC 和 Windows Mobile 5.0 SDK for Smartphone 能够在 Visual Studio 2005 中开发基于 Windows Mobile 的设备: 注意:如果您在先前的动手体验中使用了仿真器,则在开始此体验之前,应当先对仿真器进行硬复位。在仿真器上,单击 File(文件),指向 Reset(复位),然后单击 Hard(硬复位)。
  如果在部署过程中收到错误,指出正在使用该进程或文件,这意味着程序仍在仿真器上运行着,必须先退出程序,然后才能部署和运行新的副本。在部署仿真器的体验中,随时都可能出现此错误。有关退出正在运行的应用程序的说明,请参阅此体验中的最后一个任务。 许多典型问题应已涵盖在 MSDN 上的"What's New in Visual Studio 2005 for Native Developers"和"将 Microsoft eMbedded Visual C++ 项目迁移到 Visual Studio 2005"两篇文章中。
  如果您按 CTRL + 空格键使用 IntelliSense 技术来完成一行代码,则 IDE 可能冻结。这是一个已知错误;因此,请不要按 CTRL + 空格键。
  此体验的目标是使用 Visual Studio 2005 来创建用于 Pocket PC 的 ATL ActiveX 控件,以及该 ActiveX 控件对应的 MFC 宿主设备应用程序。该 ActiveX 控件将是具有一种填充颜色的三角形,单击该控件时,填充颜色会发生变化。相应的宿主应用程序将是一个基于对话框的应用程序,用来驻留该 ActiveX 控件。此外,还将用一个测试证书对控件和宿主应用程序都进行签名。
  在此体验中,您将执行以下练习: 创建 ATL ActiveX 控件 创建 MFC ActiveX 宿主应用程序
  
  在此练习中,您将使用 Visual Studio 2005 来创建一个用于 Pocket PC 的 ATL ActiveX 控件。
  完成ATL 智能设备项目向导的步骤 在 Visual Studio 2005 中,单击 File | New | Project(文件 | 新建 | 项目)。 展开 Visual C++,然后选择 Smart Device(智能设备)。 选择 ATL Smart Device Project(ATL 智能设备项目),然后在 Name(名称)框中键入 Ctl1。 单击 OK(确定)。 在 ATL Smart Device Project Wizard(ATL 智能设备项目向导)页中,选择 Platforms(平台)。 确保 Windows Mobile 5.0 Pocket PC SDK 和 Pocket PC 2003 都位于 Selected SDKs(选定的 SDK)区域中。如果它们不在该区域中,则在 Installed SDKs(已安装的 SDK)区域中选择它们,然后单击 Add selected platform SDK to project(将选定的 Platform SDK 添加到项目中)按钮。 选择 Application Settings(应用程序设置)。 确保在 Server type(服务器类型)下选择了 Dynamic-link library (DLL)(动态链接库 [DLL]),且在 Additional options(附加选项)下没有选中任何复选框。 单击 Finish(完成)。 创建ActiveX 类的步骤 在 Solution Explorer(解决方案资源管理器)中,右键单击 Ctrl1 项目,然后单击 Add | Class(添加 | 类)。 展开 Visual C++,然后选择 SmartDevice(智能设备)。 在 Visual Studio installed templates(Visual Studio 已安装的模板)下,选择 ATL Control(ATL 控件),然后单击 Add(添加)。 在 Names(名称)页上,在 Shortname(简称)框中键入 MyCtl。 选择 StockProperties(常用属性)。 在 Not supported(不受支持)列表中,选择 FillColor(填充颜色)。 单击 Add selected property to the supported list(将选定的属性添加到受支持列表中)按钮将它添加到 Supported(受支持)列表中。 单击 Finish(完成)。请不要更改其他任何选项。 向ActiveX 类添加属性的步骤 单击 Class View(类视图)选项卡,然后展开 Ctl1。 右键单击 IMyCtl,再单击 Add(添加),然后单击 AddProperty(添加属性)。 在 Propertytype(属性类型)框中,选择 SHORT。 在 PropertyName(属性名称)框中,键入 Sides。 单击 Finish(完成)。 向ActiveX 类添加代码的步骤 在 Solution Explorer(解决方案资源管理器)中,双击 MyCtl.h。 在 IMyCtl 界面末尾查找以下代码。 将以下代码添加在步骤 2 中的代码之后。这些成员用于绘制控件的边。 将以下代码添加到 CMyCtl() 构造函数主体。这会将控件初始化,使其具有三个边和一种填充颜色。m_currentColor 用于跟踪当前颜色,以便单击控件时,该控件可以切换为其他颜色。 删除 OnDraw(ATL_DRAWINFO& di) 方法的主。 然后,在该方法声明的末尾添加一个分号(因为您将执行自己的 OnDraw)。OnDraw 方法应如下所示。 在消息映射段中插入以下消息处理程序:BEGIN_MSG_MAP(CMyCtl)。此代码使得 ActiveX 控件可以相应地处理自己的用户单击和响应。 CMyCtl 类的完整消息映射段应如下所示。 在 MessageMap 段下面添加以下处理程序原型。 打开 MyCtl.cpp。 将以下代码复制并粘贴到 MyCtl.cpp。此代码用于绘制 ActiveX 控件。 #define GSC_MASK 0x80000000L #define GSC_SETBIT 0x04000000L inline HRESULT wce_OleTranslateColor(OLE_COLOR clr, HPALETTE, COLORREF *retClr) { *retClr = (clr & GSC_MASK) ?GetSysColor(clr & (~GSC_MASK) | GSC_SETBIT) :(COLORREF)(clr & 0x00FFFFFF); return S_OK; } HRESULT CMyCtl::OnDraw(ATL_DRAWINFO& di) { RECT& rc = *(RECT*)di.prcBounds; HDC hdc = di.hdcDraw; COLORREF colFore; HBRUSH hOldBrush, hBrush; HPEN hOldPen, hPen; // 将 m_colFore 转换为 COLORREF 类型 wce_OleTranslateColor(m_clrFillColor, NULL, &colFore); // 创建并选择颜色来绘制圆 hPen = (HPEN)GetStockObject(BLACK_PEN); hOldPen = (HPEN)SelectObject(hdc, hPen); const double pi = 3.14159265358979; POINT ptCenter; double dblRadiusx = (rc.right - rc.left) / 2; double dblRadiusy = (rc.bottom - rc.top) / 2; double dblAngle = 3 * pi / 2; // 从顶端开始 double dblDiff = 2 * pi / m_nSides; // 使每条边转动角度将 // 使 ptCenter.x = (rc.left + rc.right) / 2; ptCenter.y = (rc.top + rc.bottom) / 2; // 计算每条边对应的点 for (int i = 0; i SDK\SDKTools\TestCertificates。 在 Files of Type(文件类型)组合框中,将文件类型更改为 Personal Information Exchange (*.pfx,*.p12),如下图所示。
  
  选择 TestCert_Privileged。 单击 Open(打开)。 在 File To Import(要导入的文件)页中,单击 Next(下一步)。 保留密码为空,然后单击 Next(下一步)。 确保选择了 Place all certificates in the following store(将所有证书放置在以下存储区中)选项按钮,并将 Certificate Store(证书存储区)属性设置为 Personal(个人)。 单击 Next(下一步)。 单击 Finish(完成)。 当 Import was successful(导入成功)对话框出现时,单击 OK(确定)。 关闭 Managed Certificates(托管证书)对话框。 在 Select Certificate(选择证书)对话框中,您现在应该会看到 Smartphone 2003 Privileged Test 证书,选择该证书,然后单击 OK(确定)。
  每次生成该项目时都应该使用此证书对其进行签名。 在 Ctl1 Property Pages(Ctl1 属性页)上,在 Provision Device(供应设备)列表中选择 Privileged Certificate Store(特许证书存储区),如下图所示。
  
  单击 OK(确定)。 每次部署该项目时,都会为设备的 Privileged Certificate Store(特许证书存储区)配置选定的证书。
  部署和注册ActiveX 控件的步骤 在 Solution Explorer(解决方案资源管理器)中,右键单击 Ctl1 项目,然后选择 Deploy(部署)。仿真器将打开,并将部署和注册 ActiveX 控件。
  
  在此练习中,您将使用 Visual Studio 2005 来创建一个用于 Pocket PC 的 MFC 应用程序,用以驻留在此体验的练习 1 中所创建的 ActiveX 控件。
  完成MFC 智能设备项目向导的步骤 在包括 Ctl1 项目的解决方案中,右键单击该解决方案,单击 Add(添加),然后单击 NewProject(新建项目)。 展开 Visual C++,然后选择 SmartDevice(智能设备)。 选择 MFC Smart Device Application(MFC 智能设备应用程序),然后在 Name(名称)框中键入类型 MyHostApp,如下图所示。
  
  单击 OK(确定)。
  MFC 智能设备应用程序向导将打开。 选择 Platforms(平台)。 确保 Pocket PC 2003 和 Windows Mobile 5.0 Pocket PC SDK 都位于 Selected SDKs(选定的 SDK)区域中。如果它们不在该区域中,则在 Installed SDKs(已安装的 SDK)区域中选择它们,然后单击 Add selected platform SDK to project button(将选定的 Platform SDK 添加到项目中)按钮。 选择 Application Type(应用程序类型)。 将 ApplicationType(应用程序类型)更改为 DialogBased(基于对话框)。 选择 AdvancedFeatures(高级功能)。 选中 ActiveX controls(ActiveX 控件)复选框。 单击 Finish(完成)。 将ActiveX 控件添加到对话框的步骤 在 Solution Explorer(解决方案资源管理器)中,双击 MyCtl.rgs(在 Ctl1 项目 ResourceFiles 节点下面)。 选择 MyCtl类 CLSID 并按 CTRL+C(确保选中了大括号),如下图所示。请注意,项目中将具有的 GUID 与图中所示的不同。
  
  在 Solution Explorer(解决方案资源管理器)中,双击 MyHostAppppc.rc。 展开 MyHostApp | MyHostAppppc.rc | Dialog。 双击 IDD_MYHOSTAPP_DIALOG。 在 Dialog Editor(对话框编辑器)中,选择默认的静态文本控件(如下图所示),然后按 Delete 键。
  
  从 Toolbox(工具箱)中,将 CustomControl(自定义控件)拖动到对话框的左上角。 在自定义控件的右下角中单击,然后调整其大小,使其占据整个对话框,如下图所示。
  
  右键单击该自定义控件,然后选择 Properties(属性)。 在该自定义控件的 Properties(属性)窗口中,单击 Class(类)属性字段,然后按 CTRL+V。
  将从剪贴板中粘贴 ActiveX 控件 MyCtl 类 CLSID。 在 Solution Explorer(解决方案资源管理器)中,右键单击 MyHostAppppc.rc2,然后选择 ViewCode(查看代码)。 在 Add Manually Edited Resources Here(在此处添加手动编辑的资源)区域中,粘贴以下代码。必须具有 Dialog Init 段才能正确显示该自定义控件。但并不使用实际 Dialog Init 段的内容。 对ActiveX 项目进行签名的步骤 在 Solution Explorer(解决方案资源管理器)中,右键单击 MyHostApp 项目,然后选择 Properties(属性)。 展开 AuthenticodeSigning(Authenticode 签名),然后选择 General(常规)。 将 AuthenticodeSignature(Authenticode 签名)属性更改为 Yes(是)。 单击 Certificate(证书),然后选择省略号按钮。 在 SelectCertificate(选择证书)对话框中,选择 Smartphone 2003 Privileged Test 证书,然后单击 OK(确定)。 每次生成该项目时都应该使用此证书对其进行签名。 选择 ProvisionDevice(供应设备),然后单击 Privileged Certificate Store(特许证书存储区),如下图所示。
  
  单击 OK(确定)。 每次部署该项目时,都会为设备的 Privileged Certificate Store(特许证书存储区)配置选定的证书。
  部署解决方案的步骤 在 Solution Explorer(解决方案资源管理器)中,右键单击 MyHostApp 项目,然后单击 Set As Startup(设为启动项目)。 按 F5。 对话框出现后,单击该控件,注意颜色的变化。 以下任务说明了如何终止在设备或仿真器上运行的应用程序。如果在没有附加调试器的情况下启动了应用程序,并且需要终止该应用程序以便可以部署新的应用程序副本,则会用到此任务。将通过在 Visual Studio 中使用远程进程查看器这一远程工具来终止应用程序。
  需要知道可执行文件的名称才能终止进程。大多数情况下,此名称就是 Visual Studio 项目的名称。如果您不确定可执行文件的名称,则可以在项目属性中查找。
  终止在设备或仿真器上运行的应用程序的步骤 从 Visual Studio 中,选择 Project(项目),然后选择 xxx Properties(xxx 属性),其中 xxx 代表当前项目的名称。 注意 Assembly Name(程序集名称)字段中的值。此值是可执行文件在设备或仿真器上运行时将使用的名称。 关闭 Properties(属性)对话框。
  现在,您就可以终止进程了。 从 Start(开始)菜单中,单击 Start > Microsoft Visual Studio 2005 > Visual Studio Remote Tools > Remote Process Viewer(开始 > Microsoft Visual Studio 2005 > Visual Studio 远程工具 > 远程进程查看器)。 收到 Select a Windows CE Device(选择一个 Windows CE 设备)对话框提示后,选择正在运行该应用程序的仿真器或设备(如下图所示),然后单击 OK(确定)。
  
  连接到仿真器或设备之后,在 Remote Process Viewer(远程进程查看器)的顶部窗格中找到您要终止的应用程序,如下图所示。
  
  可能需要加宽 Process(进程)列(最左边的列)以完全显示出进程名称。 单击进程名称以选择进程。 要终止进程,请从 RemoteProcess Viewer(远程进程查看器)菜单中选择 File > Terminate Process(文件 > 终止进程)。
  注意:在单击 TerminateProcess(终止进程)之前,请确保选择了正确的进程。终止不正确的进程可能会致使设备或仿真器不可用,这样就必须将其复位才能再次使用。 通过在 Remote Process Viewer(远程进程查看器)菜单上选择 Target > Refresh(目标 > 刷新)并再次滚动浏览顶部窗格,来验证进程是否已终止。如果该应用程序名仍然存在,则说明进程未被终止,您需要重复以上步骤。
  注意:大多数进程只需执行一次操作即可终止;但是,根据应用程序状态的不同,偶尔会需要执行两次操作才能终止。
  
  在此体验中,您执行了以下练习 创建 ATL ActiveX 控件 创建 MFC ActiveX 宿主应用程序 在此体验中,您通过使用 Visual Studio 2005 应用程序和类向导创建了一个 ATL ActiveX 控件。还创建了一个基于对话框的 MFC 应用程序来驻留该控件,并使用资源编辑器和自定义控件为 ActiveX 宿主提供了设计时体验。另外,还用一个测试证书对两个项目进行了签名,此证书还被配置给了设备,使得应用程序(和控件)可以在具有安全模型的基于 Microsoft Windows Mobile 的设备上以"特权"模式运行。

你可能感兴趣的:(windows mobile activex and atl create (from csdn))