我有四个单选按钮组,每组两个。本来用TAB键可以切换两组之间的焦点
但是我最后用的小键盘是没有tab键的,所以想用上下键切换两组之间的焦点
重载了PreTranslateMessage函数,当相应的是enter键是可以在不同组见切换,但是换成
上下键就不能切换了 都只能在组内切换
代码如下第一组radio:IDC_CoinOk,IDC_CoinStop
第二组radio:IDC_CashOk,IDC_CashStop开始时焦点在IDC_CoinOk上(pMsg->message == WM_KEYDOWN && pMsg->wParam == VK_RETURN)
 {
        //如果代码这么写,按ENTER键焦点就切换到IDC_CashOk上
          GetDlg(IDC_CashOk)->SetFocus();
          return CDialog::PreTranslateMessage(pMsg);
  }
 
if (pMsg->message == WM_KEYDOWN && pMsg->wParam == VK_DOWN)
 {
        //如果代码这么写,按向下键键焦点只在IDC_CoinOk和IDC_CoinStop之间切换
          GetDlg(IDC_CashOk)->SetFocus();
          return CDialog::PreTranslateMessage(pMsg);
  }

解决方案 »

  1.   

    相同的问题 米有解决啊
    http://www.sunxin.org/forum/thread/24042.html;jsessionid=10E468C2829D13EC46EBF9B461806EE9
      

  2.   

    简单一点,将你的上下左右键做的和Tab按键一样应该是可以
    BOOL CXXDlg::PreTranslateMessage(MSG* pMsg)
    {
     if(WM_KEYDOWN == pMsg->message)
     {
      switch(pMsg->wParam)
      {
       case VK_DOWN:
        pMsg->wParam = VK_TAB;
       break;
       default:
       break;
      }
     }
     return CDialog::PreTranslateMessage(pMsg);
    }
      

  3.   

    或者有鼠标模拟点击RadioButtonBOOL CXXXDlg::PreTranslateMessage(MSG* pMsg) 
    {
    // TODO: Add your specialized code here and/or call the base class
    if(WM_KEYDOWN == pMsg->message)
    {
    switch(pMsg->wParam)
    {
    case VK_DOWN:
    {
    CWnd* pWnd = GetDlgItem(IDC_RADIO1);
    ASSERT(pWnd);
    CRect rc;
    pWnd->GetWindowRect(rc);
    CPoint ptCursor;
    GetCursorPos(&ptCursor);
    CPoint pt(rc.CenterPoint());
    ShowCursor(SW_HIDE);
    SetCursorPos(pt.x, pt.y);
    mouse_event(MOUSEEVENTF_LEFTDOWN, pt.x, pt.y, 0, 0);
    mouse_event(MOUSEEVENTF_LEFTUP, pt.x, pt.y ,0, 0);
    SetCursorPos(ptCursor.x, ptCursor.y);
    ShowCursor(SW_SHOW);
    }
    break;
    }
    }
    return CDialog::PreTranslateMessage(pMsg);
    }