Win32 消息循环 - 我应该中断还是返回
win32 message loop - should I break or return?
我想知道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,则执行将保留在当前函数中。它允许您设置结果变量并在返回之前统一执行一些操作。但是,如果您返回,您的执行将进入调用函数,并且不会继续执行当前函数中进一步执行的任何内容。所以没有正确的变体 - 由您决定使用什么: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;
它不取决于您正在与之交互的事件。
相关文章:
- 来自 std::list 的迭代器 .end() 按预期返回"0xcdcdcdcdcdcdcdcd"但 .begin()
- 什么时候在C++中返回常量引用是个好主意
- 你能重载对象变量名本身返回的内容吗
- 为什么 Serial.println(<char[]>);返回随机字符?
- C++映射:具有自定义类的运算符[]不起作用(总是返回0)
- 如何获取std::result_of函数的返回类型
- QueryWorkingSet总是返回false
- (C++)分析树以计算返回错误值的简单算术表达式
- 如何为伺服电机创建中断或返回值?
- 使用 Libusb 1.0 发送中断传输会返回LIBUSB_ERROR_IO,但在接收时不会
- 移动返回对象的构造函数会中断C++98 代码?
- 返回可中断线程的函数
- 从函数返回类型中删除常量是否会中断 ABI
- Win32 消息循环 - 我应该中断还是返回
- PEM_read_RSA_PUBKEY返回并中断应用程序
- 返回内部循环以C++中断循环
- 关闭函数时返回与中断
- 你需要在返回false后中断吗
- 从main返回0会中断我的程序
- 循环未给出预期答案-不确定退出/返回/中断