'MessageBoxA' : function does not take 1 parameters

来源:互联网 发布:淘宝秒刷钻 编辑:程序博客网 时间:2024/05/24 06:17

程序里面写的是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()。

原创粉丝点击