在ActiveX控件中检测IE中STOP按钮的按下

许多ActiveX控件,比如:ActiveMovie, IE工具条中的Stop按钮对于他们来说有特殊的意义。当Stop按钮下按时这些控件可以停止播放背景音乐或动画。这篇文章将告诉你在ActiveX控件中添加IOleCommandTarget接口来捕捉Stop 按钮的动作。

详细内容

为了支持IOleCommandTarget接口你必须手工在COleControl派生类的.h 和.cpp文件中添加如下代码。然后,你可以在IOleCommandTarget::Exec()函数中捕获OLECMDID_STOP命令id (IE工具条中Stop 按钮的id)。具体代码如下:

// COleControl派生类的.h文件:
class CMyOleControl : public COleControl
{
...
// Interface Maps
protected:
// Add the following to support the IOleCommandTarget interface.
// NOTE: Nested class name is called CmdTargetObj
DECLARE_INTERFACE_MAP()
BEGIN_INTERFACE_PART(CmdTargetObj, IOleCommandTarget)
STDMETHOD(QueryStatus)(const GUID*, ULONG, OLECMD[], OLECMDTEXT*);
STDMETHOD(Exec)(const GUID*, DWORD, DWORD, VARIANTARG*,
VARIANTARG*);
END_INTERFACE_PART(CmdTargetObj)
};
//COleControl派生类的.cpp文件:
BEGIN_INTERFACE_MAP(CMyOleControl, COleControl)
INTERFACE_PART(CMyOleControl, IID_IOleCommandTarget, CmdTargetObj)
END_INTERFACE_MAP()
ULONG FAR EXPORT CMyOleControl::XCmdTargetObj::AddRef()
{
METHOD_PROLOGUE(CMyOleControl, CmdTargetObj)
return pThis->ExternalAddRef();
}
ULONG FAR EXPORT CMyOleControl::XCmdTargetObj::Release()
{
METHOD_PROLOGUE(CMyOleControl, CmdTargetObj)
return pThis->ExternalRelease();
}
HRESULT FAR EXPORT CMyOleControl::XCmdTargetObj::QueryInterface(
REFIID iid, void FAR* FAR* ppvObj)
{
METHOD_PROLOGUE(CMyOleControl, CmdTargetObj)
return (HRESULT)pThis->ExternalQueryInterface(&iid, ppvObj);
}
STDMETHODIMP CMyOleControl::XCmdTargetObj::QueryStatus(
const GUID* pguidCmdGroup, ULONG cCmds, OLECMD rgCmds[],
OLECMDTEXT* pcmdtext)
{
METHOD_PROLOGUE(CMyOleControl, CmdTargetObj)
//... add YOUR own code here.
return S_OK;
}
STDMETHODIMP CMyOleControl::XCmdTargetObj::Exec(
const GUID* pguidCmdGroup, DWORD nCmdID, DWORD nCmdExecOpt,
VARIANTARG* pvarargIn, VARIANTARG* pvarargOut)
{
METHOD_PROLOGUE(CMyOleControl, CmdTargetObj)
if (nCmdID == OLECMDID_STOP)
{
// ... STOP button is clicked, add YOUR own code here.
// We just display a message box.
::MessageBox(NULL, "STOP","CMyOleControl", MB_OK);
}
return S_OK;
}

时间: 2024-10-18 15:45:03

在ActiveX控件中检测IE中STOP按钮的按下的相关文章

如何注册或注销Access 2007中ActiveX控件

INTRODUCTION 本文描述如何注册或注销 Microsoft Office Access 2007 中 ActiveX 控件. 更多信息 在早期版本的 Access 比 Access 2007, 您可以注册或撤消 ActiveX 控件通过单击 工具 菜单上 ActiveX 控件 . Access 2007, 中无法使用此方法. 如果要注册或撤消 ActiveX 控件, 使用下列方法之一. 方法 1: 使用 VisualBasic 代码要使用 VisualBasic 代码来注册或撤消 Ac

ctivex-MFC中开发ActiveX控件问题

问题描述 MFC中开发ActiveX控件问题 在VS2010中使用VC++的MFC建立ActiveX控件时,控件默认在整个控件区域画了一个椭圆.问:如何改变控件的大小,即使控件有一个自定义的默认大小?求教... 解决方案 MoveWindow等来控制控件大小. 解决方案二: 你可以定义一个属性表示椭圆所在的区域的大小.构造函数给它们默认值画图的代码据此绘出椭圆. 解决方案三: 这个,改变初始值就可以了啊 解决方案四: onwindowsize消息里面做点手脚. 解决方案五: 大小一般是在创建控件

使用ActiveX控件开发网页常见的问题

