学逆向论坛

找回密码
立即注册

只需一步,快速开始

发新帖

2万

积分

41

好友

1157

主题
发表于 2021-1-9 17:08:00 | 查看: 1161| 回复: 0

区别一:

MessageBox()是标准的Win32 API函数,可以直接使用;AfxMessageBox是MFC库提供的全局函数,提供了多种重载形式,需要MFC框架支持(带有afx都是基于框架的函数)。

所以在Win32 SDK的情况下,只能使用MessageBox(此时MessageBox采用Win 32中的原型,hWnd设为NULL);而在MFC中,两个都能使用(此时MessageBox采用MFC中的原型,在CWnd类或者子类中使用),但是最好尽量使用AfxMessageBox,原因如下:

(1)在MFC中能用MessageBox()的地方都能用AfxMessageBox(),也就是说完全可以使用后者代替前者;

(2)AfxMessageBox这个全局函数最安全,也最简单方便,因为它是一个全局函数所以不需要对应的一个窗口类。


区别二:

MessageBox比较正式,常用在要提交的应用程序版本中,可以控制标题内容,而不必采用含义不明的可执行文件名为标题(从这点上说,MessageBox比 AfxMessageBox 灵活,它可以任意设置标题,而AfxMessageBox不能)。

AfxMessageBox不能控制消息框标题,常用于调试程序时的内部数据输出或警告(更多的时候是用于调试)。


区别三:

MessageBox在Win 32中的原型,如果第一个参数hWnd设置为NULL,则生成的非模态对话框;AfxMessageBox生成的是模态对话框,你不进行确认时程序不往下运行,它会阻塞你当前的线程,除非你程序是多线程的程序,否则只有等待模态对话框被确认。


附:VC中可调用的函数大致可分三类

1、类自己的函数,只对类自己的数据成员有作用。例如MFC中 MessageBox的原型,它是属于 CWnd 类的成员函数,只能在 CWnd 和CWnd的派生类的对象中调用;

2、AFX小组在设计Application Framworks 时设计的全局函数,多冠在Afx前缀,在包含了MFC库/框架的工程中可用。例如AfxMessageBox可在任何地方调用。

3、Windows API的全局函数。对所有Windows平台下的程序设计都可以调用,如Vb,Vc,Dephi等等。例如Win32中MessageBox的原型::MessageBox(),它是Win32 API的全局函数。

这里注意1和3中MessageBox的不同原型:就是1中MessageBox的原型要比3的少一个参数,即窗口句柄hWnd,这个句柄是通过 this 指针曲折转换得到的,不需要我们关心。

温馨提示:
1.如果您喜欢这篇帖子,请给作者点赞评分,点赞会增加帖子的热度,评分会给作者加学币。(评分不会扣掉您的积分,系统每天都会重置您的评分额度)。
2.回复帖子不仅是对作者的认可,还可以获得学币奖励,请尊重他人的劳动成果,拒绝做伸手党!
3.发广告、灌水回复等违规行为一经发现直接禁言,如果本帖内容涉嫌违规,请点击论坛底部的举报反馈按钮,也可以在【投诉建议】板块发帖举报。
论坛交流群:672619046

小黑屋|手机版|站务邮箱|学逆向论坛 ( 粤ICP备2021023307号 )|网站地图

GMT+8, 2024-4-23 18:52 , Processed in 0.093048 second(s), 35 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表