文档章节

MessageBox、::MessageBox 、AfxMessageBox三者的区别

自由的角马
 自由的角马
发布于 2015/01/10 14:00
字数 450
阅读 19
收藏 0

原文:http://blog.chinaunix.net/uid-16149193-id-2752537.html


以前知道这几个函数有差别,但也没有去细究,最近隔了很久没写VC程序了,结果写到使用MESSAGEBOX时出错了,还为之费解,于是上网找了一下资料,清楚了这三个函数的区别,所以写此文章(参考了大量其他人的所写的资料)。使自己能长记性,同时也希望对一些不甚了解的人有所帮助。

 

三者的本质区别如下:

Windows API: MessageBox();

 

CWnd::MessageBox(); 

 

MFC: AfxMessageBox();

 

其中CWnd::MessageBox() 与 AfxMessageBox() 都是对 API 函数MessageBox()的封装。

 

关于是否需要句柄HWND的说明:

1)MessageBox是API,因此它需要HWND参数指定其所属窗体。

 

2)CWnd::MessageBox() 是CWnd的成员函数,它要求MessageBox只能在cwnd类及其子类中使用;它不要求HWND参数,因为CWnd已经指明了其所属窗口。 因此CWnd::MessageBox()和::MessageBox(HWND)作用等同。

 

3)AfxMessageBox()mfc中的全局函数,无句柄HWND参数。能用MessageBox()的地方都能用AfxMessageBox(),但AfxMessageBox不能设置消息框标题(它的默认标题就是应用程序的可执行文件名).

 

使用建议:

1)在非CWnd类中使用则是API MessageBox函数,但它使用起来非常不便,必须指定标题、句柄和样式等,否则选用CWnd::MessageBox()或AfxMessageBox,它们使用起来方便。


2)MessageBox是模态对话框,你不进行确认时程序不往下运行,它会阻塞你当前的线程为,除非你程序是多线程的程序,否则只有等待模态对话框被确认。

3)如果用MFC的话,请尽量使用afxmessagebox,因为这个全局的对话框最安全,也最方便。

本文转载自:http://blog.csdn.net/luoweifu/article/details/40076469

自由的角马
粉丝 1
博文 269
码字总数 0
作品 0
文山
私信 提问
AfxMessageBox()和MessageBox()的区别 & PCH预编译头文件(201...

---------------------------------------------------------------------------------------------- 问:AfxMessageBox()和MessageBox()的区别? 答:带Afx的是全局函数,可以在程序任何地方......

就是我啊
2012/07/02
914
0
信息提示框:MessageBox

一 函数原型及参数  function MessageBox(hWnd: HWND; Text, Caption: PChar; Type: Word): Integer;  1、参数列表 hWnd:对话框父窗口句柄,对话框显示在Delphi窗体内,可使用窗体的Handl...

野渡书生
2016/03/11
12
0
C++操作activemq在win7下报错,求助

用C++的方式操作activemq的时候,发送端是 TextMessage* message = session->createTextMessage();message->setStringProperty("msgID","1"); 接收端std::string consumerCount = textMessa......

ghostdom
2012/02/03
687
0
MessageBox的常见用法

一 函数原型及参数 function MessageBox(hWnd: HWND; Text, Caption: PChar; Type: Word): Integer; hWnd:对话框父窗口句柄,对话框显示在Delphi窗体内,可使用窗体的Handle属性,否则可用...

景光
2013/01/29
97
0
VC++6.0与VS2010的区别

区别1:字符串的表达 void CMy123Dlg::OnBnClickedButton1() { // MessageBox("你好");//以前VC6.0写法,现在用不了.老版本用的多字节字符集 // MessageBox(L"你好");//L 是 unicode字符集,可移......

霄霄月月
2012/05/08
437
0

没有更多内容

加载失败,请刷新页面

加载更多

一套基于SpringBoot+Vue+Shiro 前后端分离 开发的代码生成器

一、前言 最近花了一个月时间完成了一套基于Spring Boot+Vue+Shiro前后端分离的代码生成器,目前项目代码已基本完成 止步传统CRUD,进阶代码优化: 该项目可根据数据库字段动态生成 controll...

郑清
今天
7
0
javascript-十六进制随机颜色

<script> // 编写一个函数,获得一个十六进制的随机颜色的字符串(如#20CD4F) // function randomColor(){ // var r = random(0,255).toString(16); // var g = random(0,255).toString(16......

ACKo
今天
3
0
springBoot +mybatis 出现sql 语句在数据库可以查询到,但是赋值到实体类上就没有的情况?

1.不要老是反复查看自己是否写错了,为啥有的能出来有的出不来? 可以查看配置文件中是否配置全: 如果在application.yml 文件中是如下配置: mybatis: mapper-locations: classpath:mapp...

kuchawyz
今天
3
0
正则表达式

一、RegExp对象 进行验证和查找的API 1、创建对象: (1)用/创建(直接量):var reg=/正则/ig,表达式固定不变时使用 (2)用new创建:var reg=new RegExp(‘正则’,‘ig’),表达式需要...

wytao1995
今天
3
0
实战限流(guava的RateLimiter)

关于限流 常用的限流算法有漏桶算法和令牌桶算法,guava的RateLimiter使用的是令牌桶算法,也就是以固定的频率向桶中放入令牌,例如一秒钟10枚令牌,实际业务在每次响应请求之前都从桶中获取...

程序员欣宸
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部