我目前正在编写一个库来处理来自原始输入 API 的信息,并且我正在使用级联函数处理所有内容。这导致了几个非常小的、非常易读和非常集中的功能。
但是,我不明白如何正确指示 Windows 失败。我有这个功能:
/* OnInput: Handle data received from Windows via a `WM_INPUT` message. */
static LRESULT CALLBACK OnInput(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
BOOL DispatchRawInput(CONST PRAWINPUT);
assert(msg == WM_INPUT);
return DefWindowProc(hWnd, msg, wParam, lParam);
}
并且它返回零,因为文档说明它应该;但这假设成功。
实际文本指出:
“如果应用程序处理此消息,它应该返回零。”
但是,如果我不能处理它,我该怎么办?我最初以为您只是打电话DefWindowProc
并保留它,但这并没有向 Windows 发出任何发生的信号。
该消息WM_CREATE
似乎是我能找到的唯一一个返回非零值的实例:
“如果应用程序处理此消息,它应该返回零以继续创建窗口。如果应用程序返回 –1,则窗口被销毁并且 CreateWindowEx 或 CreateWindow 函数返回一个 NULL 句柄。”
错误处理真的只取决于程序员/团队,而不是通知操作系统的必要条件吗?像WM_CREATE
这样的事件失败并需要阻止创建窗口怎么办?