ActiveX控件内部控件在容器中无法响应若干问题解决方法

本文介绍了ActiveX控件在不同测试容器中遇到的响应问题及其解决方法,包括控件在VS自带TstCon中不响应PreTranslateMessage、按钮在基于对话框和单文档容器中无法响应的问题。通过钩子、重写PreTranslateMessage函数和条件判断等方式,成功解决了控件的响应问题。
摘要由CSDN通过智能技术生成

ActiveX控件作为一种跨平台的控件,并可设计带界面的ActiveX,使用起来特别方便。然而有时会遇到ActiveX控件中控件在容器中无法响应的问题,参考相关博客,结合自己试探,给出了一些解决办法。

创建带界面的ActiveX可参考:
https://blog.csdn.net/wangzhiyang925/article/details/38715605?tdsourcetag=s_pcqq_aiomsg

一、ActiveX中控件在VS自带测试容器TstCon中不响应PreTranslateMessage的解决方法

在ActiveX控件中添加了picture control用来做图像显示,并重写了PreTranslateMessage希望通过鼠标控制图像平移、缩放等动作,然而发现在ActiveX中PreTranslateMessage无法响应。
查找资料,参考:https://blog.csdn.net/zhangzongnan/article/details/6863741
通过钩子(Hook)解决了此问题,代码如下:

  1. 在ActiveX对话框类的源文件中定义全局变量;
static HHOOK hHook=NULL;
  1. 定义回调函数函数;
LRESULT CALLBACK GetMessageProc(int nCode, WPARAM wParam, LPARAM lParam)
{
   
  AFX_MANAGE_STATE(AfxGetStaticModuleState( ));
  LPMSG lpMsg = (LPMSG) lParam;
  if( (nCode >= 0) && (PM_REMOVE == wParam) &&
  		AfxGetApp()->PreTranslateMessage(lpMsg))
  {
   
  	lpMsg->message = WM_NULL;
  	lpMsg->lParam = 0L;
  	lpMsg->wParam = 0
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值