Win32消息处理API---WaitMessage

功能说明

当一个线程的消息队列中没有消息存在时,WaitMessage函数会使该线程中断并处于等待状态,同时把控制权交给其它线程,直到被中断的那个线程的消息队列中有了新的消息为止。

 

函数原型

BOOL WaitMessageVOID

 

参数

无。

 

返回值

如果函数调用成功,返回非零值;如果函数调用失败,返回值是零。

 

备注

    在线程已经调用某个函数来检索其消息队列之后,如果其消息队列中还包含有未经检索过的输入消息,则WaitMessage就一直等待,而不返回,这是因为诸如此类的函数:PeekMessageGetMessageGetQueueStatusWaitMessageMsgWaitForMultipleObjects以及MsgWaitForMultipleObjectsEx,在检索消息队列时,都要改变消息在队列中的状态,以便于该消息不再被当作新的输入消息。随后调用的WaitMessage,在指定类型的新的输入消息抵达之前,它是不会返回的。目前的未经检索过的输入消息(之前最后一次检索线程消息队列时得到的)会被忽略的。

 

适用

Windows NT3.1及以上版本;Windows95及以上版本;Windows CE:不支持;头文件:winuser.h;输入库:user32.lib

 

应用举例

创建模态对话框及其消息循环。

 

int RunModalWindow( HWND hwndDialog, HWND hwndParent )

{

    BOOL fDone = TRUE;

    INT  nResult = -1;

if ( hwndParent != NULL )   EnableWindow( hwndParent, FALSE ); // 父窗体不能为有效窗体

MSG msg;

    for ( ; fDone = WaitMessage(); )  { // 创建对应对话框窗体之消息循环

        while ( PeekMessage( &msg, 0, 0, 0, PM_REMOVE ) )   { // 检索消息队列,检索之后删除消息

            if ( msg.message == WM_QUIT )  {

                fDone = TRUE;

                PostMessage(NULL, WM_QUIT, 0, 0);

                break;

            }

            if ( !IsDialogMessage(hwndDialog, &msg) )  { // 属于该对话框的消息

                TranslateMessage(&msg);

                DispatchMessage(&msg);

            }

        }

}

    // 退出该对话框时,恢复其父窗体为有效窗体

    if ( hwndParent != NULL )  EnableWindow( hwndParent, TRUE );

    DestroyWindow( hwndDialog );  // 销毁对话框窗口

    return nResult;

}

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值