2015/10/21

Win32API メモ (その2) : メッセージループ

※ここではUnicode文字セットを使用するものとして書いてある。Wで終わるものは基本的にUnicode版なので、ドキュメントを検索するときは末尾のWを消しておくこと。


メッセージループを構成する際、次のようなことをしてはいけない:

    while (GetMessageW(&msg, hWnd, 0, 0))
    {
        //処理
    }

GetMessageW関数はエラーが有った場合に-1を返すため、このように書くと問題のあるメッセージを処理しようとして致命的なエラーを引き起こす可能性がある。
代わりに、次に示すように-1が返されたらエラー処理を行うようにする:

    while ((bRet = GetMessageW(&msg, hMainWindow, 0, 0)) != 0)
    {

        if (bRet == -1)
        {
            //エラー処理
        }
        else
        {
            //通常の処理
        }
    }



PeekMessageW関数でループを構成すると、パフォーマンスに悪い影響をあたえるので避けるべきである。

0 件のコメント:

コメントを投稿