打造自定义的AfxMessageBox

一、需求

与标准的 MessageBox 相比,MFC提供了 AfxMessageBox 的方法是我们对消 息框的变得更加容易。然而简单的 AfxMessageBox 有时已经不能够满足我们的 需求了:有时候我仅仅想提示用户一下,并不需要用户确认,也就是说过一段时 间消息框就能自动关闭。

您可能马上会想到,使用自己定义的对话框来替代程序中的 AfxMessageBox ,没错,这样的结果非常能够让你满意,但怎么实现呢?

您也许会说,我自己写一个 OwnMessageBox 函数,先前调用 AfxMessageBox 的地方都换成它就好了,非常好的主意!但你终归要去一个个的替换,是不是感 觉很没有挑战性呢?现在本文将介绍一个比较好的办法解决此问题。

二、解决办法

MFC中的CWinApp提供了一个名为 DoMessageBox 的虚函数供它的子类进行重 载操作,我们先来看一下AfxMessageBox的源代码:

int AFXAPI AfxMessageBox(LPCTSTR lpszText, UINT nType, UINT nIDHelp)
   {
      CWinApp* pApp = AfxGetApp();
      if (pApp != NULL)
         return pApp->DoMessageBox(lpszText, nType, nIDHelp);
      else
         return pApp->CWinApp::DoMessageBox(lpszText, nType, nIDHelp);
   }

重载 DoMessageBox 后我们得到了什么呢?

int COwnAfxMessageBoxApp::DoMessageBox(LPCTSTR lpszPrompt, UINT nType, UINT nIDPrompt)
   {
      return CWinApp::DoMessageBox(lpszPrompt, nType, nIDPrompt);
   }

其中 CWinApp::DoMessageBox 就是对 Windows API 中的 ::MessageBox 的封装,再此不多叙。

从代码中看出,调用 AfxMessageBox 先要到 DoMessageBox 这里审核,审核 通过再执行标准的MessageBox,这下你该知道怎么做了吧?到这时,可能你会这 样写到:

int COwnAfxMessageBoxApp::DoMessageBox(LPCTSTR lpszPrompt, UINT nType, UINT nIDPrompt)
   {
      OwnMessageBox(lpszPrompt, nType, nIDPrompt);
      // return CWinApp::DoMessageBox(lpszPrompt, nType, nIDPrompt);
   }

时间: 2025-01-30 08:25:13

打造自定义的AfxMessageBox的相关文章

WF从入门到精通(第十三章):打造自定义活动(二)

FtpGetFileActivity类 using System; using System.Collections.Generic; using System.Text; using System.IO; using System.Net; using System.ComponentModel; using System.ComponentModel.Design; using System.Workflow.ComponentModel; using System.Workflow.Com

WF从入门到精通(第十三章):打造自定义活动(一)

学习完本章,你将掌握: 1.了解对于创建一个功能齐全的自定义工作流活动来说哪些组件是必须的 2.创建基本的自定义工作流活动 3.在基本的自定义工作流活动中应用验证规则 4.把基本的自定义工作流活动集成到Microsoft Visual Studio的工作流视图设计器和工具箱中 WF并不可能涵盖到你可能在你的工作流中想要实现的各个方方面面.即使WF对于开发社区来说仍是非常新的技术,但目前已经可以获得许多免费发布的自定义活动,可以肯定商业级的活动最终也会跟进. 在这章中,你将通过创建一个新的工作流活

基于Bootstrap里面的Button dropdown打造自定义select

最近工作非常的忙,在对一个系统进行改版.项目后台是 MVC1.0开发的,但是前端部分已经改过几个版本,而已之前的设计师很强大,又做设计又做前端开发.而已很时尚和前沿,使用了一直都很热门的 Bootstrap工具包,有很多把它定义为Web前端CSS框架.说实话,之前只知道它是Twitter公司出品,界面做的比较好看.但是没有在实际项 目中使用,之前公司新来的同事会这个,准备在公司官网项目中使用,因为我不会,而已Leader对这个也不感冒,所以就没有用.而已她说配合Less一起 做项目,可以提高开发

