Chinaunix首页 | 论坛 | 博客
  • 博客访问: 458027
  • 博文数量: 62
  • 博客积分: 1312
  • 博客等级: 中尉
  • 技术积分: 1555
  • 用 户 组: 普通用户
  • 注册时间: 2012-02-24 18:10
文章分类

全部博文(62)

文章存档

2014年(1)

2013年(5)

2012年(56)

分类: C/C++

2012-03-24 11:41:16

程序里面写的是MessageBox(str);但为什么编译时提示出错时MessageBoxA呢?

原因是MessageBox实际上有2个原形:MessageBoxA和MessageBoxW

#ifdef UNICODE
#define MessageBox  MessageBoxW
#else
#define MessageBox  MessageBoxA
#endif // !UNICODE

 

如何解决这个编译错误?

出错的原因是:MessageBox(CString str)一个参数的函数是MFC下调用的,如果你程序没有用到MFC,例如你只是一个Windows Console工程,因为你没有窗口,所以MessageBox获取不到窗口句柄,那么这样用肯定错误。只有用4个参数的MessageBox,指定窗口句柄,可以用NULL,那么就是属于桌面的了。

 

AfxMessageBox()一般应用于窗体之中,没有窗体,或者是全局函数,不能使用该函数;    
MessageBox()可以应用于没有窗体和有窗体的两种情况,在有窗体的情况下使用方法完全与AfxMessageBox一样。但是AfxMessageBox的弹出的标题默认是当前工程的名字,不想MessageBox可以指定弹出框的标题。

 

另外,API形式的MessageBox是4个参数,MFC的MessaegBox是3个参数。如果编译时提示'MessageBoxA' : function does not take 4 parameters,那么是因为你调用的的MFC的,但你又输入了4个参数。

解决办法,使用域操作符::MessageBox(),则使用API的4个参数形式。或者只传入3个参数,使用MFC的MessageBox()。

 

转自:http://blog.csdn.net/yitaohust/article/details/3051931 

阅读(2560) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~