有一排编辑控件,现想用UP键实现焦点上移,使用下段代码每次走两个控件,那位大侠指导一下。还有什么方法可以实现,最好附有程序,在线等待,解决加分。
BOOL CTabDlg::PreTranslateMessage(MSG* pMsg) 
{
if (pMsag->message==KEYDOWN && pMsg->wParam == VK_UP)
{
    keybd_event(VK_SHIFT, 0, 0, 0);      
    keybd_event(VK_TAB, 0, 0, 0);
    keybd_event(VK_TAB, 0, KEYEVENTF_KEYUP, 0);
    keybd_event(VK_SHIFT, 0, KEYEVENTF_KEYUP, 0);}return CDialog::PreTranslateMessage(pMsg);
}

解决方案 »

  1.   

    上面方法的原理是模拟击键,还可能直接通过CWnd *pPrev = GetNextDlgTabItem( GetFocus(), TRUE)得到前一或前N个(多取几次)Tab order的控件,然后GotoDlgCtrl(pPrev),就这么简单!
      

  2.   

    不好意思哦
    还是两个是不是不能用在PreTranslateMessage中啊?
    为什么我用OnKeyDown函数检测不到呢?
      

  3.   

    if (pMsag->message==WM_KEYDOWN && pMsg->wParam == VK_UP)
    {
        keybd_event(VK_SHIFT, 0, 0, 0);      
        keybd_event(VK_TAB, 0, 0, 0);
        keybd_event(VK_TAB, 0, KEYEVENTF_KEYUP, 0);
        keybd_event(VK_SHIFT, 0, KEYEVENTF_KEYUP, 0);
        return TRUE;
    }