whypro 发表于 2010-5-25 18:50:35

Windows API一日一练 messagebox

本帖最后由 whypro 于 2010-5-25 18:53 编辑


四、messagebox
为了显示提示信息给用户,Windows是提供了一个非常方便的API函数MessageBox给用户使用,使用这个API函数可以显示简单的文字信息出来,提醒或提示用户进行下一步操作。
函数声明如下:
http://www.cppblog.com/Images/OutliningIndicators/None.gifWINUSERAPI
http://www.cppblog.com/Images/OutliningIndicators/None.gifint
http://www.cppblog.com/Images/OutliningIndicators/None.gifWINAPI
http://www.cppblog.com/Images/OutliningIndicators/None.gifMessageBoxA(
http://www.cppblog.com/Images/OutliningIndicators/None.gif    __in_opt HWND hWnd,
http://www.cppblog.com/Images/OutliningIndicators/None.gif    __in_opt LPCSTR lpText,
http://www.cppblog.com/Images/OutliningIndicators/None.gif    __in_opt LPCSTR lpCaption,
http://www.cppblog.com/Images/OutliningIndicators/None.gif    __in UINT uType);
http://www.cppblog.com/Images/OutliningIndicators/None.gifWINUSERAPI
http://www.cppblog.com/Images/OutliningIndicators/None.gifint
http://www.cppblog.com/Images/OutliningIndicators/None.gifWINAPI
http://www.cppblog.com/Images/OutliningIndicators/None.gifMessageBoxW(
http://www.cppblog.com/Images/OutliningIndicators/None.gif    __in_opt HWND hWnd,
http://www.cppblog.com/Images/OutliningIndicators/None.gif    __in_opt LPCWSTR lpText,
http://www.cppblog.com/Images/OutliningIndicators/None.gif    __in_opt LPCWSTR lpCaption,
http://www.cppblog.com/Images/OutliningIndicators/None.gif    __in UINT uType);
http://www.cppblog.com/Images/OutliningIndicators/None.gif#ifdef UNICODE
http://www.cppblog.com/Images/OutliningIndicators/None.gif#define MessageBox MessageBoxW
http://www.cppblog.com/Images/OutliningIndicators/None.gif#else
http://www.cppblog.com/Images/OutliningIndicators/None.gif#define MessageBox MessageBoxA
http://www.cppblog.com/Images/OutliningIndicators/None.gif#endif
// !UNICODE
http://www.cppblog.com/Images/OutliningIndicators/None.gif

从上面可以看出,Windows的API是两种声明,一种是使用到ANSI编码,一种是使用到UNICODE编码的API函数。通过宏定义把这两种API名称统一到MessageBox的声明。这是一种使用选择不同API的技术,在今后的编程里,大多数都需要使用UNICODE编码了,因为可以适应不同国家的语言显示,可以国际化编程,特别对于中文支持更加需要UNICODE编程。
下面来解释一下参数的定义:
hWnd是指向父窗口的句柄,如果没有父窗口,可以把这个参数设置为NULL。
lpText是需要显示的文字。显示字符串的起始地址。
lpCaption是在窗口上标题显示。
uType是窗口组合按钮和显示图标的类型。后面再详细说明。
返回值是一个整数,如果有取消按钮,并且按下ESC键就返回IDCANCEL。如果有其它按钮,并且按下,就返回相应的值。主要的值如下:
IDABORT 放弃按钮
IDCANCEL取消按钮
IDCONTINUE 继续按钮
IDIGNORE 忽略按钮
IDNO 否按钮
IDOK 确定按钮
IDRETRY 重试按钮
IDTRYAGAIN 重试按钮
IDYES 是按钮

演示例子如下:
http://www.cppblog.com/images/cppblog_com/superkiki/o_MessageBox1.jpg
上面显示的代码是:
http://www.cppblog.com/Images/OutliningIndicators/None.gif//MB_DEFBUTTON4
http://www.cppblog.com/Images/OutliningIndicators/None.gifint CMsgBox::Show_MB_DEFBUTTON4(void)
{//显示MB_DEFBUTTON4。
return ::MessageBox(NULL, _T("MB_YESNOCANCEL|MB_DEFBUTTON4|MB_HELP"),
       _T("第一个应用程序"), MB_YESNOCANCEL|MB_DEFBUTTON4|MB_HELP|MB_ICONQUESTION);
}



uType常用的选择值如下:
按钮类型:
MB_ABORTRETRYIGNORE
MB_CANCELTRYCONTINUE
MB_HELP
MB_OK
MB_OKCANCEL
MB_RETRYCANCEL
MB_YESNO
MB_YESNOCANCEL

图标类型:
MB_ICONEXCLAMATION
MB_ICONWARNING
MB_ICONINFORMATION
MB_ICONASTERISK
MB_ICONQUESTION
MB_ICONSTOP
MB_ICONERROR
MB_ICONHAND

设置缺省按钮值:
MB_DEFBUTTON1
MB_DEFBUTTON2
MB_DEFBUTTON3
MB_DEFBUTTON4

修改显示信息窗口的属性:
MB_APPLMODAL
MB_SYSTEMMODAL
MB_TASKMODAL
MB_RIGHT
MB_RTLREADING
MB_SETFOREGROUND
MB_TOPMOST
MB_SERVICE_NOTIFICATION
页: [1]
查看完整版本: Windows API一日一练 messagebox