博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
让动态创建的ActiveX控件响应Windows消息
阅读量:5869 次
发布时间:2019-06-19

本文共 932 字,大约阅读时间需要 3 分钟。

当我们通过

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);

}

转载地址:http://qbxnx.baihongyu.com/

你可能感兴趣的文章
052(四十二)
查看>>
设计模式学习笔记--原型模式
查看>>
.Net 通过MySQLDriverCS操作MySQL
查看>>
JS Cookie
查看>>
ubuntu Unable to locate package sysv-rc-conf
查看>>
http讲解
查看>>
测试常用脚本
查看>>
笔记:认识.NET平台
查看>>
简单的jdk代理与cglib代理Demo
查看>>
数据挖掘概念与技术笔记
查看>>
获取时间和日期
查看>>
cocos2d中CCAnimation的使用(cocos2d 1.0以上版本)
查看>>
MySQL 5.6查看数据库的大小
查看>>
android addCategory()等说明
查看>>
django信号
查看>>
java基础之反射---重要
查看>>
tdd 和 make file,以及cygwin
查看>>
重装系统后,delphi7打开报错
查看>>
i++的原子性问题
查看>>
【吉光片羽】短信验证
查看>>