void CXXWnd::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)
{
   switch (nChar)
   {
    case VK_PRIOR:   // PAGEUP
        ...
        break;
    case VK_NEXT:    // PAGEDOWN
        ...
        break;
    case VK_LEFT:    // ←
        ...
        break;
    case VK_RIGHT:  //→
        ...
        break;
    case VK_UP:   //↑
        ...
        break;
    case VK_DOWN:  //↓
        ...
        break;
    default:
        ...
        break;
   }
}

解决方案 »

  1.   

    在对话框中上面的消息不能用!只有在View或CWnd中!
      

  2.   

    UINT CXxx:OnGetDlgCode()
    {
        return DLGC_WANTARROWS;
    }
      

  3.   

    to Phourm():
    那在在对话框中应该怎么样才可以用方向键来控制方向呢?
      

  4.   

    to joke100(joke100):
    我就是象你这样做的,可是程序对下和右键根本就没有反应----收不到到OnKeyDown这个消息(同样左和上键就可以)
      

  5.   

    要在WM_KEYUP消息中处理。
    void CXXWnd::OnKeyUp(UINT nChar, UINT nRepCnt, UINT nFlags)
    {
      switch (nChar)
      {
        
        
        case VK_RIGHT:  //→
            ...
            break;
        case VK_DOWN:  //↓
            ...
            break;
        default:
            ...
            break;
      }
    }
      

  6.   

    必须增加这些处理,在Dlg中就可以接受WM_KEYDOWN了!!!!
    UINT CXxx:OnGetDlgCode()
    {
        return DLGC_WANTARROWS;

      

  7.   

    to veryvigbug();
    但是我该如何加入该函数呢?
      

  8.   

    同意楼上的。在PreTranslateMessage()中使用:
    if(pMsg->message == WM_KEYDOWN)
    {
       switch(pMsg->wParam)
       {
        case VK_LEFT: //……
    break;
        case VK_DOWN://.....
                      break;   }
    }
      

  9.   

    如果是你自己的控件,那么肯定是:
    CXxxx:OnKeyDown(...)
    {
        switch(nChar)
        {
        case VK_XXXX:
          xxxxx
        }
    }就再你自己的控件中加这些代码就行了。
    如果MFC不认识OnGetDlgCode的话,那么就自己处理WM_GETDLGCODE。
    可参见MSDN...
    上面的几位不要再讲啦,根本就得不到WM_KEYDOWN的消息的。
    因为在基于Dlg的程序中,系统用SetWindowHook进行了Filter,根本就
    发不到Dlg的窗口的。
    只有将窗口的WM_GETDLGCODE设置位、为允许箭头才行。。我以前调查了很久才知道的。
      

  10.   

    To:verybigbug 你试过用PreTranslateMessage吗?如果这个不好使,我把头割下来让你当球踢 :)
      

  11.   

    大概也行吧,但作为标准的做法是用WM_GETDLGCODE。
    你可以试一试SendMessage(hwnd, WM_GETDLGCODE,0,0)对于EDIT窗口和
    BUTTON窗口的返回值有什么不同。
    对于自己的倥件而言,用该方法应该是最好的。
    想一想,如果该控件中有子控件时,是不是在PreTranslateMessage中需处理
    if(pMsg->hwnd == m_hWnd)???
    会有很多其他的限制吗?
    为什么不用标准的做法呢?????给我一个理由,一定要有理由的。。