简介
我开始在VC关闭了一段时间后在VB编程(在家几个月)。一个功能,我从VB错过的DoEvents。但我发现在VC中使用函数PeekMessage等价。你可能知道这些技巧,但这主要是为那些不知道如何做到这一点。为什么我需要一个DoEvents函数
好了,我上午在发展一个有趣的个人项目中,这个想法是一个秘密的;)。所以发生了什么事,我有一个紧的情况循环的方式,我不想使用一个线程,因为它是联合国必要。这时候,我开始思考的DoEvents相当于在VC。
的DoEvents代码
现在的说教就够了:)。让我们的代码,这将有助于我们在做这个。static void DoEvents( HWND hWnd_i )
{
MSG stMsg = { 0 };
while( PeekMessage( &stMsg, hWnd_i, 0, 0, PM_REMOVE ))
{
TranslateMessage( &stMsg );
DispatchMessage( &stMsg );
}
}
中,这就是所谓的循环如下... ...{C}
我调用这个函数定义一个LOOP_THRESH_HOLD_FOR_DO_EVENTS。这将是非常有用的,如果你的循环是一个低优先级之一。现在不挂我的GUI,绘画发生正确太多。法拉盛的键盘和鼠标输入缓冲区
怎么样,冲洗键盘输入缓冲区和鼠标输入缓冲区的选择性...
结论static void FlushKeyboardInputBuffer( HWND hWnd_i )
{
MSG stMsg = { 0 };
while( PeekMessage( &stMsg, hWnd_i , WM_KEYFIRST, WM_KEYLAST, PM_REMOVE ))
;
}
static void FlushMouseInputBuffer( HWND hWnd_i )
{
MSG stMsg = { 0 };
while( PeekMessage( &stMsg, hWnd_i, WM_MOUSEFIRST, WM_MOUSELAST, PM_REMOVE ))
;
}
这些都是编程时,我的一些想法。希望这有助于。还有一些其他的标志,你可以传递的PeekMessage,例如:PM_QS_INPUT
Windows 98/Me中,Windows 2000/XP的过程鼠标和键盘消息。PM_QS_PAINTWindows 98/Me中,Windows 2000/XP的过程油漆消息。PM_QS_POSTMESSAGEWindows 98/Me中,Windows 2000/XP系统:处理所有发布的消息,包括计时器和热键。PM_QS_SENDMESSAGEWindows 98/Me中,Windows 2000/XP系统:处理所有发送的邮件。
怎么办空闲时间处理ONIDLE关键字使用的PeekMessage,搜索MSDN的更多信息,你会碰到很有趣的主题。