关于MFC消息响应的一点注意事项


       在vc6.0中我们新建一个多文档应用程序,如果我们为应用程序类添加ON_FILE_NEW消息响应,响应的消息响应函数为OnFileNew(),当我们单击“文件-新建”菜单时,就会调用该函数,不会调用基类的函数CWinApp::OnFileNew()。

      但是在VS2008中,我们进行同样的操作时,跟踪调试发现引用程序仍会调用CWinApp::OnFileNew(),而且不会调用子类的OnFileNew函数,这是什么原因呢?

     原因在与消息映射,我们对比一下VC60和VS2008中应用程序中的消息映射:

vc6.0中如下:

BEGIN_MESSAGE_MAP(CDipApp, CWinApp)
//{{AFX_MSG_MAP(CDipApp)
ON_COMMAND(ID_APP_ABOUT, OnAppAbout)
ON_COMMAND(ID_FILE_NEW, OnFileNew)
ON_COMMAND(ID_FILE_OPEN, OnFileOpen)
//}}AFX_MSG_MAP
// Standard file based document commands
ON_COMMAND(ID_FILE_NEW, CWinApp::OnFileNew)
ON_COMMAND(ID_FILE_OPEN, CWinApp::OnFileOpen)
// Standard print setup command
ON_COMMAND(ID_FILE_PRINT_SETUP, CWinApp::OnFilePrintSetup)
END_MESSAGE_MAP()

在VS2008中

BEGIN_MESSAGE_MAP(CImageProcessApp, CWinApp)
	ON_COMMAND(ID_APP_ABOUT, &CImageProcessApp::OnAppAbout)
	// 基于文件的标准文档命令
	ON_COMMAND(ID_FILE_NEW, &CWinApp::OnFileNew)
	ON_COMMAND(ID_FILE_OPEN, &CWinApp::OnFileOpen)
	// 标准打印设置命令
	ON_COMMAND(ID_FILE_PRINT_SETUP, &CWinApp::OnFilePrintSetup)
	ON_COMMAND(ID_FILE_OPEN, &CImageProcessApp::OnFileOpen)
	ON_COMMAND(ID_FILE_NEW, &CImageProcessApp::OnFileNew)	
END_MESSAGE_MAP()

通过对比我们发现是因为映射宏顺序不同的原因:在VS2008中,ON_COMMAND(ID_FILE_NEW, &CWinApp::OnFileNew)在前,所以执行的时候调用了CWinApp::OnFileNew,不在调用子类的OnFileNew,如果将ON_COMMAND(ID_FILE_NEW, &CImageProcessApp::OnFileNew)写在ON_COMMAND(ID_FILE_NEW, &CWinApp::OnFileNew)前,就会调用子类的OnFileNew,不会调用基类的OnFileNew。











  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MFC是Microsoft Foundation Class的简称,是微软公司提供的一种用于开发Windows桌面应用程序的框架。而double和float是C++语言中的浮点数类型。 在使用MFC框架进行开发时,需要注意以下关于double和float类型的事项: 1. 精度问题:double类型的精度比float类型更高,可以存储更大范围和更精确的浮点数。在涉及到对精度要求较高的计算和存储场景下,应优先选择double类型。 2. 内存占用:double类型占用的内存空间比float类型大,可以存储更长的小数位数,但也会占用更多的内存资源。在内存资源有限的情况下,应考虑使用float类型以节约内存。 3. 类型转换:在MFC框架开发中,可能会涉及到double和float之间的类型转换。由于double类型的范围更广,能够表示更大的数值范围,转换为float类型时可能存在精度损失的风险。在进行类型转换时需要注意判断是否会出现精度丢失,并谨慎处理。 4. 数据处理:在MFC框架中,通常使用CString类来处理字符串数据。当需要将double或float类型的数值转换为字符串时,可以借助CString的Format函数进行格式化输出,以确保输出的字符串符合预期的格式。 总之,在使用MFC框架进行开发时,需要根据实际需求选择合适的浮点数类型。在需要更高精度和更大范围的情况下,使用double类型;在内存有限或精度要求相对较低的情况下,使用float类型。同时,在进行类型转换和数据处理时,需要注意精度丢失和合理处理方式,确保数据的正确性和准确性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值