WinAPI - 带有自己回调的消息循环

时间:2012-03-17 23:14:51

标签: c++ c winapi

通常的WinAPI消息循环如下所示:

MSG msg;
while (GetMessage(&msg, hwnd, 0, 0))
{
  TranslateMessage(&msg);
  DispatchMessage(&msg);
}

是否允许不调用DispatchMessage(),而是自己处理消息?如果没有,我怎么能在避免全局变量和线程问题的同时很好地处理这种行为呢?

编辑: 我基本上想要使用自己的回调函数,它没有WndProc签名。但我想不出一种在不使用静态或全局变量的情况下从WndProc中调用该函数的方法。 [这需要锁定,我认为这不是你可以用回调函数做的最好的事情,可能会经常被调用。]

感谢您的帮助。

2 个答案:

答案 0 :(得分:2)

您可以对那里的消息做出反应,但您仍然需要/想要调用DispatchMessage并实际处理正常wndproc中的消息。我很乐意多说一些关于避免全局和/或线程问题的内容,但如果没有关于你想要避免的更多细节,就很难发表评论。

答案 1 :(得分:1)

是的,如果您愿意,您可以自己处理此消息。我通常将结果字段设置为0,但Windows仅将此字段用于一些消息。