1. 什么是ActiveX 控件? Microsoft ActiveX 控件是由软件提供商开发的可重用的软件组件.使用 ActiveX控件,可以很快地在网址.台式应用程序.以及开发工具中加入特殊的功能.例如,StockTicker控件可以用来在网页上即时地加入活动信息,动画控件可用来向网页中加入动画特性. 现在,已有1000多个商用的ActiveX控件,开发控件可以使用各种编程语言,如C,C++,下一代的Microsoft Visual Basic,以及微软公司的 Visual Java开发环境

ActiveX控件注册的几种方法

本文中的程序原为VC++所编写,略改动一些,将程序用C++Builder编写. ActiveX控件是一个动态链接库,是作为基于COM服务器进行操作的,并且可以嵌入在包容器宿主应用程序中,ActiveX控件的前身就是OLE控件.由于ActiveX控件与开发平台无关,因此,在一种编程语言上开发的ActiveX控件可以无须作任何修改,即可在另一种编程语言中使用,其效果如同使用Windows通用控件一样.如:在VC++中开发的ActiveX控件,不作任何修改即可应用于VB中.由此可见,通过使用Activ

用C#编写ActiveX控件(一)

active|activex|控件  前些日子做一个Web项目,必须自己编写一个ActiveX控件.如今的ActiveX控件大多是使用VB/C++来开发的,而我对他们并不熟悉,因此考虑使用熟悉的C#编写ActiveX控件.     首先,建立一个WinForm控件项目HelloWorld,并拖入一个Label控件,文字设为HelloWorld,如图:   UserControl1.cs内容如下:  using System;  using System.Collections;  using S

VC写的ActiveX控件能不能被ASP.NET引用

active|activex|asp.net|控件   1.尊敬的合作伙伴:您好!   非常感谢您使用微软新闻组技术支持!关于您提到的ASP.NET无法引用VC写的控件的问题,我想请问您是想在服务器端引用VC控件中的一些功能,还是VC写了一个ActiveX的控件而无法在网页中使用.请您能否详细描述一下您目前遇到的错误.或者是您引用VC控件时遇到的具体错误信息,这样以方便我们能够更好的来帮助您解决问题,谢谢! 2.关于您提到C#与VC写的ActiveX控件进行交互的问题,从您的描述来看,根据我的理

标准MFC WinSock ActiveX控件开发实例(II)高级篇

回顾:在上一篇文章<标准MFC WinSock ActiveX控件开发实例>中我们详细介绍了控件的开发过程,以及接口和事件的 添加和响应方法.现在我们将继续上次没有写完的控件继续进行开发,并完善作为一个WinSock控件应该具备的功能. 二.按照前一篇文章提到的知识,现在我们来添加两个新的接口分别是SendData()和GetData(),它们看起来如下: //网络数据发送,在指定的超时时间内进行发送然后返回,成功返回实际发送字节数,否则返回负数 long CMFCWinSockCtrl::S

COM组件开发实践(八)---多线程ActiveX控件和自动调整ActiveX控件大小(下)

声明:本文代码基于CodeProject的文章<A Complete ActiveX Web Control Tutorial>修改而来,因此同样遵循Code Project Open License (CPOL). 在上一篇文章<COM组件开发实践(七)---多线程ActiveX控件和自动调整ActiveX控件大小(上)>中介绍了ActiveX控件中使用多线程的基本需求,并提出了一个简单的线程模型,但却出现了意想不到的问题,本文将尝试给出问题的一个可行的解法,并同时解决上文中提出

使用VS2010 C#开发ActiveX控件(上)_C#教程

 要开发Web版的读卡程序,大体思路如下: 1.       使用C#对原始的Dll进行封装,这里要封装两部分内容,一部分是串口通信的功能,一部分是对卡读写的功能. 2.       开发ActiveX控件调用封装后的Dll,使用串口通信来对卡进行读写. 3.       打包并发布ActiveX控件. 4.  使用ActiveX控件. 思路1中封装代码有2个类SerialInterfaceHelper,串口通信的帮助类,MifareOneHelper,M1卡的读写帮助类,我们放在了项目Card

使用VS2010 C#开发ActiveX控件

最近做读卡器的B/S应用程序开发,由于读卡器厂商提供的手册都是C/S版本的,而且只有一个原始的Dll包,并没有web版的,那么就只好自己动手,丰衣足食了 要开发Web版的读卡程序,大体思路如下: 1. 使用C#对原始的Dll进行封装,这里要封装两部分内容,一部分是串口通信的功能,一部分是对卡读写的功能. 2. 开发ActiveX控件调用封装后的Dll,使用串口通信来对卡进行读写. 3. 打包并发布ActiveX控件. 4. 使用ActiveX控件. 思路1中封装代码有2个类SerialInter