MFC中MessageBox 的用法

函数原型:

int MessageBox( HWND hWnd, LPCTSTR lpText, LPCSTR lpCaption,UINT uStyle );

注:应先将项目属性中的字符集属性改为多字符集(Unicode)。

消息框函数有4 个参数:

    1. hwnd:      父窗口的句柄,为NULL,说明消息框没有父窗口,大多数情况下可以省略不写
    2. lpText:     指向要显示字符串的指针,对话框上显示的信息
    3. lpCaption: 消息框的标题,即提示框上部分显示的内容
    4. uStyle:     消息框的内容和形为(即该消息框有几个按钮、文本对齐等状态,可以在20多个属性值中进行组合)

uStyle可以是在WINUSER.H中定义的一组前缀以MB_开始的常数组合
可以使用"或"(|)运算符将下面显示的三组中各选一个常数组合起来指定消息框的内容和形为: 

// 显示哪些按钮:
#define MB_OK              0X00000000L 
#define MB_OKCANCEL        0X00000001L 
#define MB_ABORTRERYGNORE  0X00000002L 
#define MB_YESNOCANCEL     0X00000003L 
#define MB_YESNO           0X00000004L 
#define RERYCANCEL         0X00000005L 


// 焦点在哪个按钮上:
#define MB_DEFBUTTON1      0X00000000L 
#define MB_DEFBUTTON2      0X00000100L 
#define MB_DEFBUTTON3      0X00000200L 
#define MB_DEFBUTTON4      0X00000300L


// 图示的外观:
#define MB_ICONHAND        0x00000010L
#define MB_ICONQUESTION    0x00000020L
#define MB_ICONEXCLAMATION 0x00000030L
#define MB_ICONASTERISK    0x00000040L


//图示的某些有替代名称:
#define MB_ICONWARNING     MB_ICONEXCLAMATION
#define MB_ICONERROR       MB_ICONHAND
#define MB_ICONINFORMATION MB_ICONASTERISK
#define MB_ICONSTOP        MB_ICONHAND



MessageBox(NULL, "Hello, Windows!","hello", MB_OK );
MessageBox(NULL, "Hello, Windows!","HelloMsg", MB_YESNO|MB_ICONEXCLAMATION) ;
MessageBox(NULL, "Hello, Windows!","HelloMsg", MB_YESNO|MB_DEFBUTTON1) ;//表示窗口出来后焦点 focus落在Yes(第一个)按钮上 返回值:
IDOK     -- 1
IDCANCEL -- 2
IDABORT  -- 3
IDRETRY  -- 4
IDIGNORE -- 5
IDYES    -- 6
IDNO     -- 7

