提供3000多款全球软件/控件产品
针对软件研发的各个阶段提供专业培训与技术咨询
根据客户需求提供定制化的软件开发服务
全球知名设计软件,显著提升设计质量
打造以经营为中心,实现生产过程透明化管理
帮助企业合理产能分配,提高资源利用率
快速打造数字化生产线,实现全流程追溯
生产过程精准追溯,满足企业合规要求
以六西格玛为理论基础,实现产品质量全数字化管理
通过大屏电子看板,实现车间透明化管理
对设备进行全生命周期管理,提高设备综合利用率
实现设备数据的实时采集与监控
利用数字化技术提升油气勘探的效率和成功率
钻井计划优化、实时监控和风险评估
提供业务洞察与决策支持实现数据驱动决策
翻译|其它|编辑:郝浩|2006-06-23 17:02:00.000|阅读 2110 次
概述:
# 慧都年终大促·界面/图表报表/文档/IDE等千款热门软控件火热促销中 >>
在完整的框架中,控件宿主功能是在 AxHost 类中实现的。AxHost 类与 CAxHostWindow 类十分相似,后者是一个 ATL 模板类,定义了一个可以宿主 ActiveX 控件的窗口。与 CAxHostWindow 类似,完整框架中的 AxHost 此时能完成的任务大大超出您的需要。在该实现中,您能做到的远不止对工具栏、属性页、框架等的操作。
为了让实现更易于管理,您需要引入几个功能部件来封装整体设计的某些逻辑子集。例如,容器支持将在 AxContainer 类中实现,如图 1 所示。OleSite 类将负责与站点相关的接口,并负责与控件的 IObjectWithSite 接口交互。
声明并实例化控件
要在 .NET Compact Framework 中宿主控件,您需要完成两个主要任务。需要使用 COM 接口定义创建一个导入库,并构建一个从 AxHost 类派生的控件类。
获得一个 COM 接口定义
要宿主控件,需要在从 AxHost 类派生的类中实现特定于控件的接口(IDispatch 或 IUnknown)。例如,Microsoft Windows Media Player 控件支持这样的调度接口:它们允许获取和设置属性,以及接收事件。它还支持 IUnknown 接口(如 IWMPCore 和 IWMPPlayer),这些接口可以并且应该直接映射到 .NET Compact Framework 类和接口。AxHost 类允许您通过 GetOcx 方法访问控件的 IUnknown 接口。如果您在 .NET Compact Framework 代码中有一个 COM 接口定义,则只需将 GetOcx 方法返回的对象类型转换为接口类型,框架就会内部执行 QueryInterface 方法。
手动创建接口定义
某些情况下,您会有一个 .idl 文件,它是由控件或 SDK 提供的。这种文件的定义可以手动转换为 .NET Compact Framework。要这么做并不容易,而且很容易出错。该方法是您最后的一招 - 当本文描述的其他方法不可用时。
例如,IWMPCdrom 接口是在完整的 Windows Media Player 10 中定义的,如以下示例代码所示。
[ object, uuid(74C09E02-F828-11d2-A74B-00A0C905F36E), dual, helpstring("IWMPControls: Public interface."), pointer_default(unique) ] interface IWMPControls : IDispatch { [ id( DISPID_WMPCONTROLS_ISAVAILABLE ), propget ] HRESULT isAvailable( [in] BSTR bstrItem, [out, retval] VARIANT_BOOL *pIsAvailable ); [ id( DISPID_WMPCONTROLS_PLAY ) ] HRESULT play(); [ id( DISPID_WMPCONTROLS_STOP ) ] HRESULT stop(); [ id( DISPID_WMPCONTROLS_PAUSE ) ] HRESULT pause(); [ id( DISPID_WMPCONTROLS_FASTFORWARD ) ] HRESULT fastForward(); [ id( DISPID_WMPCONTROLS_FASTREVERSE ) ] HRESULT fastReverse(); [ id( DISPID_WMPCONTROLS_CURRENTPOSITION ), propget ] HRESULT currentPosition( [out, retval] double * pdCurrentPosition ); [ id( DISPID_WMPCONTROLS_CURRENTPOSITION ), propput ] HRESULT currentPosition( [in] double dCurrentPosition ); [ id( DISPID_WMPCONTROLS_CURRENTPOSITIONSTRING ), propget ] HRESULT currentPositionString( [out, retval] BSTR * pbstrCurrentPosition ); [ id( DISPID_WMPCONTROLS_NEXT ) ] HRESULT next(); [ id( DISPID_WMPCONTROLS_PREVIOUS ) ] HRESULT previous(); [ id( DISPID_WMPCONTROLS_CURRENTITEM ), propget ] HRESULT currentItem( [out, retval] IWMPMedia **ppIWMPMedia); [ id( DISPID_WMPCONTROLS_CURRENTITEM ), propput ] HRESULT currentItem( [in] IWMPMedia *pIWMPMedia ); [ id( DISPID_WMPCONTROLS_CURRENTMARKER ), propget ] HRESULT currentMarker( [out, retval] long *plMarker); [ id( DISPID_WMPCONTROLS_CURRENTMARKER ), propput ] HRESULT currentMarker( [in] long lMarker); [ id( DISPID_WMPCONTROLS_PLAYITEM )] HRESULT playItem( [in] IWMPMedia *pIWMPMedia ); }
该接口 (IWMPCdrom) 可在 .NET Compact Framework 代码中定义,如以下示例代码所示。
[ComImport, InterfaceType(ComInterfaceType.InterfaceIsIDispatch)] [Guid("74C09E02-F828-11D2-A74B-00A0C905F36E")] public interface IWMPControls { [DispId(60)] IWMPMedia currentItem { get; set; } [DispId(61)] int currentMarker { get; set; } [DispId(56)] double currentPosition { get; set; } [DispId(57)] string currentPositionString { get; } [DispId(54)] void fastForward(); [DispId(55)] void fastReverse(); [DispId(62)] bool get_isAvailable(string bstrItem); [DispId(58)] void next(); [DispId(53)] void pause(); [DispId(51)] void play(); [DispId(63)] void playItem(IWMPMedia pIWMPMedia); [DispId(59)] void previous(); [DispId(52)] void stop(); }
前面提到过,这不是您想使用的方法,除非您不得不使用它。您必须显式定义接口的一种情况是:使用 TLBIMP 工具的自动导入产生了不希望的结果,或者出于某种原因您不能使用接口的平台调用定义。
本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@pclwef.cn
面对“数字中国”建设和中国制造2025战略实施的机遇期,中车信息公司紧跟时代的步伐,以“集约化、专业化、标准化、精益化、一体化、平台化”为工作目标,大力推进信息服务、工业软件等核心产品及业务的发展。在慧都3D解决方案的实施下,清软英泰建成了多模型来源的综合轻量化显示平台、实现文件不失真的百倍压缩比、针对模型中的大模型文件,在展示平台上进行流畅展示,提升工作效率,优化了使用体验。
本站的模型资源均免费下载,登录后即可下载。模型仅供学习交流,勿做商业用途。
本站的模型资源均免费下载,登录后即可下载。模型仅供学习交流,勿做商业用途。
本站的模型资源均免费下载,登录后即可下载。模型仅供学习交流,勿做商业用途。
服务电话
重庆/ 023-68661681
华东/ 13452821722
华南/ 18100878085
华北/ 17347785263
客户支持
技术支持咨询服务
服务热线:400-700-1020
邮箱:sales@pclwef.cn
关注我们
地址 : 重庆市九龙坡区火炬大道69号6幢