代码之家  ›  专栏  ›  技术社区  ›  user113476

.NET事件application.onidle如何在win32中编码?

  •  3
  • user113476  · 技术社区  · 14 年前

    .NET事件application.onidle如何在win32中编码?(即,幕后发生了什么?).

    1 回复  |  直到 14 年前
        1
  •  1
  •   Greg Hewgill    14 年前

    典型的win32消息循环如下所示:

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

    还有一个 PeekMessage() 测试消息是否可用的函数。这样,您就可以将消息循环修改为:

    while (GetMessage(&msg, NULL, 0, 0)) {
        do {
            TranslateMessage(&msg);
            DispatchMessage(&msg);
        } while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE));
        onIdle();
    }
    

    当仍有消息可供处理时,上面的循环将调用translate/dispatch,然后当不再有消息时,它将调用 onIdle() . 然后返回到外部循环调用 GetMessage() 再次等待下一条消息。

    请注意,这是在Win32中实现OnIdle功能的一种可能方法。我不知道这是否与.NET的做法相同。