<think>好的,用户想了解MFCMessageBox用法,并希望有示例。我之前已经提供了关于getcwd函数的详细回答,现在需要根据用户提供的引用内容来回答这个问题。 首先,我需要确认用户提供的引用内容。引用1到5都涉及MFCMessageBox,包括基本用法、参数说明、不同按钮和图标组合,以及注意事项。特别是引用2和4提供了具体的参数和示例代码,引用5可能提到了一些高级用法,但内容不完整。 用户的问题集中在MessageBox的使用方法和示例上。我需要整理这些引用的信息,确保覆盖所有重要点,比如函数参数、不同按钮和图标的使用、返回值处理,以及在不同上下文(如CWnd子类和非CWnd类)中的调用方式。 接下来,我要检查是否有遗漏的信息。例如,引用3提到了结构体和列表框,可能和用户的问题无关,但需要确保不混淆。引用4提到父窗口句柄hwnd,这在非CWnd类中的使用很重要,需要强调。 用户可能的需求包括基础用法、不同参数组合、错误处理以及实际应用场景。需要分步骤讲解,结构清晰,并附上代码示例,确保用户能理解并应用。 另外,要注意跨版本或不同环境下的差异,比如AfxMessageBoxMessageBox的区别,以及Unicode环境下的字符串处理(如_T宏的使用),这在引用1和2中有提到。 最后,生成相关问题,帮助用户深入理解,比如错误处理、高级选项、与Qt消息框的比较等,参考之前回答的结构。</think>### **MFC中`MessageBox`使用详解** `MessageBox`是MFC中用于**弹窗交互**的核心函数,支持多种按钮组合、图标样式及返回值处理。以下是其详细用法及示例: --- #### **一、函数原型与参数** 在MFC中,`MessageBox`有两种主要形式: 1. **`CWnd`子类中直接调用**(如对话框、视图类): ```cpp int MessageBox(LPCTSTR lpszText, LPCTSTR lpszCaption = NULL, UINT nType = MB_OK); ``` 2. **全局函数(非`CWnd`子类中调用)**: ```cpp int MessageBox(HWND hWnd, LPCTSTR lpText, LPCTSTR lpCaption, UINT uType); ``` - **参数解析**: | 参数 | 说明 | |--------------|----------------------------------------------------------------------| | `hWnd` | 父窗口句柄,若为`NULL`则无父窗口(可省略,如`AfxMessageBox`)[^4] | | `lpText` | 消息框显示的文本内容(如`"操作成功!"`) | | `lpCaption` | 消息框标题(默认`NULL`,显示程序名称) | | `uType` | **按钮类型** + **图标类型** + **默认焦点**的组合(通过`|`连接)[^2] | --- #### **二、常用按钮类型与图标** | **按钮类型** | 说明 | **图标类型** | 说明 | |--------------------|----------------------------|-----------------------|-----------------------| | `MB_OK` | 仅“确定”按钮默认) | `MB_ICONINFORMATION` | 信息图标(ⓘ) | | `MB_OKCANCEL` | “确定”和“取消” | `MB_ICONWARNING` | 警告图标(⚠) | | `MB_YESNO` | “是”和“否” | `MB_ICONQUESTION` | 问号图标(?) | | `MB_YESNOCANCEL` | “是”“否”“取消” | `MB_ICONERROR` | 错误图标(×) | | `MB_RETRYCANCEL` | “重试”和“取消” | `MB_ICONEXCLAMATION` | 感叹号图标(!)[^2] | --- #### **三、基础使用示例** ##### **1. 简单消息弹窗** ```cpp // 在CWnd子类(如对话框)中调用 MessageBox(_T("文件保存成功!")); // 默认标题和“确定”按钮 // 非CWnd子类中调用(需指定窗口句柄或使用AfxMessageBox) ::MessageBox(NULL, _T("网络连接失败!"), _T("错误"), MB_OK | MB_ICONERROR); ``` ##### **2. 带标题和自定义按钮** ```cpp // 显示“是/否”选择对话框 int result = MessageBox(_T("确认删除此文件?"), _T("警告"), MB_YESNO | MB_ICONQUESTION); if (result == IDYES) { // 执行删除操作 } ``` ##### **3. 多属性组合** ```cpp // 显示“重试/取消按钮 + 警告图标 + 默认焦点在“取消MessageBox(_T("无法读取设备,请检查连接!"), _T("硬件错误"), MB_RETRYCANCEL | MB_ICONWARNING | MB_DEFBUTTON2); ``` --- #### **四、返回值处理** | **返回值** | 触发场景 | |-----------------|-------------------------| | `IDOK` | 用户点击“确定” | | `IDCANCEL` | 用户点击“取消” | | `IDYES`/`IDNO` | 用户点击“是”或“否” | | `IDRETRY` | 用户点击“重试” | **示例**: ```cpp int response = MessageBox(_T("覆盖现有文件?"), _T("保存确认"), MB_YESNOCANCEL); switch (response) { case IDYES: SaveFile(); break; case IDNO: // 跳过保存 break; case IDCANCEL: // 取消操作 break; } ``` --- #### **五、高级用法与注意事项** 1. **`AfxMessageBox`简化调用** 无需窗口句柄,直接全局使用: ```cpp AfxMessageBox(_T("内存不足!"), MB_OK | MB_ICONSTOP); ``` 2. **多语言与Unicode支持** 使用`_T()`宏或`CString`确保兼容: ```cpp CString msg = _T("当前用户:") + username; MessageBox(msg, _T("用户信息")); ``` 3. **默认焦点设置** 通过`MB_DEFBUTTON1`(默认)或`MB_DEFBUTTON2`指定焦点位置: ```cpp MessageBox(_T("是否继续安装?"), _T("确认"), MB_YESNO | MB_ICONQUESTION | MB_DEFBUTTON2); // 默认选中“否” ``` 4. **模态对话框阻塞** `MessageBox`会阻塞当前线程,直到用户响应[^4]。 --- #### **六、常见问题解答** **Q1: 如何在没有窗口句柄的类中使用`MessageBox`?** - 使用`AfxMessageBox`或全局函数`::MessageBox(NULL, ...)`[^2]。 **Q2: 如何动态生成消息内容?** - 使用`CString`格式化字符串: ```cpp CString msg; msg.Format(_T("剩余磁盘空间:%d MB"), freeSpace); MessageBox(msg); ``` **Q3: 如何设置消息框超时自动关闭?** - MFC原生不支持,需通过`SetTimer`或自定义对话框实现[^5]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值