使用IMessageFilter和DoEvents的模式操作

这是一个Windows窗体应用程序。 我有一个函数捕获一些模拟鼠标事件,直到满足条件。 例如,我想等待用户在函数返回之前在窗口的客户区域中select一个点(或者可以select使用Escape键取消操作)。 我正在使用以下结构:

Application::AddMessageFilter(someFilter); while(someFilter->HasUserSelectedAPoint_Or_HitEscapeKey()){ Application::DoEvents(); } Application::RemoveMessageFilter(someFilter); 

这工作相当好,除了控制进入while循环时占用近100%的CPU使用率。 我正在寻找类似于以下所示的替代scheme:

 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); 

什么是正确的方式来使用IMessageFilterDoEvents ? 我如何向操作系统放弃控制,直到收到消息? 托pipe世界中的任何GetMessage等效项?

Solutions Collecting From Web of "使用IMessageFilter和DoEvents的模式操作"