没有找到合适的产品?
联系客服协助选型:023-68661681
提供3000多款全球软件/控件产品
针对软件研发的各个阶段提供专业培训与技术咨询
根据客户需求提供定制化的软件开发服务
全球知名设计软件,显著提升设计质量
打造以经营为中心,实现生产过程透明化管理
帮助企业合理产能分配,提高资源利用率
快速打造数字化生产线,实现全流程追溯
生产过程精准追溯,满足企业合规要求
以六西格玛为理论基础,实现产品质量全数字化管理
通过大屏电子看板,实现车间透明化管理
对设备进行全生命周期管理,提高设备综合利用率
实现设备数据的实时采集与监控
利用数字化技术提升油气勘探的效率和成功率
钻井计划优化、实时监控和风险评估
提供业务洞察与决策支持实现数据驱动决策
翻译|其它|编辑:郝浩|2005-10-20 09:16:00.000|阅读 1418 次
概述:
# 界面/图表报表/文档/IDE等千款热门软控件火热销售中 >>
简介
ActiveX控件是使用COM(组件对象模型)技术创建的一个用户界面组件。ActiveX控件具有体积小、速度快和功能强大的特点,并且可以简化集成和重用软件组件的工作。本文讨论了如何为Pocket
PC上的Pocket Internet Explorer创建ActiveX控件,同时还描述了如何在基于Pocket Internet
Explorer的应用程序中使用ActiveX控件。
在由Windows驱动的设备上开发和使用ActiveX控件时需要以下软件:
1. Microsoft eMbedded Visual C++ 3.0
2. Microsoft Windows CE Platform Software Development Kit(SDK)for Pocket PC
3. Microsoft Windows CE Services 2.2或更高的版本
Visual C++开发系统提供了三种为基于Windows CE设备建立ActiveX控件的方法:
自动化程度最低的方法就是不使用编程框架编写控件,而使用标准Windows CE OLE应用编程接口(API)。
用Active Template Library(ATL)for Windows CE,我们强烈建立这一方法,因为它可以得到体积更小、速度更快的控件。
使用Microsoft Foundation Classes(MFC)for Windows CE也是可行的,但不在本文的讨论范围之内。
在本文中,我们将重点讨论如何使用ATL for Windows CE为Pocket Internet Explorer开发小型、轻量的控件。
利用ATL实现ActiveX控件
使用eMbedded Visual C++创建基于ATL的ActiveX控件非常简单。只需运行eMbedded Visual C++,并使用ATL COM
AppWizard创建一个新工程。ATL COM AppWizard将为您的ActiveX控件创建一个好的起点。
然后,您需要向该工程内添加COM对象。只需从菜单中选择Insert/New ATL Object(插入/新建ATL对象),然后选择Simple
Object(简单对象),最后为您的ActiveX对象命名。
这就行了!您刚刚已经创建了一个Pocket Internet Explorer ActiveX控件!尽管它并不执行任何操作,但这一控件的确可以在Pocket
Internet Explorer上加载。
让我们研究一下如何向该ActiveX控件添加一些功能。
添加用户界面
使用ATL向这一ActiveX控件“骨架”添加UI非常简单,只需添加两个已由ATL定义的实现方式,然后绘出您的对象即可。
向ActiveX对象添加以下实现方式将把ActiveX对象定义为控件,同时定义了一个界面,该界面允许对象直接显示自身,而无需向调用程序(IViewObject)传输数据对象。此外,IViewObject接口可以创建和管理与通知接受器的连接,让调用程序获取控件改变的通知。
CComControl<CAXSampleCtl>
IViewObjectExImpl<CAXSampleCtl>
在向ActiveX控件添加了这两个实现方式后,您可以覆盖该对象刚刚继承的CComControl实现的OnDraw()方法。
在本例中,ActiveX控件将在分配给该控件的客户窗口区中绘制4个圆(稍后我们将看到如何创建指定宽度和高度的控件)。 HRESULT
CAXSampleCtl::OnDraw
HRESULT CAXSampleCtl::OnDraw
(
ATL_DRAWINFO & di
)
{
RECT rc = *((RECT*)di.prcBounds);
HDC hdc = di.hdcDraw;
Ellipse(hdc, 0, 0, (rc.right / 2), (rc.bottom / 2));
Ellipse(hdc, (rc.right / 2), 0, rc.right, (rc.bottom / 2));
Ellipse(hdc, 0, (rc.bottom / 2), (rc.right / 2), rc.bottom);
Ellipse(hdc, (rc.right / 2), (rc.bottom / 2), rc.right, rc.bottom);
return S_OK;
}
OnDraw()函数负责为控件创建UI(用户界面)。
获取用户输入
向ActiveX对象添加的以下实现方式实现了控件与Pocket Internet Explorer间的通讯,让Pocket Internet
Explorer能处理控件内的窗口消息和用户交互。
IOleControlImpl<CAXSampleCtl>
IOleObjectImpl<CAXSampleCtl>
IOleInPlaceActiveObjectImpl<CAXSampleCtl>
IOleInPlaceObjectWindowlessImpl<CAXSampleCtl>
通过这些实现方式和消息映射,您可以处理分配给该ActiveX控件的普通窗口消息。在本例中,我们将用一个函数来指示用户点击该控件时间。首先,我们将为WM_LBUTTONDOWN定义一个消息映射,然后创建一个OnLButtonDown函数,它将在用户点击ActiveX控件时调用。
BEGIN_MSG_MAP(CAXSampleCtl)
MESSAGE_HANDLER(WM_LBUTTONDOWN, OnLButtonDown)
CHAIN_MSG_MAP(CComControl<CAXSampleCtl>)
END_MSG_MAP()
LRESULT OnLButtonDown(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL & bHandled);
通过该消息映射,控件将在用户点击该控件时得到通知。在本例中,我们将在用户点击控件时改变圆圈的色彩。例如,圆圈将由黑色(全 0)改变为白色(全1)。
LRESULT CAXSampleCtl::OnLButtonDown
LRESULT CAXSampleCtl::OnLButtonDown
(
UINT uMsg,
WPARAM wParam,
LPARAM lParam,
BOOL & bHandled
)
{
POINT pt = { LOWORD(lParam), HIWORD(lParam) };
RECT rcClient; GetClientRect(&rcClient);
if (PtInCircle(pt, 0, 0, (rcClient.right / 2), (rcClient.bottom / 2)))
put_FillColor(~m_crFillColor);
else
MessageBeep(0);
bHandled = TRUE;
return 0;
}
在put_FillColor()方法中,我们向容器(Pocket Internet Explorer)发出视图已改变的通知。该通知将让Pocket
Internet Explorer更新控件的显示(也就是重绘ActiveX控件)。
STDMETHODIMP CAXSampleCtl::put_FillColor
(
COLORREF crFillColor
)
{
if (FireOnRequestEdit(DISPID_FILLCOLOR) == S_FALSE)
return S_FALSE;
m_crFillColor = crFillColor;
m_bRequiresSave = TRUE;
FireOnChanged(DISPID_FILLCOLOR);
FireViewChange();
SendOnDataChange(NULL);
return S_OK;
}
在Pocket Internet Explorer中访问ActiveX控件
下面,我们将添加在脚本中访问ActiveX控件属性和方法的支持。此时需要添加以下ATL实现方式:
IDispatchImpl<IAXSampleCtl, &IID_IAXSampleCtl, &LIBID_AXSAMPLELib>
IProvideClassInfoImpl<&CLSID_AXSampleCtl, &IID_IAXSampleCtl>
通过这些实现方式,我们就可以在Pocket Internet
Explorer脚本中访问ActiveX控件的属性和方法。但首先我们还需在HTML中创建一个ActiveX对象。
HTML提供了标签,使用它即可在Pocket Internet Explorer内创建ActiveX控件。
<OBJECT
ID="AXSample"
CLASSID="clsid:546E636A-DD23-4E22-A6F7-07AD4CB96642"
WIDTH=100
HEIGHT=100
>
</OBJECT>
以上的标签及其属性创建了该控件,该控件由CLASSID标示,大小为100 x 100像素。
如果ActiveX控件没有UI,您还可以创建一个实例,并使用ActiveXObject方法经由Jscript访问该ActiveX控件。
<SCRIPT LANGUAGE=擩Script?
var AX = new ActiveXObject("AXSample.AXSampleCtl");
?
</SCRIPT>
ActiveXObject动态控件创建将实现脚本代码和ActiveX控件间的一些特有交互方式。
以下是一个HTML代码片段,它在用户点击名为“Change Fill Color”的HTML FORM按钮时改变AXSAMPLE
ActiveX控件的FillColor(填充色)。
<SCRIPT LANGUAGE="JScript">
function fillColorChange()
{
AXSample.FillColor = 32000;
}
</SCRIPT>
<FORM>
<INPUT TYPE="BUTTON" VALUE="Change Fill Color" ONCLICK="fillColorChange()">
<BR>
</FORM>
处理对象的标签
标签还提供了一个附加特性,可以在创建控件时设置控件的默认属性值。因此您无需创建脚本代码即可预置属性(如例子中的FillColor属性)。
该特性只可通过以下ATL实现方式获得:
IPersistPropertyBagImpl<CAXSampleCtl>
and property map information
BEGIN_PROP_MAP(CAXSampleCtl)
PROP_ENTRY("FillColor", DISPID_FILLCOLOR, CLSID_NULL)
END_PROP_MAP()
向ActiveX控件添加该信息可以让您在标签内制定信息,以在创建控件时覆盖这些默认属性值。
例如,下面的代码将AXSAMPLE控件中圆圈的FillColor属性设置为黑色。
<OBJECT
ID="AXSample"
CLASSID="clsid:546E636A-DD23-4E22-A6F7-07AD4CB96642"
WIDTH=100
HEIGHT=100
>
</OBJECT>
将控件声明为“Safe for Scripting”
Pocket PC是在Pocket Internet
Explorer中实现ActiveX控件的第一个Windows设备。因此,浏览器将验证该控件对脚本是否安全。验证通过IObjectSafety接口实现。在创建控件时,Pocket
Internet Explorer for Pocket PC调用控件上的QueryInterface获取IObjectSafety值。
如果控件不支持该接口,用户将得到一个提示“该页面可能包含不安全的控件。还启用该控件吗?”的对话框。
IObjectSafety通过IObjectSafetyImpl在ATL中实现:
IObjectSafetyImpl<CAXSampleCtl,
INTERFACESAFE_FOR_UNTRUSTED_CALLER |
INTERFACESAFE_FOR_UNTRUSTED_DATA>
在本例中,我们在ActiveX控件的创建器中设置了通用的安全选项:
m_dwCurrentSafety = INTERFACESAFE_FOR_UNTRUSTED_CALLER
| INTERFACESAFE_FOR_UNTRUSTED_DATA;
这将使控件无需用户介入即可创建和显示。
获取Browser Object Model的访问权
在ActiveX控件的创建过程中,Pocket Internet
Explorer通过调用控件的QueryInterface获取IObjectWithSite值。如果控件支持该接口,Pocket Internet
Explorer将用指向浏览器接口的指针调用SetSite方法。在Pocket PC上,Pocket Internet
Explorer支持IBrowser和IBrowser2接口及BrowserEvents显示接口。 IBrowser
IBrowser
Navigate
Refresh
Stop
Busy
Title
LocationURL
IsFrame
ScrollStyle
MarginWidth
MarginHeight
FrameNavigate
SelectedCodepage
IBrowser2
LayoutWidth
LayoutHeight
LocationBaseURL
ClearTypeEnabled
ClearTypeEnabled
ScriptingEnabled
FitToWindow
ShowImages
PlaySounds
ZoomLevel
_BrowserEvents
BeforeNavigate
CommandStateChange
DownloadBegin
DownloadComplete
NavigateComplete
NewWindow
TitleChange
FrameBeforeNavigate
FrameNavigateComplete
OnStatusBar
分发ActiveX控件
在建立好ActiveX控件后,它们可以在内部使用,也可以分发给第三方使用。
要在内部使用某ActiveX控件,只需将该控件拷贝到运行位置,并调用regsvrce.exe工具在Pocket PC设备上注册ActiveX控件。
供第三方使用的ActiveX控件需要一个安装程序。安装程序必须注册该控件。regsrvce.exe工具可以在Pocket
PC设备上注册ActiveX控件,regsvr32.exe工具可以在桌面系统上注册ActiveX控件(一般而言,成品控件都可在桌面和小型设备上使用)。另一个选择就是编写安装程序直接注册该控件。
随ActiveX提供的安装程序应该在Windows系统目录下安装该控件的.dll(动态链接库)文件和必要的可分发.dll文件。如果用户机器上已有部分DLL,安装程序将比较这些DLL的版本,只有原DLL的版本低于新DLL的版本时才覆盖它。因为ActiveX控件只可用于OLE容器应用程序中,所以无需随控件分发所有OLE动态链接库文件。
小结
用户可以使用Active Template Library(ATL)for Windows CE开发ActiveX控件,并将开发出来的控件用在Pocket
PC的Internet
Explorer中。为设备开发可重用代码组件是一个快速而强大的方法。开来出来的组件具有体积小和执行速度快的优点,并且允许开发人员按照自己的需要扩展浏览器的功能。
本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@evget.com
面对“数字中国”建设和中国制造2025战略实施的机遇期,中车信息公司紧跟时代的步伐,以“集约化、专业化、标准化、精益化、一体化、平台化”为工作目标,大力推进信息服务、工业软件等核心产品及业务的发展。在慧都3D解决方案的实施下,清软英泰建成了多模型来源的综合轻量化显示平台、实现文件不失真的百倍压缩比、针对模型中的大模型文件,在展示平台上进行流畅展示,提升工作效率,优化了使用体验。
本站的模型资源均免费下载,登录后即可下载。模型仅供学习交流,勿做商业用途。
本站的模型资源均免费下载,登录后即可下载。模型仅供学习交流,勿做商业用途。
本站的模型资源均免费下载,登录后即可下载。模型仅供学习交流,勿做商业用途。
服务电话
重庆/ 023-68661681
华东/ 13452821722
华南/ 18100878085
华北/ 17347785263
客户支持
技术支持咨询服务
服务热线:400-700-1020
邮箱:sales@evget.com
关注我们
地址 : 重庆市九龙坡区火炬大道69号6幢
慧都科技 版权所有 Copyright 2003-
2025 渝ICP备12000582号-13 渝公网安备
50010702500608号