返回首页

简介
我开始在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的更多信息,你会碰到很有趣的主题。

回答

评论会员:upasanabhatia 时间:2011/12/07
非常有用
评论会员:阿贾伊LD 时间:2011/12/07
嗨,
这个问题我想问问你是不是涉及到您发表的文章,但我想问问也无妨!
你有任何关于价值0x00AE,我们在XP中收到的消息的想法吗?
我收到此消息,只有当我使用"外观"选项卡下的"XP风格"在显示属性的外观。 我是做涂料的SDI,在标题区(最小值,最大值按钮显示的地方)时,我注意到,如果我最小化,恢复我的应用程序,我在标题区的绘画的默认画覆盖标题栏的控制。我发现这个无证的消息0x00AE,造成了这一问题。
同样的消息0x00AE,不进来古典风格。有这方面的想法?

谢谢你,
AJ
评论会员:Nibu巴布托马斯 时间:2011/12/07
阿贾伊LD写道:有这方面的想法?

抱歉没有。 {S0}

工作时,如果我发现一些情况与此类似,我会告诉你,我会保持这种心态。 {S1}

Nibu托马斯
开发者


评论会员:helloworld2222 时间:2011/12/07
静态无效的DoEvents(HWND hWnd_i){味精stMsg = {0};而(的PeekMessage(stMsg,hWnd_i,0,0,PM_REMOVE)){TranslateMessage(stMsg); DispatchMessage函数( stMsg );}}{ BR}那么调用这个函数的循环中,我是有点如下:

为(UINT uFileIndex = 0; uFileIndex 良好的DoEvents(HWND hWnd_i)需要一个定义的参数。但是当你调用它你不传递任何东西。
ResUtils是什么?你确定这是工作吗?
如果你发布的东西在这里,旨在帮助解决问题,请张贴的东西,这是错误的自由和足够的信息。
评论会员:Nibu巴布托马斯 时间:2011/12/07
helloworld2222写道:良好的DoEvents(HWND hWnd_i),需要一个定义的参数。但是当你调用它你不传递任何东西。
ResUtils是什么?你确定这是工作吗?

是的,这从我个人的项目,它的工作凉爽。至于你说的,实际的代码是

    static void DoEvents()

    {

        MSG stMsg = { 0 };

        while( PeekMessage( &stMsg, <code>AfxGetMainWnd()->GetSafeHwnd()</code>, 0, 0, PM_REMOVE ))

        {

            TranslateMessage( &stMsg );

            DispatchMessage( &stMsg );

        }

    }

这HWND参数增加了,而写这篇文章,只是为了确保用户有足够的灵活性,以传递任何HWND
helloworld2222写道:"如果你发布的东西在这里,旨在帮助解决问题,请张贴的东西,这是错误的自由和足够的信息。

这就是为什么它在这里。 {S1}

Nibu托马斯
开发者


评论会员:RomualdasCukuras 时间:2011/12/07
0xAE WM_NCUAHDRAWCAPTION
0xAF WM_NCUAHDRAWFRAME

多数民众赞成在Windows XP中的秘密盾,当您使用的主题{S1}祝你好运。罗姆人