BOOL WINAPI GetMessage(
_Out_ LPMSG lpMsg,
_In_opt_ HWND hWnd,
_In_ UINT wMsgFilterMin,
_In_ UINT wMsgFilterMax
);
它陈述如下:
"如果函数检索WM_QUIT
以外的消息,则返回值为非零。
如果函数检索WM_QUIT
消息,则返回值为零。
如果出现错误,则返回值为 -1 。"
Aren的boolean
值为true
或false
?我们在这里有三个选项,true
,false
和oopsie_daisy
....
因此,在输入此内容时,我认为应该检查WinDef.h
并在其中找到:
typedef int BOOL;
... Hrmmm
BOOL
只是int
。
那究竟是什么目的呢?它只是另一种时代错误,就像我们发现Windows API乱七八糟的那样?
为什么没有GetMessage()
返回int
值?
我知道最终它并没有什么不同,我只是好奇是否有人得到答案,因为它最近一直困扰着我。
谢谢。
PS:
关于我的oopsie_daisy
评论,我意识到它可以是任何整数值,我在具有3个选项的函数的上下文中说,而不是BOOL只有3个可能的值。
答案 0 :(得分:6)
请参阅The Old New Thing上的When will GetMessage return -1?:
最初,GetMessage函数没有失败模式。如果您传递了无效参数,那么您调用了未定义的行为,并且您可能已崩溃。
因此,最初,GetMessage返回TRUE或FALSE。因此,BOOL
的选择在当时是完全合理的。
至于为什么签名在行为改变时没有改变,这可能只是惯性和/或向后兼容性。
答案 1 :(得分:1)
BOOL
表示在正常情况下,没有参数错误,该值可以解释为布尔值,按照通常的C约定0 = false ,因为它原来是GetMessage
:
“如果检索到WM_QUIT以外的消息,则GetMessage()函数的返回值为TRUE。如果检索到WM_QUIT消息,则返回值为FALSE。
为什么在GetMessage
更改为也返回错误指示符时未更改此内容,可能无法回答。
注意:
¹http://www.ecma-international.org/publications/standards/Ecma-234.htm
功能