希望在对话框中响应Page UP、Page Down按键,但WM_KEYDOWN消息,对话框得不到,为何?
Page UP、Page Down键为何找不到 VK_值,它们是如何定义和使用的呢?

解决方案 »

  1.   

    重载CDialog::PreTranslateMessage,
    BOOL CMyDlg::PreTranslateMessage(MSG* pMsg) 
    {
    if(pMsg->message == WM_KEYDOWN)
    {
    // check key code here
    }
    return CDialog::PreTranslateMessage(pMsg);
    }
      

  2.   

    bcpl(从来就没有什么救世主,也不靠神仙皇帝) 
    说得很对(当然很对了);
    教你一个笨方法:小声点,不要让别人知道,在 
    BOOL CMyDlg::PreTranslateMessage(MSG* pMsg) 
    {
    if(pMsg->message == WM_KEYDOWN)
    {
    int iKey = pMsg->wParam;
    CString str;
    str.Format("%d", iKey);
    AfxMessageBox(str);//我知道Page UP = 33, Page Down = 34
    }
    return CDialog::PreTranslateMessage(pMsg);
    }其实在winuser.h中
    #define VK_PRIOR          0x21
    #define VK_NEXT           0x22
      

  3.   

    在大家的指导下,我可以获取Page down/up了,但按了几次后,(每次调用一个函数),函数中并没有非分之想,常规的计算和显示而已。随后,PreTranslateMessage(MSG* pMsg) 
    函数也得不到任何值了,仿佛什么也没发生!?郁闷不郁闷 :-〈
      

  4.   

    基于对话框的应用程序,其焦点在对话框的某个控件上,所以响应不了键盘消息,按顶楼的做法,重载CDialog::PreTranslateMessage这个预处理消息就可以了。至于你的第二个问题:可能是你自己函数的问题,设一个断点,跟踪一下...