GetMessage について何かおもしろい使い方がないかな・・。と調べてみましたら、
おもしろい記述が見つかりました。
GetMessage はメッセージループの部分に書かれており、大抵は
while (GetMessage(&msg, NULL, 0, 0)){
TranslateMessage(&msg);
DispatchMessage(&msg);
}
という風に書かれています。
私がいつも見に行く解説サイトを見直してみてもそうでしたし、
過去に書いたソースコードもそうなっていました。
ですが、 MSDN の GetMessage 関数の説明を見てみますと、
MSDN:GetMessage 関数
エラーが発生した場合、-1 が返ります。
たとえば、hWnd パラメータで無効なウィンドウハンドルを指定した場合や、
lpMsg で無効なポインタを指定した場合は、エラーが発生します。拡張エラー情報を取得するには、 関数を使います。
ということで。
そして、英語版MSDNではこんな感じのサンプルが上がっていました。
BOOL bRet;
while((bRet = GetMessage( &msg, hWnd, 0, 0 )) != 0) {
if (bRet == -1) {
// handle the error and possibly exit
}
else
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
うーむ・・。
GetMessage の戻り値は BOOL のはずでは・・? と。思ってしまったり。
でも、BOOL って結局 int になってますから、 型としてはあっているんでしょうけど。
にしても・・。 BOOL だったら、 == 0 or != 0 でせう。と。
まぁー・・。そんな感じで。
実は僕も、
while(GetMessage(&msg,NULL,0,0))
のような書き方をしていたので、「-1」の場合は・・・?と悩んでいました。
英語のMSDNにはサンプルがあったんですね!
参考になりました。ありがとうございます。
>Dai 様
確かに-1 が帰ると書いてあったら、対応に困りますよね。
記事を読み返していて、これはC言語系ですから、
while((bRet = GetMessage( &msg, hWnd, 0, 0 )) != 0)
という書き方ができますが、これが BASIC 系だったら・・w なんて。ふと思ってしまいました。
理想としては、 GetMessage でエラー or PostQuitMessage(0) の時には 0 を返してもらって、
エラーかどうかは GetLastError 関数で返す仕掛けにしてもらえれば・・。と思いましたが、
もしかすると -1 が帰ったときは、 lpmsg とhwnd を正しく設定し直す処理を書くのかなぁ・・。何となく厳しい気もしますが・・。 うーむw