在VC中,让动态创建的ActiveX控件响应Windows消息。

原创 2001年10月19日 11:57:00

当我们通过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);
}

MFC动态创建控件及添加消息响应

转载地址:http://blog.csdn.net/luy3728000/article/details/8193918 动态控件是指在需要时由Create()创建的控件,这与预先在对话框中放置...
  • shuaiby
  • shuaiby
  • 2013年01月24日 14:12
  • 31264

开发基于MFC的ActiveX控件的时候的一些消息处理

MFC有PreTranslageMessage() 可以处理一些基于MFC的消息处理。 可是有时候如果你开发一个基于MFC的ActiveX作为容器,内部实现是Win32 或者其他框架会发现,好多消息...
  • sesiria
  • sesiria
  • 2016年08月08日 17:26
  • 1302

创建添加对话框的Activex

1.ActiveX的基本概念          ActiveX控件可以看作是一个极小的服务器应用程序,它不能独立运行,必须嵌入到某个容器程序中,与该容器一起运行。这个容器包括WEB网页,应用程序窗体...
  • wangzhiyang925
  • wangzhiyang925
  • 2014年08月20日 23:10
  • 2174

对话框容器环境响应Active控件事件 动态创建ActiveX

1 在对话框面板上静态添加ActiveX控件 在对话框面板上 右键->Insert ActiveX control 在控件的属性中 添加对控件的事件响应(要求编写ActiveX控件的时候已经添加了...
  • mfmfmmf1
  • mfmfmmf1
  • 2015年07月06日 19:52
  • 468

在视图窗口中动态创建ActiveX控件FlexGrid

  • 2013年02月05日 15:48
  • 31KB
  • 下载

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

bool CCollectDataDlgDlg::CreateMyCtrl(LPRECT lpRect, UINT nID, CWnd *pParent) {  CLSID clsid;  ws...
  • LG1259156776
  • LG1259156776
  • 2016年07月23日 12:52
  • 669

Access vba动态创建ActiveX控件

http://blog.csdn.net/xcntime/article/details/21706779 在Access  VBA编写的程序中,如果可以在运行时动态创建控件无疑是非常有用的,因为...
  • xcntime
  • xcntime
  • 2014年12月21日 14:07
  • 1045

MFC动态创建控件及添加消息响应

动态控件是指在需要时由Create()创建的控件,这与预先在对话框中放置的控件是不同的。    一、创建动态控件:   为了对照,我们先来看一下静态控件的创建。   放置静态控件时必...
  • cg991546596
  • cg991546596
  • 2013年09月07日 14:34
  • 931

MFC动态创建控件及添加消息响应

转自:http://blog.csdn.net/luy3728000/article/details/8193918   动态控件是指在需要时由Create()创建的控件,这与预先在对话框中放置的控件...
  • u011320052
  • u011320052
  • 2016年03月04日 19:31
  • 151

MFC动态创建控件及添加消息响应

动态控件是指在需要时由Create()创建的控件,这与预先在对话框中放置的控件是不同的。    一、创建动态控件:   为了对照,我们先来看一下静态控件的创建。   放置静态控件时必...
  • luy3728000
  • luy3728000
  • 2012年11月17日 15:20
  • 2082
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:在VC中,让动态创建的ActiveX控件响应Windows消息。
举报原因:
原因补充:

(最多只允许输入30个字)