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

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

VC中通用对话框的子类化

发布: 2007-7-04 20:47 | 作者: admin | 来源:  网友评论 | 查看: 108次 | 进入软件测试论坛讨论

领测软件测试网 廖 铮

  MFC中包含了几个Windows通用对话框设计的封装类。比如,在CFileDialog里可以利用常用的CDialog成员函数DoModal()函数操纵通用文件对话框。

  为了从CFileDialog这样的公共对话框类派生出程序员自己的子类,传统方法需要创建一个“子对话框模板”,然后将模板关联于派生出来的CFileDialog类。这个模板只能包括可增加到对话框中的控件。

  但是,由于系统将这个派生的对话框模板的消息优先权隐含置于正常对话框顺序之前,MFC消息路径就不会到达这个新的控件类,因此在自己的派生CFileDialog 类里没有办法通过映射消息的方式编写消息处理代码。

  在Visual C++ 6.0里这个问题得到了部分解决: MFC 消息路由可以起作用,但程序员还是不能使用 ClassWizard来增加消息处理器和成员变量。而且,如果试图用 ClassWizard 从CFileDialog 派生一个类,它不会使能“Dialog ID”框,没有办法为自己的对话框分配ID号,ClassWizard也不会为对话框增加对应的关联代码。

  可以使用下列方法解决这个问题:

  使用ClassWizard从CDialog (而不是CFileDialog) 派生新类,然后修改基类和所生成新类的构造函数。结果,新类将会从CFileDialog类派生, ClassWizard就能够处理新增加的控件了。

  步骤如下

  1. 创建自己的模板。

  2. 将该模板关联于一个由CDialog派生出的类,使用ClassWizard (比如命名为CNewFileDialog)即可。

  3. 在头文件里,CNewFileDialog.h的定义处,插入如下代码:

  DECLARE—DYNAMIC(CNewFileDialog)

  并修改构造函数的声明:

  CNewFileDialog(BOOL bOpenFileDialog, LPCTSTR lpszDefExt = NULL,

  LPCTSTR lpszFileName = NULL,

  DWORD dwFlags = OFN—HIDEREADONLY | OFN—OVERWRITEPROMPT,

  LPCTSTR lpszFilter = NULL, CWnd pParentWnd = NULL);

  4. 在新派生类的实现文件(.cpp)里,插入如下代码:

   IMPLEMENT—DYNAMIC(CNewFileDialog, CFileDialog)

然后修改构造函数定义:

  CnewFileDialog::CNewFileDialog(BOOL bOpenFileDialog,

LPCTSTR lpszDefExt, LPCTSTR lpszFileName,

DWORD dwFlags, LPCTSTR lpszFilter, CWnd pParentWnd) :

CFileDialog(bOpenFileDialog, lpszDefExt, lpszFileName,

dwFlags, lpszFilter, pParentWnd)

  {

  m_ofn.Flags |= OFN—ENABLETEMPLATE | OFN—PATHMUSTEXIST |

OFN—FILEMUSTEXIST | OFN—SHAREAWARE | OFN—ALLOWMULTISELECT;

  m—ofn.lpTemplateName = MAKEINTRESOURCE(IDD—ABOUTBOX1);}

  最后,在所有头文件和实现文件中用CFileDialog取代CDialog。 

延伸阅读

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


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

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