简介如果您已经在创建本机窗口控件上投入了精力并希望在 .NET Compact Framework 代码中使用该控件,或者您想利用一些 .NET Compact Framework 不直接支持的 Windows CE 内部控件,那么您需要一种与本机窗口控件互操作的方法。OpenNETCF Smart Device Framework 具有使用 MessageWindow 类进行新的自定义实现的功能。该实现使用平台调用来创建能够宿主本机控件的可见窗体。本文将介绍如何创建自定义控件以宿主本机 Windows 控件 — 我的示例是有关 Windows CE 中可用的 HTML 控件的一个托管控件。 关于 ControlEx 类与 .NET Compact Framework 上的其他自定义控件一样,开发工作从派生于 System.Windows.Forms.Control 的类开始。然而,处理大量的内部管线 (plumbing) 需要宿主本机控件,我创建了一个 OpenNETCF.Windows.Forms.ControlEx 类。 ControlEx 类通过宿主一个已修改的 MessageWindow 类来工作。因为 MessageWindow 被创建为 0 乘 0 像素的不可见本机窗口,所以它是极好的 Windows 接收器,但是作为用户界面的一部分,它无法执行什么有用的功能。所以我们使用平台调用来改变该窗口的属性,使它可见,并因此允许在其中宿主其他控件。 ControlEx 负责创建 ControlMessageWindow 以及创建所选择的本机控件。在运行时,ControlMessageWindow 接收来自本机控件的所有通知消息,并将它们传递给 ControlEx 派生类(在本例中为 WebBrowser)中的 OnNotifyMessage 方法。ControlEx 自动响应事件,如大小调整、焦点改变等,并自动调整本机控件的大小。 在创建新的 ControlMessageWindow 时,将分配一项对父托管控件的引用。通过使用平台调用,调用 SetWindowParent API 方法以使 ControlMessageWindow 成为 ControlEx 派生类的子类。ControlEx 自身创建本机控件作为 ControlMessageWindow 的子类。按照这种方式,来自本机控件的通知消息由 MessageWindow 接收,并且传递回托管 ControlEx 派生类中。 标准功能 ControlEx 类具有用于派生控件的许多属性(包括 BorderStyle、Handle、Name 和 Tag)的内置实现。 窗口句柄.NET Compact Framework 没有公开控件的本机窗口句柄。ControlEx 类实现了 IWin32Window 接口,该接口存在于完整的 .NET Framework 中,但通过 OpenNETCF 添加到 .NET Compact Framework 中。此接口定义了一个 Handle 属性 — 用于公开托管控件自身的窗口句柄。这通过设置控件上的 Capture 和使用 API 函数 GetCapture 返回窗口句柄来确定:
/// <summary> /// Native Window Handle /// </summary> public IntPtr Handle { get { if(m_handle==IntPtr.Zero) { this.Capture = true; m_handle = OpenNETCF.Win32.Win32Window.GetCapture(); this.Capture = false; } return m_handle; } }
|
|
|
|
|
|
标签NewsAbout错误:Timeout expired. The timeout period elapsed prior to completion of the operation or the server is not responding.
|
|
|
|