分类: 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()。