我在ontimer消息处理函数里面用PeekMessage判断当前有没有onkeydown消息,
为什么我在按下按键时没有正确执行啊,代码如下:
void CInvokeOnKeyDownDlg::OnTimer(UINT_PTR nIDEvent)
{
    MSG msg; 
    if (::PeekMessage(&msg, m_hWnd, 0, 0, PM_NOREMOVE)) 
    { 
if (msg.message == WM_KEYDOWN)
{
            Flag = true; 
    AfxMessageBox("peek message");
}
    } 
    if (Flag)
AfxMessageBox("key down in btn click");
}
谢谢各位!

解决方案 »

  1.   

    你为什么要在定时函数中处理呢?
    另外,你可以实现WM_KEYDOWN的消息映射宏,或在PreTranslateMessage中进行处理。
      

  2.   

    回复楼上的:
    请看http://topic.csdn.net/u/20081122/13/62b2c048-faec-40bd-81e5-3ed9cc866ef1.html
      

  3.   

    LZ还真够执着的。把m_hWnd改成0,不然只要焦点在某个控件上,就检查不到键盘消息。另外,检查到消息后是不是要取出消息,并处理消息?(类似消息循环的操作,参考GetMessage、IsDialogMessage、TranslateAccelerator、TranslateMessage、DispatchMessage等函数)
      

  4.   

    建议阅读一下MSDN或其它有关windows编程书中的windows消息机制处理部分,详见我的解答:
    http://topic.csdn.net/u/20081122/13/62b2c048-faec-40bd-81e5-3ed9cc866ef1.html
      

  5.   

    哦,好了!
    要解决上面的问题可以用:
    1.PeekMessage(&msg, m_hWnd, 0, 0, PM_NOREMOVE);
    2.GetQueueStatus(QS_KEY);谢谢楼上的朋友们!
      

  6.   

    不好意思,上面发错了:
    1.PeekMessage(&msg, 0, 0, 0, PM_NOREMOVE); 
    2.GetQueueStatus(QS_KEY);