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)解决了此问题,代码如下:
- 在ActiveX对话框类的源文件中定义全局变量;
static HHOOK hHook=NULL;
- 定义回调函数函数;
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