• 软件测试技术
  • 软件测试博客
  • 软件测试视频
  • 开源软件测试技术
  • 软件测试论坛
  • 软件测试沙龙
  • 软件测试资料下载
  • 软件测试杂志
  • 软件测试人才招聘
    暂时没有公告

字号: | 推荐给好友 上一篇 | 下一篇

让动态创建的ActiveX控件响应Windows消息

发布: 2007-7-14 21:11 | 作者: 佚名    | 来源: 网络转载     | 查看: 25次 | 进入软件测试论坛讨论

领测软件测试网 当我们通过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);

延伸阅读

文章来源于领测软件测试网 https://www.ltesting.net/


关于领测软件测试网 | 领测软件测试网合作伙伴 | 广告服务 | 投稿指南 | 联系我们 | 网站地图 | 友情链接
版权所有(C) 2003-2010 TestAge(领测软件测试网)|领测国际科技(北京)有限公司|软件测试工程师培训网 All Rights Reserved
北京市海淀区中关村南大街9号北京理工科技大厦1402室 京ICP备2023014753号-2
技术支持和业务联系:info@testage.com.cn 电话:010-51297073

软件测试 | 领测国际ISTQBISTQB官网TMMiTMMi认证国际软件测试工程师认证领测软件测试网