用户:  密码: 记住我     找回密码 
| 文章 >> 编程语言 >> C / C++

扫视消息的一些技巧

日期 | 作者Nibu巴布托马斯 | 浏览86 | 评分100 | 标签C / C++ 评论
简介
我开始在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的更多信息,你会碰到很有趣的主题。
关于作者:Nibu巴布托马斯


中国
我是一名编程爱好者,
谢谢orcode.com为我们提供一个学习和分享的平台。
有什么问题。可以就本内容回复,我看到时。会尽量回复的。
评论会员: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}祝你好运。罗姆人
 文章分类
 桌面
 网页开发
 移动开发
 数据库
 多媒体
 编程语言
 平台,框架和库
 编程通用
 图形/设计
 开发周期
 一般阅读
 第三方产品
 作者资源
 其他
快速解答标签
c x 6850
VC x 7405