我目前正在创建一个库来处理来自Raw Input API的信息,我正在使用级联函数处理所有内容。 这导致了几个非常小的,非常易读且非常集中的function。
但是,它只是打击了我,我不明白如何正确指示Windows失败。 我有这个function:
/* 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句柄。”
error handling真的只取决于程序员/团队而不是通知操作系统的必要性吗? 那些像WM_CREATE
这样的事件失败并且需要阻止创建窗口呢?
您根据每条消息的文档指出错误。 如果消息没有说明错误,那么您可以安全地假设该消息没有错误指示符。 这对于通知消息很常见,操作系统只是告诉您发生了某些事情。 它不需要您的回复。
如果这是一个致命错误,那么你应该像处理其他致命错误一样处理它:以某种方式告知用户错误( MessageBox
, stderr
等)和exit()
或abort()
。
如果这是一个非致命的错误,那么你需要将它传回给你的应用程序,这可以通过多种方式完成:设置标志,调用函数,发布WM_APP
消息等,你的应用程序应该处理它。 总而言之,Windows并不在乎,并且您有责任以合理的方式处理错误。
如果您正在编写供其他人使用的库,请确保您的应用程序具有明确定义和记录的错误过程。 如果库中发生内部错误,则允许应用程序指定错误回调,然后调用该回调并让应用程序处理它。
以上就是c/c++开发分享如何在窗口过程中指出处理消息时出错?相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/c-cdevelopment/550211.html