繁体   English   中英

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

[英]WinAPI - message loop with own callback

通常的WinAPI消息循环看起来像这样:

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

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

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

谢谢你的帮助。

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

如果您计划在GUI中使用多个线程,那么创建窗口的每个线程都需要管理它自己的消息队列。

从此页面: http//msdn.microsoft.com/en-us/library/ms810439.aspx

消息循环的更改

具有多个线程的应用程序必须在每个创建窗口的线程中包含消息循环。 窗口的消息循环和窗口过程必须由创建窗口的线程处理。 如果消息循环不驻留在创建窗口的同一线程中,则DispatchMessage函数将不会获取该窗口的消息。 因此,窗口将出现,但不会显示激活,也不会重新绘制,移动,接收鼠标消息,或者通常按预期工作。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM