C++ win32消息循环-我应该中断还是返回?

C++ win32消息循环-我应该中断还是返回?,c++,visual-c++,C++,Visual C++,我想知道windows消息循环的正确返回值是多少。到目前为止,我使用了以下方法: case WM_LBUTTONDOWN: // left mouse button pressed. if (condition == true ) { do_something(); } break; 但我也看到过这样的事情: if (IDC_BUTTON == LOWORD(wParam) && BN_CLICKED == HIWORD(wParam))

我想知道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;
哪一个是正确的?我是否应该
返回true
?还是我应该打破?这有关系吗


编辑这是否取决于我是在用按键还是鼠标移动进行交互?

如果使用break,则执行将保留在当前函数中。它允许您设置结果变量,并在返回之前统一执行一些操作。但是如果您返回,您的执行将到达调用函数,并且不会继续执行当前函数中的任何内容。因此,没有正确的变体-由您决定使用什么:
break
return
。这取决于你自己的设计

例如:

bool结果;
开关(msg)
{
案例WM_LBUTTONDOWN:
//做smth。。。
结果=真;
break;//执行转到(3)
案例WM_MOUSEMOVE:
//行动。。。
结果=真;
break;//执行转到(3)
案例WM_RBUTTONDOWN:
//一些代码。。。
//此处无中断!执行继续到下一个事件
案例WM_MWHEELUP:
//如果发生WM_RBUTTONDOWN,执行将继续执行
result=false;//也许这里需要false,我不知道
break;//处理WM_RBUTTONDOWN和处理WM_MWHEELUP只会在这里停止
案例1:
//代码行。。。。
return true;//不执行从(3)开始的最终操作,但立即以该函数结束
违约:
结果=假;
}
// (3)
//执行一些最后的操作。。。
返回结果;

它不取决于您与什么事件交互。

返回值记录在MSDN中,作为每条消息文档的一部分。例如,以下国家的文件:

如果应用程序处理此消息,则应返回零


对于其他消息,返回值可能更有意义。您应该始终阅读文档,不要猜测。

您是
中断
还是
返回
取决于上下文,即处理此消息后希望做什么。如果你无事可做,你可以马上回来

但是当您确实从消息循环返回时,请确保
返回0

根据:
如果应用程序处理此消息,则应返回零

它们完全不同&取决于上下文。@LuchianGrigore它是否取决于消息?有什么区别?我什么时候应该使用哪个?这不是一个消息循环,这是一个窗口过程。这在很大程度上取决于它是如何编程的,尤其是在调用DefWindowProc()的底部发生了什么。返回值为LRESULT,返回true几乎永远都不正确。但很少被注意到。它也可能是一个对话框过程,返回true仍然是错误的,但更正确一点。您需要理解正在处理的消息。有些消息执行某些操作是有意义的,但是继续将它们传递给其他窗口过程以进一步处理。有些人想说“我已经处理好了,我们已经完成了。”有些人想说“我将做一些额外的处理,作为每条消息的一部分,然后再指出是否应该考虑完成此消息。”