MessageBox& WM_TIMER(在Win2k之后)

时间:2013-04-09 13:16:13

标签: winapi

这里的每个人都知道从WinXP到user32.dll出现了MessageBoxTimeout API。

但是现在它不是关于使用未记录的MessageBoxTimeout,而是使用记录的MessageBox:

所以这是巧合,从WinXP到任何MessageBox - PostMessage(WM_TIMER,0,0)等同于PostMessage(WM_CLOSE,0,0)。

内部人士提问:这是一个错误还是一个功能?

1 个答案:

答案 0 :(得分:3)

这不是巧合。事实证明,MessageBox是通过调用MessageBoxTimeout来实现的,该0xFFFFFFFF传递超时值MessageBoxTimeout。使用调试器识别这一点很简单。事实证明,WM_TIMER对话框通过关闭对话框来响应MessageBoxTimeout消息。这就是WM_TIMER实现超时的方式。

因此,如果您将MessageBox消息发布到MessageBoxTimeout对话框,您实际上是将其发布到MessageBox对话框,因此您确实会将其关闭。

这肯定不是一个错误,因为WM_TIMER根本没有承诺它将如何响应接收MessageBox消息。它不是一个功能,因为它没有记录。这只是当前{{1}}实施的一个奇怪的副作用。

当然,所有这些都是实施细节,可能会有变化等等。