IE中ocx控件的无模式对话框不接收方向键等键盘消息的问题的解决办法

在ocx控件中如果含有无模式对话框,那么当ocx在ie中显示时,往往接收不到

诸如tab,方向键和退格键。所有这些消息都被IE容器给截取了,对于这个问题,ms给出了解决方法:

首先:

  int CMyActiveXCtrl::OnCreate(LPCREATESTRUCT lpCreateStruct)
   {
      if (COleControl::OnCreate(lpCreateStruct) == -1)
         return -1;
      OnActivateInPlace (TRUE, NULL); // == UI-Activate the control
      return 0;
   }
 激活控件,以便能接收键盘消息。

其次 跟踪转发消息

  // trap keys and forward on to the control
   BOOL CMyActiveXCtrl::PreTranslateMessage(MSG* pMsg)
   {
      switch (pMsg->message)
      {
         case WM_KEYDOWN:
         case WM_KEYUP:
            switch (pMsg->wParam)
            {
               case VK_UP:
               case VK_DOWN:
               case VK_LEFT:
               case VK_RIGHT:
               case VK_HOME:
               case VK_END:

               case VK_TAB:
                 ::SendMessage (pMsg->hWnd, pMsg->message, pMsg->wParam, pMsg->lParam);
                  // Windowless controls won't be able to call SendMessage.
                  // Instead, just respond to the message here.
                  return TRUE;
            }
            break;
      }
      return COleControl::PreTranslateMessage(pMsg);
   }

注意用send而不要用post

其他参考: http://support.microsoft.com/kb/q168777/

http://www.microsoft.com/msj/0795/dilascia/dilascia.aspx

时间: 2024-09-17 23:53:18

IE中ocx控件的无模式对话框不接收方向键等键盘消息的问题的解决办法的相关文章

在64位系统中ocx控件调用问题

问题描述 在64位系统中ocx控件调用问题 在64位系统中已注册32位程序的ocx控件,为什么32位程序无法显示ocx控件? 解决方案 和64位没有什么关系,你的程序必须是32bit的才可以调用32bit的控件. 如果你用的是C#,你需要强制将程序集限定为32bit 参考:http://blog.csdn.net/blueboy2000/article/details/4242369 解决方案二: jsp调用ocx控件 解决方案三: 你是不是用的的32bit版本的regsvr32注册. 然后就是

mfc-怎么让MFC中Webbrowser控件的大小随对话框变化而变化?

问题描述 怎么让MFC中Webbrowser控件的大小随对话框变化而变化? 我想在你对话框中添加Webbrowser控件,怎么能它的大小随对话框大小变化呢? 解决方案 在OnSize消息处理中用MoveWindow调整 解决方案二: afx_msg void OnSize(UINT nType int cx int cy); 解决方案三: 对话框控件大小随窗口的大小变化而变化MFC对话框中的控件随着对话框大小变化而变化MFC控件随窗口大小变化

duilib mfc中ocx控件-duilib如何调用mfc控件ocx中的方法,急!!!

问题描述 duilib如何调用mfc控件ocx中的方法,急!!! duilib如何调用mfc控件ocx中的方法啊?求大神赐教啊!!!谢谢了!!! 解决方案 这个我已经有思路了,但还是不知道怎么在duilib中加载,如何获取组件的iid?

C#中webbrowser控件自动弹出对话框的处理

问题描述 用C#编写的一个程序,form中添加了一个webbrowser控件,webbrowser加载一个网页的时候,该网页会不定期的弹出一个对话框"来自网页的消息",有确定和取消按钮.这个对话框的目的是判断用户是否在关注本页面,如果15秒内不点击确定,则网页加载失败.我要达到的目的是,如何自动捕获该弹出对话框然后点击确定继续.我的想法是用一个timer计时器每5秒自动搜索然后点击,在网上搜了一些方法,都不能实现自动点击,求教高手.希望能给出关键部分代码,谢谢了!~ 解决方案 解决方案

Login控件在UpdatePanel内当验证用户信息成功后出现页面刷新的解决办法

解决|控件|刷新|页面     随着AJAX.NET BETA 2在今天发布,让我们看到了AJAX与ASP.NET2.0紧密结合的快捷与高效,我们甚至可以无需写一句JS代码即可让ASP.NET的网页得到以往要花上数小时编写的JS代码所实现的无刷新效果.而将这一切结合到ASP.NET也是那么的容易,只需将控件简单地移到UPDATEPANEL控件之内再设置几个参数即可实现.但是,在体验AJAX.NET带给开发者便利的同时,也会发现AJAX.NET有时也并不是十全十美.就像笔者近日遇到ASP.NET2

c++问题-vc++无模式对话框显示问题

问题描述 vc++无模式对话框显示问题 对话框架构下,在CWinApp派生类的InitInstance函数中,启动对话框之前,构造了另一个只含有进度条和文本框的对话框,用来显示加载数据的进度.此对话框为无模式对话框,初始显示正常,但一旦最小化,再还原后,进度条和文本框均无法显示,背景也变为白色.对话框架构下,再使用一个无模式对话框确实比较另类,所以遍查不到解决方法,恳请哪位高手帮忙! 解决方案 http://blog.163.com/guo_ahui/blog/static/4465088320

VISUAL C++中的OCX控件的使用方法

新一代32位操作系统WINDOWS 95舍弃了VBX控件,取而代之的是OCX控件.OCX控件具有功能强大,界面美观的特点,然而许多参考书中并没有详细阐述OCX控件的使用方法,使得一些如数据库表格,远程数据控件等接口复杂的OCX难于使用.这里将详细阐述OCX的使用方法. 首先提醒读者要注意的是:使用OCX构件之前,必须登记注册,否则不能使用.安装VISUAL C++时,系统自动注册登记软件附带的OCX控件.如果不幸没有登记,那么请使用REGSVR32应用程序来注册.以VISUAL C++ 5.0为

关于Winform中调用OCX控件中事件问题

问题描述 目前在Winform中使用第三方C++编写的OCX控件(ActiveX),1.已经注册组件(用命令行:Regsvr32/s[盘符:][路径]组件.ocx)2.添加引用,并能正常拖动到Form窗体上.3.using命名空间现在想通过OCX控件中的事件(如:PSMessageEvent)来得到相应的返回值,该如何做? 解决方案 解决方案二:什么叫返回值,这取决于人家的事件是否允许带返回参数解决方案三:下面是控件提供的SDK文档中的事件原型:voidPSMessage(doubledLati

在HTM中引用VB6的OCX控件

控件 VB6可以很方便的编写OCX控件及DLL组件,要在网站中使用DLL组件的使用很简单,直接在ASP中使用Server.CreateObject("工程名.组件名")可以在服务器端调用该组件.而OCX使用则因为需要下载到客户端而变得复杂些,以下是我的一些经验: OCX打包成internet包:启运打包程序:菜单"外接程序"->"外接程序管理器"->启用"打包和展开向导"开始打包:菜单"外接程序"