基于Bootstrap里面的Button dropdown打造自定义select_javascript技巧

最近工作非常的忙,在对一个系统进行改版.项目后台是MVC1.0开发的,但是前端部分已经改过几个版本,而已之前的设计师很强大,又做设计又做前端开发.而已很时尚和前沿,使用了一直都很热门的Bootstrap工具包,有很多把它定义为Web前端CSS框架.说实话,之前只知道它是Twitter公司出品,界面做的比较好看.但是没有在实际项目中使用,之前公司新来的同事会这个,准备在公司官网项目中使用,因为我不会,而已Leader对这个也不感冒,所以就没有用.而已她说配合Less一起做项目,可以提高开发效率,而

立即动手尝试-使用Silverlight Media Framework构建自定义播放器

流媒体已在网络上无处不在.似乎所有人(从新闻站点到社交网络再到隔壁的邻居)都在享受在线视 频体验.由于用户群的不断攀升,大多数站点需要以一种值得信赖.用户友好的方式为其客户提供高品质 视频,通常为高品质带宽感知 视频. 在线媒体传输体验的核心要素是播放器本身.播放器是用户与之发生交互的介质,它可以驱使用户获 得在线体验的每一个要素.播放器如此备受关注,毫无疑问,基于 Web 的现代媒体播放器在实现时势必 要比几年前的老款播放器复杂得多.因此,开发人员需要一个稳健的框架来构建播放器. Silver

一起谈.NET技术,使用 Silverlight Media Framework 构建自定义播放器

      流媒体已在网络上无处不在.似乎所有人(从新闻站点到社交网络再到隔壁的邻居)都在享受在线视频体验.由于用户群的不断攀升,大多数站点需要以一种值得信赖.用户友好的方式为其客户提供高品质视频,通常为高品质带宽感知 视频.       在线媒体传输体验的核心要素是播放器本身.播放器是用户与之发生交互的介质,它可以驱使用户获得在线体验的每一个要素.播放器如此备受关注,毫无疑问,基于 Web 的现代媒体播放器在实现时势必要比几年前的老款播放器复杂得多.因此,开发人员需要一个稳健的框架来构建播放器

使用 Silverlight Media Framework 构建自定义播放器

流媒体已在网络上无处不在.似乎所有人(从新闻站点到社交网络再到隔壁的邻居)都在享受在线视频体验.由于用户群的不断攀升,大多数站点需要以一种值得信赖.用户友好的方式为其客户提供高品质视频,通常为高品质带宽感知 视频. 在线媒体传输体验的核心要素是播放器本身.播放器是用户与之发生交互的介质,它可以驱使用户获得在线体验的每一个要素.播放器如此备受关注,毫无疑问,基于 Web 的现代媒体播放器在实现时势必要比几年前的老款播放器复杂得多.因此,开发人员需要一个稳健的框架来构建播放器. Silverligh

Composite Application Guidance for WPF(9)——命令

这里的"命令"即Command模式中的"Command",几乎每个应用程序都有该模式的运用,如何"复制""粘贴""撤销"等操作.我们知道,该模式将操作的请求者和操作的执行逻辑隔离开来,并且其对请求排队以及撤销重复等操作有着良好的支持,所以被广泛应用.而WPF将其做了进一步的封装和改进,使得WPF程序能够很容易地使用命令和打造自定义命令,另外,WPF内置的数十种常用命令以及先进的命令路由模式(Routed)使

WF从入门到精通

WF从入门到精通(第十九章):把工作流发布为Web服务 WF从入门到精通(第十八章):在你的工作流中调用Web服务 WF从入门到精通(第十七章):关联及本地主机通信(下) WF从入门到精通(第十七章):关联及本地主机通信(上) WF从入门到精通(第十六章):声明式工作流 WF从入门到精通(第十五章):工作流和事务 WF从入门到精通(第十四章):基于状态的工作流 WF从入门到精通(第十二章):策略和规则 WF从入门到精通(第十三章):打造自定义活动(二) WF从入门到精通(第十三章):打造自定义活