0

我需要确保仅当我的应用程序在交互式桌面中运行时才显示消息框。所以我在想,我可以用自己的实现覆盖 ::MessageBox 和 AfxMessageBox 吗(来自 C++/MFC 项目,用 VS 2008 编译)?

PS。我不需要全局挂钩。这只需要从我的应用程序代码中工作。例如,如果在我拥有的代码中的某个地方,::MessageBox(...);它应该让我调用自己的方法,而不是链接到系统 API。

4

2 回答 2

1

如果您使用 MFC,您可以覆盖CWinApp::DoMessageBox函数。

于 2013-02-21T13:59:30.830 回答
1

默认的 MessageBox(实际上是 MessageBoxA 或 MessageBoxW)被定义为一个导出,所以很遗憾,您不能只定义一个本地版本来首先链接。如果您可以访问所有使用 MessageBox 的源,那么在包含 windows.h 之后重新定义 MessageBox 宏很简单:

#include <windows.h>
#undef MessageBox
#define MessageBox MyMessageBox

如果您有 3rd 方二进制文件或不编译代码的东西,这当然行不通。

于 2013-02-21T01:27:54.020 回答