0

Windowsメッセージループの正しい戻り値は何か疑問に思っています。これまで私は以下を使用しました:

case WM_LBUTTONDOWN: // left mouse button pressed.
    if (condition == true )
    {
        do_something();
    }
break;

しかし、私は次のようなものも見ました:

if (IDC_BUTTON == LOWORD(wParam) && BN_CLICKED == HIWORD(wParam))
{
    do_something();
    return true;
}
break;

どちらが正しいですか?私がすべきですreturn trueか?または私break?はそれが重要ですか?

編集それは私がボタンの押下またはマウスの動きを操作しているかどうかに依存しますか?

4

3 に答える 3

4

戻り値は、各メッセージのドキュメントの一部として、MSDNにドキュメント化されています。たとえば、WM_LBUTTONDOWNのドキュメントには、次のように記載されています。

アプリケーションがこのメッセージを処理する場合、ゼロを返す必要があります。

他のメッセージの場合、戻り値の方が意味がある場合があります。推測するのではなく、常にドキュメントを読む必要があります。

于 2012-10-01T18:12:31.863 に答える
2

あなたがコンテキストに依存するかどうか-つまり、このメッセージを処理した後に何をbreakしたいかこれ以上何もすることがない場合は、すぐに戻ることができます。 return

ただし、メッセージループから戻る場合は、 MSDNreturn 0;
によると次のことを確認してください。If an application processes this message, it should return zero

于 2012-10-01T18:35:26.660 に答える
1

breakを使用すると、実行は現在の関数に残ります。これにより、結果変数を設定し、戻る前にいくつかのアクションを均一に実行できます。ただし、戻った場合、実行は呼び出し元の関数に到達し、現在の関数でさらに実行しているものは何でも実行し続けません。したがって、正しいバリアントはありません。何を使用するかを決めるのはあなた次第です:breakまたはreturn。それはあなた自身のデザインに依存します。

例えば:

bool result;

switch(msg)
{
case WM_LBUTTONDOWN:
    //do smth...
    result=true;
    break;//execution goes to (3)
case WM_MOUSEMOVE:
    //actions...
    result=true;
    break;//execution goes to (3)
case WM_RBUTTONDOWN:
    //some code...
    //no break here! execution continues to the next event
case WM_MWHEELUP:
    //if WM_RBUTTONDOWN occured, execution continues to here and goes on
    result=false;//maybe you need false here, I dont know
    break;//processing WM_RBUTTONDOWN will stop only here, as well as processing WM_MWHEELUP
case WM_USER1:
    //lines of code....
    return true;//do not perform final actions starting from (3), but end up with this function immideately
default:
    result=false;    
}

// (3)
//perform some final actions...

return result;

対話しているイベントには依存しません。

于 2012-10-01T18:12:04.047 に答える