【发布时间】:2010-09-30 00:07:45
【问题描述】:
这是一个 Windows 窗体应用程序。我有一个函数可以模态捕获一些鼠标事件,直到满足条件。例如,我想在函数返回之前等待用户在窗口的客户区中选择一个点(或者可选地使用 Escape 键取消操作)。我正在使用以下结构:
Application::AddMessageFilter(someFilter);
while(someFilter->HasUserSelectedAPoint_Or_HitEscapeKey()){
Application::DoEvents();
}
Application::RemoveMessageFilter(someFilter);
除了在控制进入 while 循环时占用了将近 100% 的 CPU 使用率之外,这非常有效。我正在寻找类似于如下所示的替代方案:
Application::AddMessageFilter(someFilter);
while(someFilter->HasUserSelectedAPoint_Or_HitEscapeKey()){
// Assuming that ManagedGetMessage() below is a blocking
// call which yields control to the OS
if(ManagedGetMessage())
Application::DoEvents();
}
Application::RemoveMessageFilter(someFilter);
IMessageFilter 和DoEvents 的正确使用方法是什么?在收到消息之前,如何将控制权交给操作系统?托管世界中是否有任何 GetMessage 等效项?
【问题讨论】:
标签: windows winforms user-interface winapi