• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >vc/mfc > 在ActiveX项目中的重载WindowPro函数里面居然截取不到自定义的消息

在ActiveX项目中的重载WindowPro函数里面居然截取不到自定义的消息

作者:佚名 字体:[增加 减小] 来源:互联网 时间:2017-06-04

佚名通过本文主要向大家介绍了vba项目activex控件,activex控件下载,activex控件,activex控件被阻止,activex等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
问题: 在ActiveX项目中的重载WindowPro函数里面居然截取不到自定义的消息
描述:

开发平台:Visual Studio 6.0/Visual Studio 2008
项目类型:MFC ActiveX
部分说明:已添加代码将ActiveX标记为安全脚本
参考文章:
COM组件开发实践(八)---多线程ActiveX控件和自动调整ActiveX控件大小(下) 
http://www.cnblogs.com/phinecos/archive/2008/12/29/1364791.html
问题描述:
在重载的WindowProc里面拦截不到自定义的消息
在函数里面直接操作可以成功
代码如下:

#define WM_ONMSG WM_APP + 101
LRESULT MyActiveXCtrl::WindowProc(UINT message, WPARAM wParam, LPARAM lParam) 
{
switch(message)
{
case WM_ONMSG:
{
AfxMessageBox("拦截到了消息");//此处没有执行
return 0;
}
}
return COleControl::WindowProc(message, wParam, lParam);
}

猜想:
我在公司的电脑中使用同样的方法却能成功拦截,由于我调整了IE的安全设置,会不会对此
造成影响?


解决方案1:

MFC做的ActiveX应该是有窗口的,直接往这个窗口发送消息即可,不要向容器窗口发消息,容器窗口只把鼠标和键盘消息交给无窗口控件处理。

解决方案2:

ActiveX自己没有消息循坏,只能看容器什么时候把消息转给ActiveX。一般容器只把鼠标键盘消息转给当前激活的ActiveX。

解决方案3:

 The   Message   Map   
  To   enable   us   to   process   window   messages   in   a   CWindowImpl-derived   class,   ATL   inherits   from   the   abstract   base   class   CMessageMap.   CMessageMap   declares   one   pure   virtual   function,   ProcessWindowMessage.   The   entire   class   is   shown   here:     
    
  class   ATL_NO_VTABLE   CMessageMap   
  {   
  public:   
  virtual   BOOL   ProcessWindowMessage(HWND   hWnd,   UINT   uMsg,   
          WPARAM   wParam,   LPARAM   lParam,   
          LRESULT&   lResult,   DWORD   dwMsgMapID)   =   0;   
  };   
    
      
    
    
  Your   CWindowImpl-derived   class   must   implement   the   ProcessWindowMessage   function,   which   is   called   from   the   WindowProc   function   in   the   CWindowImpl   base   class   CWindowImplBaseT.   If   ProcessWindowMessage   returns   TRUE,   the   message   has   been   handled   by   your   derived   class   and   WindowProc   shouldn't   continue   with   default   message   processing.   A   FALSE   return   value   allows   default   processing.   
    
  BEGIN_MSG_MAP(CMainFrame)   
          MESSAGE_HANDLER(WM_DESTROY,   OnDestroy)   
  END_MSG_MAP()   
    
  Message   handlers   are   processed   in   order   from   top   to   bottom   until   something   handles   the   message   or   processing   falls   through,   which   results   in   default   processing.   The   bHandled   parameter   is   set   to   TRUE   by   default   before   the   handler   function   is   called.   You   can   manually   set   it   to   FALSE   (as   OnDestroy   does)   to   allow   default   processing   after   the   handler   function   returns   and   ProcessWindowMessage   exits.   
    
  ATL   has   a   large   selection   of   message-handler   macros   to   choose   from.   The   basic   types   are   MESSAGE_HANDLER,   NOTIFY_HANDLER,   and   COMMAND_HANDLER   for   normal   window   messages,   WM_NOTIFY   messages,   and   WM_COMMAND   messages.   Ranges   of   messages   are   handled   using   the   corresponding   macros   MESSAGE_RANGE_HANDLER,   NOTIFY_RANGE_HANDLER,   and   COMMAND_RANGE_HANDLER.   The   easiest   way   to   add   handlers   to   a   message   map   is   to   right-click   on   the   class   in   ClassView   and   choose   Add   Windows   Message   Handler  &nb

分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • vsnetatl项目不能显示添加activeX控件向导对话框
  • Activex控件在实际项目中用的多吗?什么情况需要使用呢?
  • 难道没人解决这个问题吗??ActiveX项目,修改后再次编译打不开ocx文件
  • ActiveX控件向VBA脚本发送的事件消息丢失了
  • 在ActiveX项目中的重载WindowPro函数里面居然截取不到自定义的消息
  • 求:简单ActiveX控件项目框架代码

相关文章

  • 2017-06-04 我用VC编一个ActiveX控件,为何KillTimer0函数在析构时出错?
  • 2017-06-05 MFC串口问题
  • 2017-06-04 关于COM+的一个问题,请有实战经验的仁兄赐教
  • 2017-06-04 组件选用的问题?
  • 2017-06-04 对于分布式COM对于简单参数,是传值好还是传参好?
  • 2017-06-05 为什么MFC的com组件函数要调用AFX_MANAGE_STATEAfxGetAppModuleState?
  • 2017-06-04 ■■报酬300元,请用VC或C,做一个ocx,让VB传入数据流,你让PDF显示出来
  • 2017-06-05 关于DEF文件的编写?急!!
  • 2017-06-04 求助:DCOM调用安全问题,异机调用返回E_ACCESSDENIED
  • 2017-06-04 在COM中,一个属性或方法如何返回null给JavaScript?

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • DLL中静态变量的调用问题
    • 请问客户程序如何将多个ActiveX的属性页合并到一起,并加上自己的属性页
    • IE编程的问题-如何正确的得到IHTMLDocument2接口?
    • 如何在VC中使用IHTMLDocument2::createElement函数创建一个IHTMLScriptElement?
    • 如何用vc实现后期绑定?
    • 怎样截获并处理IE的事件啊?
    • LNK2001错误
    • 在RICHEDIT中当单击一个字时,怎么选中那个字?
    • WTL关于在dialog中添加另外一个dialog的问题!
    • 散分,100不够再加!怎么写一个进程来显示一个操作还没有完成!!

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有