我在View类下面加了一个函数,里面来判断消息队列的状态,使用了GetQueueStatus()这个api函数,但是取不到任何有效状态.

解决方案 »

  1.   

    要修改窗体的消息循环,在PeekMessage之前来调用GetQueueStatus, 因为这个函数只识别消息队列里的消息,刚被PeekMessage取出来的消息无法识别的。示例代码:
    while (true)
    {
    DWORD dwMessage=GetQueueStatus(QS_HOTKEY);
    printMessage(HIWORD(dwMessage),_T("当前消息"));  //显示出消息类型
    printMessage(LOWORD(dwMessage),_T("下个消息"));  
    if(PeekMessage(&msg, NULL, 0, 0,PM_REMOVE))
    {
    if(msg.message==WM_QUIT)          //当接受到WM_QUIT时,退出循环
    break;
    else
    {
    if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))
    {
    TranslateMessage(&msg);
    DispatchMessage(&msg);
    } }
    }else
    {
    WaitMessage();   //当没有消息时,将线程挂起,减少CPU使用率
    }

    }
      

  2.   

    while (true) 

    DWORD dwMessage=GetQueueStatus(QS_ALLINPUT); 
    printMessage(HIWORD(dwMessage),_T("当前消息"));  //显示出消息类型 
    printMessage(LOWORD(dwMessage),_T("下个消息"));  
    if(PeekMessage(&msg, NULL, 0, 0,PM_REMOVE)) 

    if(msg.message==WM_QUIT)          //当接受到WM_QUIT时,退出循环 
    break; 
    else 

    if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg)) 

    TranslateMessage(&msg); 
    DispatchMessage(&msg); 
    } } 
    }else 

    WaitMessage();  //当没有消息时,将线程挂起,减少CPU使用率 
    } }