Win32 消息循环 - 我应该中断还是返回

win32 message loop - should I break or return?

本文关键字:返回 中断 我应该 消息 循环 Win32      更新时间:2023-10-16

我想知道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?重要吗?

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

返回值记录在 MSDN 上,作为每条消息的文档的一部分。例如,WM_LBUTTONDOWN的文档指出

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

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

您是break还是return取决于上下文 - 即处理此消息您希望执行的操作。如果您无事可做 - 您可以立即返回。

但是,当您从消息循环返回时 - 请确保您return 0;
根据 MSDN:If an application processes this message, it should return zero

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

例如:

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;

它不取决于您正在与之交互的事件。