• 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控件中出现的奇怪问题。估计是焦点问题。

activex控件中出现的奇怪问题。估计是焦点问题。

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

佚名通过本文主要向大家介绍了activex控件下载,activex控件,activex控件被阻止,activex控件官方下载,activex控件下载安装等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
问题: activex控件中出现的奇怪问题。估计是焦点问题。
描述:

用向导生成一个activex控件,在oncreate中生成了两个richedit。其中一个richedit使用了自己写的类并在里面重画形成一个按钮,当用户点击这个按钮的时候,弹出一个对话框。里面是一些图片,选择可以插入richedit中(就像qq的聊天表情),然后回车(就是发言),插入到另一个只读的richedit中。 在原先的程序中,这些都没有任何问题。但是现在我要封装到一个activex控件中就有了问题。当点击按钮弹出对话框后能把图片插入到对话框中,但是回车的时候没有响应任何消息。当我重新在点击一下那个只读的richedit的时候,在回来点击这个richedit的时候,回车就可以响应消息。 为什么,activex控件有什么特别的原因吗》???


解决方案1:

PRB: Modeless Dialog Box in a DLL Does Not Process TAB Key
适用于
This article was previously published under Q233263
SYMPTOMS
When a modeless dialog box is launched from a dynamic-link library (DLL), the TAB key and the arrow keys do not move the focus from control to control as you would expect.
CAUSE
For a modeless dialog box to process a TAB key, the message pump needs to call the IsDialogMessage API. However, if you are writing a DLL and do not have access to the .exe's source code, you cannot modify the message pump to do this.
RESOLUTION
To work around this problem, you can use a WH_GETMESSAGE hook to capture the keystroke messages and call the IsDialogMessage API. If IsDialogMessage returns TRUE, then do not pass the message on to the message pump. Set the hook when handling WM_INITDIALOG and unset it when handling the WM_DESTROY message.
STATUS
This behavior is by design.
MORE INFORMATION
The following code illustrates how to set and unset the hook as well as how to use IsDialogMessage() to process TAB key messages:
BOOL CALLBACK DllDlgProc( HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam )
{
   switch ( uMsg )
   {
     case WM_INITDIALOG:
         hHook = SetWindowsHookEx( WH_GETMESSAGE, GetMsgProc,
                                   NULL, GetCurrentThreadId() );
         return TRUE;
     case WM_COMMAND:
         if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL) 
         {
            DestroyWindow( hwndDlg );
            hwndDllDlg = NULL;
         }
         return TRUE;
     case WM_DESTROY:
         UnhookWindowsHookEx( hHook );
         return FALSE;
   }
   return FALSE;
}
The hook procedure, GetMsgProc, should resemble the following:
LRESULT FAR PASCAL GetMsgProc(int nCode, WPARAM wParam, LPARAM lParam)
{
   LPMSG lpMsg = (LPMSG) lParam;
   if ( nCode >= 0 && PM_REMOVE == wParam )
   {
      // Don't translate non-input events.
      if ( (lpMsg->message >= WM_KEYFIRST && lpMsg->message <= WM_KEYLAST) )
      {
         if ( IsDialogMessage(hwndDllDlg, lpMsg) )
         {
            // The value returned from this hookproc is ignored, 
            // and it cannot be used to tell Windows the message has been handled.
            // To avoid further processing, convert the message to WM_NULL 
            // before returning.
            lpMsg->message = WM_NULL;
            lpMsg->lParam  = 0;
            lpMsg->wParam  = 0;
         }
      }
   }
   return CallNextHookEx(hHook, nCode, wParam, lParam);
}

解决方案2:

activex控件没有自己的消息循环。容器的消息循环通常只在控件是本地激活的时候把键盘输入传递到控件。
一个替代的解决方案是在对话框创建的时候安装一个本进程内的键盘钩子。


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

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

  • 讨论一下activex方面的经典书目!
  • 有没有dataedit控件啊急啊
  • 为什么VC做的控件在VB下面会有问题啊?请高手指点,高分求教啊
  • 紧急求助:关于ActiveX控件的使用问题!!
  • ActiveX控件的属性页
  • 在ActiveX控件中使用多线程后Fire事件的问题
  • 可以在ActiveX控件下的Dialog画曲线图吗
  • activex添加的属性在ie中为何传递不成功
  • 怎么才能获得微软Activex控件的帮助信息呢
  • 如何在单文档中使用ActiveX控件那?

相关文章

  • 2017-06-04 超级难题!C++,如何设置activex的ocxstate
  • 2017-06-05 如何使本方鼠标失控?
  • 2017-06-05 图像实时显示问题求救
  • 2017-06-04 MFCCEditSetCueBanner不生效?
  • 2017-06-04 请教一下,我编译IDL的时候出错了。。
  • 2017-06-04 WTL视图内按钮响应基本问题大家看下
  • 2017-06-04 如何在ie的工具栏中实现下拉式菜单功能?
  • 2017-06-04 ATL写的复合控件,在自己机器上注册没问题!但是拿到其他机器上注册出现错误:“应用程序配置不正确,重新安装可能修复此问题!”
  • 2017-06-04 XP系统中远程调用服务器上com组件,服务器和客户端如何配置??
  • 2017-06-05 进程的主窗口

文章分类

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

最近更新的内容

    • 使用IHTMLDocument2接口操作IE里的网页
    • Link同Embbed一个OLEItem有什么区别呀?大家能否说的详细一些。
    • 我用ATL做控件,后来想用多线程来做后台处理,请问如何加入多线程啊?
    • MFC串口+Access数据库
    • 这是为什么?
    • sdk控件问题
    • 怎样在dll中定义全局变量?
    • 请教如何得到一个进程中的各个线程的相关信息
    • 痛苦磨刀,搞了个COM东东出来,可exe程序在其它机器上注册的时候扯怪了,200分送上
    • 组件中使用静态成员及函数?

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

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