私は現在、Raw Input 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
は、ゼロ以外の値を返す唯一のインスタンスのようです。
「アプリケーションがこのメッセージを処理する場合、ウィンドウの作成を続行するには 0 を返す必要があります。アプリケーションが –1 を返す場合、ウィンドウは破棄され、CreateWindowEx または CreateWindow 関数は NULL ハンドルを返します。」
エラー処理は本当にプログラマー/チーム次第であり、オペレーティングシステムに通知する必要はありませんか? そのようなイベントWM_CREATE
が失敗し、ウィンドウの作成を防ぐ必要がある場合はどうですか?