当前位置: 首页 > news >正文

AfxMessageBox()和MessageBox()的差异。

书籍:《Visual C++ 2017从入门到精通》的2.4.2 MFC应用程序类型

环境:visual studio 2022

内容:【例2.38】单文档程序添加菜单项

说明:以下内容大部分来自腾讯元宝。

问题:在学习该部分内容的时候,调用了AfxMessageBox(_T("你好"));弹出了消息框显示你好,和我们之前学习SDK基础知识时的MessageBox()多了Afx,因此想要了解更多消息。

AfxMessageBox() 和 MessageBox() 的主要差异如下:


1. 函数类型与调用范围

  • AfxMessageBox

    • 全局函数属于 MFC 框架提供的全局函数,可在任何类或非 CWnd 派生类中直接调用,无需依赖窗口句柄。
    • 默认标题限制:消息框标题默认为应用程序可执行文件名(如 Hello.exe),无法通过参数自定义。
  • MessageBox

    • 类成员函数属于 CWnd 类的成员函数,需在 CWnd 及其派生类中调用,或通过 ::MessageBox() 全局 API 调用。
    • 灵活的标题设置:可通过 lpszCaption 参数自定义标题,适用于正式应用程序。

2. 参数与功能差异

  • AfxMessageBox

    • 简化参数:提供两种重载形式,支持直接传入字符串或字符串资源 ID,但缺少 hWnd(父窗口句柄)参数。
    • 默认样式:若仅传入内容参数(如 AfxMessageBox("文本")),默认按钮为 MB_OK,图标为 MB_ICONEXCLAMATION
  • MessageBox

    • 完整参数:支持 hWnd(父窗口句柄)、lpszCaption(标题)、nType(样式)等参数,功能更灵活。
    • 样式扩展:可组合更多按钮和图标类型(如 MB_TASKMODAL 控制模态行为)。

3. 使用场景

  • AfxMessageBox

    • 调试与内部提示:适合调试时输出内部数据或警告,因标题固定且调用简单。
    • MFC 项目首选:在 MFC 项目中更安全,避免因窗口句柄缺失导致的错误。
  • MessageBox

    • 正式应用程序:用于需要自定义标题、按钮或图标的用户交互场景。
    • 跨平台兼容:作为 Win32 API 函数,可直接用于非 MFC 项目(如 Win32 SDK 或 C++/CLI)。

4. 返回值与行为

  • 阻塞特性

    • 两者均为模态对话框,会阻塞当前线程直至用户响应,多线程环境下需注意同步。
  • 返回值定义

    • 返回值类型相同(如 IDOKIDYES 等),但 AfxMessageBox 的返回值需通过 if 判断(如 if (result == IDYES))。

总结对比表

特性AfxMessageBoxMessageBox
函数类型全局函数(MFC)类成员函数(CWnd)或全局 API(Win32)
标题控制默认使用可执行文件名,无法自定义可通过 lpszCaption 自定义
参数灵活性简化参数,缺少 hWnd支持完整参数(含父窗口句柄)
适用场景调试、内部提示、MFC 项目正式应用、跨平台兼容、自定义样式
代码示例AfxMessageBox("文本", MB_YESNO);MessageBox("文本", "标题", MB_YESNO);

通过以上差异分析,可根据具体需求选择:

  • MFC 项目:优先使用 AfxMessageBox 以简化代码。
  • Win32 或跨平台项目:使用 MessageBox 或 AfxMessageBox(需结合 MFC)。
  • 需要自定义标题:必须使用 MessageBox

相关文章:

  • OpenCV旋转估计(2)用于自动检测波浪校正类型的函数autoDetectWaveCorrectKind()
  • T-CSVT投稿记录
  • Century Avenue?有限元 lsdyna ansys、でしょ?
  • 【QA】观察者模式在QT有哪些应用?
  • 【Linux篇】进程控制
  • Pytest的夹具
  • 夸克网盘突破限速下载
  • 【MySQL】内置函数
  • 11 python 数据容器-字符串
  • 面试题精选《剑指Offer》:JVM类加载机制与Spring设计哲学深度剖析-大厂必考
  • 九、JavaScript作用域、预解析
  • 【数据分享】2000—2024年我国乡镇的逐月归一化植被指数(NDVI)数据(Shp/Excel格式)
  • 遇到一个奇怪问题,页面请求不到后端
  • 基于SpringBoot+Vue3实现的宠物领养管理平台功能七
  • 95 克的工业级动能:STONE 80A-M 电调深度测评 —— 无人机动力系统的轻量化范式
  • 跨域问题确认及处理
  • windows10在wsl上利用GPU运行tensorflow 2.12
  • 基于PyCATIA的CATIA实体双侧分割技术实现与优化
  • Onlyoffice 编译打包运行过程优化
  • 基于CNN的FashionMNIST数据集识别4——GoogleNet模型
  • 财政部:4月份中央收入增长1.6%,今年以来首月实现正增长
  • 王楚钦球拍受损,乒乓球裁判揭秘大赛球拍检测
  • 财政部:鼓励政策性银行对符合条件的城市更新项目提供支持
  • 英伟达回应在上海设立新办公空间:正租用一个新办公空间,这是在中国持续深耕的努力
  • 莱布雷希特专栏:古典乐坛边缘人
  • 19世纪的“表征之场”:弗洛伊德的精神分析椅