在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;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值