转自:http://blog.sina.com.cn/s/blog_5059be880100whu3.html
C语言的MessageBox
MessageBoxA(
MessageBoxW(
#ifdef UNICODE
#define MessageBox
#else
#define MessageBox
#endif
例:MessageBox(NULL,TEXT("世界你好!"),TEXT("问好"),MB_YESNO|MB_ICONEXCLAMATION);
其中按钮宏有:
#define MB_OK
#define MB_OKCANCEL
#define MB_ABORTRETRYIGNORE
#define MB_YESNOCANCEL
#define MB_YESNO
#define MB_RETRYCANCEL
图标宏有:
#define MB_ICONHAND
#define MB_ICONQUESTION
#define MB_ICONEXCLAMATION
#define MB_ICONASTERISK
MessageBox的返回值宏有:
#define IDOK
#define IDCANCEL
#define IDABORT
#define IDRETRY
#define IDIGNORE
#define IDYES
#define IDNO
转自:http://hi.baidu.com/necrohan/item/8c60a2f7a1f1e64a922af253
关于MessageBox
程序里面写的是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()一般应用于窗体之中, 没有窗体,或者是全局函数,不能使用该函数;不是从CWnd类继承的类中使用最好使用AfxMessageBox。
MessageBox()可以应用于没有窗体和有窗体的两种情况
(1)在有窗体的情况下使用方法完全与AfxMessageBox一样,只要一个参数。但是AfxMessageBox的弹出的标题默认是当前工程的名字,不像MessageBox可以指定弹出框的标题。
(2)在没有窗体或者全局函数中,必须传入一个窗体句柄才能执行,如果没有,用NULL代替也可,但是此时该消息框属于桌面,可能达不到我们所需要的目的,所以一般要传入一个窗口句柄。
第二种情况下须给出函数的四个参数
int MessageBox(
HWND hWnd,
LPCTSTR lpText,
LPCTSTR lpCaption,
UINT uType
);
例:::MessageBox(NULL, "asdfasdf", NULL, MB_OK);
API形式的MessageBox是4个参数, MFC的MessaegBox是3个参数。
使用域操作符::MessageBox(),则使用API的4个参数形式。
mfc工程实际应用中:
AfxMessageBox("hehehe");//原来可以用AfxMessageBox啊啊啊!!!
MessageBox(TEXT("世界你好!"),TEXT("问好"),MB_YESNO|MB_ICONEXCLAMATION);
MessageBox(TEXT("世界你好!"),NULL,NULL);