当我们通过

CWnd::CreateControl()

动态创建

ActiveX

 

控件时,

Windows

消息并不会被发送给我

们的由

 

CWnd

派生得控件类。例如,即使我们为

WM_KILLFOCUS

 

消息创建了句柄,这个句柄

 

也是不会被调用的。(不信你试试

:))

引起这个问题的原因时,

CWnd::CreateControl()

并不会使我控件的

 

HWND

子类化。

知道了原因,要解决问题就不难了。我们只要在控件创建之后使它子类化就行了。通过一下步

骤可以实现:

1.

当然是添加控件啦,先生成控件的

C++

包容类。

2.

再要创建控件的类中声明成员变量,此成员变量是包容类的指针对象。

3.

在包容类的头文件中添加:

//{{AFX_MSG(CMyClass)

//}}AFX_MSG

DECLARE_MESSAGE_MAP()

CMyClass

是实际的类名。

4.

在包容类的

CPP

文件的

#include

段下面添加:

BEGIN_MESSAGE_MAP(CMyClass,

CWnd)

//{{AFX_MSG_MAP(CMyClass)

//}}AFX_MSG_MAP

END_MESSAGE_MAP()

5.

 

删除工程目录下的

.clw

 

文件,在工程中打开

ClassWizard

,先选

yes

,在选

Add

All

。

6.

现在你就可以使用

ClassWizard

为控件包容类添加消息映射和处理函数了。

完成这些修改后,你必须创建控件并且使它子类化,下面是个例子:

void

CSDIApp2View::OnInitialUpdate()

{

CView::OnInitialUpdate();

m_pFlexGrid

=

new

CMSFlexGrid;

CRect

rect;

GetClientRect(&rect);

m_pFlexGrid->Create(NULL,

WS_CHILD

|

WS_VISIBLE,

rect,

this,

IDC_FLEXGRID);

HWND

hWnd

=

m_pFlexGrid->Detach();

m_pFlexGrid->SubclassWindow(hWnd);

}

让动态创建的ActiveX控件响应Windows消息的更多相关文章

  1. WPF 中动态创建和删除控件

    原文:WPF 中动态创建和删除控件 动态创建控件 1.容器控件.RegisterName("Name",要注册的控件)   //注册控件 2.容器控件.FindName(" ...

  2. 【VS开发】动态添加的ActiveX控件如何响应事件

    http://blog.csdn.net/xiaoqiqixiao/article/details/574542 今天在csdn上看到一朋友问如何响应动态添加的控件的事件,搜索资料,发现对于一般的应用 ...

  3. WPF 中动态创建、删除控件,注册控件名字,根据名字查找控件

    动态创建控件 1.容器控件.RegisterName("Name",要注册的控件)   //注册控件 2.容器控件.FindName("Name") as  控 ...

  4. js动态加载activeX控件在IE11与低版本IE中的差异

    由于IE11更加遵循W3C规范,所以IE11与低版本IE在加载activeX时有差别. 1.IE11中动态加载activeX的顺序 var objectTag = document.createEle ...

  5. duilib中各控件响应的消息类型

    消息 说明 Sender click 鼠标点击 CButtonUI dropdown 下拉显示 CComboUI headerclick 点击列标题 CListHeaderItemUI itemact ...

  6. 【VS开发】动态创建ActiveX控件

    bool CCollectDataDlgDlg::CreateMyCtrl(LPRECT lpRect, UINT nID, CWnd *pParent) {  CLSID clsid;  wstri ...

  7. ActiveX控件(MFC篇)

    目录 第1章 VC++6.0创建控件    1 1.1 目标    1 1.1.1 方法    1 1.1.2 属性    1 1.1.3 事件    1 1.2 创建项目    2 1.3 项目结构 ...

  8. Win32编程点滴3 - 简单ActiveX控件的使用

    虽然这里一片的.net气氛,到处充斥着像MVC.WPF.WorkFlow.LINQ等各种niubility的术语.但我们使用的Windows还是由COM技术主宰着:我们在选择日常使用的软件时,也会避免 ...

  9. C#调用ActiveX控件

    背景:最近项目中需要用到ActiveX控件,项目是在.Net平台下开发的.因此就直接在项目中添加了对ActiveX控件的引用,添加引用成功.在代码中实例化类的实例也没有问题,但在调用其方法或属性时总是 ...

随机推荐

  1. 用Swift完成不同View Controller之间的切换

    之前用objective-c开发时,页面之间的切换很容易.其实用swift没有很大的变化,如果你是用storyboard完成的界面,基本上是同样的方式,只不过在代码部分写成swift风格的就行了. 今 ...

  2. android JB2连拍降速原理介绍

    1.HAL层 (1)alps\mediatek\platform\mt6589\hardware\camera\core\camshot\MultiShot\MultiShot.cpp sleep实现 ...

  3. 04-UIKit(UINavigationController、NSAttributeString、UIImageView)

    目录: 一.UINavigationController导航视图控制器 二.NSAttributeString属性字符串 三.UIImageView图像处理 回到顶部 一.UINavigationCo ...

  4. Mac编程的官方文档(类似MSDN)

    https://developer.apple.com/library/mac/documentation/FileManagement/Conceptual/FileSystemProgrammin ...

  5. 关于js基础easy忘记的那些事儿

    1.Number() 通过这个函数转化后的值仅仅有两个:数值和NaN,通过parseInt也能转化为数值.可是像"134df"转化后的值为134,而Number("134 ...

  6. SQL Server 存储过程、触发器、游标

    存储过程 1.存储过程是事先编好的.存储在数据库中的程序,这些程序用来完成对数据库的指定操作. 2.系统存储过程: SQL Server本身提供了一些存储过程,用于管理有关数据库和用户的信息. 用户存 ...

  7. EF的两种延迟加载

    EF的两种延迟加载 EF的延迟加载一: 在一次查询以后得到temp,然后在temp上直接进行查询得到temp2,我们调用temp2的时候,是直接为temp生成sql脚本的,没有生成temp的脚本,也就 ...

  8. wcf 出现 IsContentTypeSupported 错误

    查看添加的服务地址是不是https开头的,而 *.config 文件里面自动添加的链接变成了http,当前的bindbing类型为basicHttpBinding, 解决方法:在config文件里面手 ...

  9. 深入浅出 消息队列 ActiveMQ(转)

    一. 概述与介绍 ActiveMQ 是Apache出品,最流行的.功能强大的即时通讯和集成模式的开源服务器.ActiveMQ 是一个完全支持JMS1.1和J2EE 1.4规范的 JMS Provide ...

  10. python之数据库操作(sqlite)

    python之数据库操作(sqlite) 不像常见的客户端/服务器结构范例,SQLite引擎不是个程序与之通信的独立进程,而是连接到程序中成为它的一个主要部分.所以主要的通信协议是在编程语言内的直接A ...