用户登录  |  用户注册
首 页商业源码原创产品编程论坛
当前位置:PB创新网文章中心编程技巧C++ Builder

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

减小字体 增大字体 作者:佚名  来源:本站整理  发布时间:2009-03-16 20:41:24

许多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;
   }

Tags:

作者:佚名

文章评论评论内容只代表网友观点,与本站立场无关!

   评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
PB创新网ourmis.com】Copyright © 2000-2009 . All Rights Reserved .
页面执行时间:16,250.00000 毫秒
Email:ourmis@126.com QQ:2322888 蜀ICP备05006790号