在VC6-MFC中按下ENTER键时的TAB效果

时间:2011-01-24 05:58:30

标签: visual-c++ mfc vc6

我想在多个文本框上实现TAB效果。在文本框中输入值然后按下回车键时,焦点应自动移动到下一个文本框(与在文本框中按焦对焦的TAB键相同)。目前我正在尝试在PreTranslateMessage()中使用这段代码:

if ( (pMsg->wParam == VK_RETURN) )
{
   if( m_CeditCtrlLlaLatDegrees.GetFocus() )
    {
          keybd_event( VK_TAB,0x09,0,0);
         // keybd_event( VK_TAB,0x09,KEYEVENTF_KEYUP,0);

    }
}

以上代码将焦点推到下一个直接文本框后面的文本框中(即 它向前移动2个标签)有20个文本框全部来自CEdit,并且所有文本框都只接受数值。

如何检索每个文本框的ID?我尝试分配CEdit(控制变量)并访问每个文本框的ID,然后通过switch-case语句,我将检查哪个文本框处于活动状态,然后将SetFocus()检查到下一个文本框(PreTranslateMessage()中的所有这些)。但即使这样也行不通。

请建议一种方法让这个工作。由于我是新手,请让我详细了解流程/代码。

1 个答案:

答案 0 :(得分:3)

这应该可以达到你想要的效果:

BOOL CMyDialog::PreTranslateMessage(MSG* pMsg )
{
    if (pMsg->message == WM_KEYDOWN && pMsg->wParam == VK_RETURN)
    {
        CWnd* pFocus = GetFocus();
        if (pFocus && pFocus->IsKindOf(RUNTIME_CLASS(CEdit)))
        {
            NextDlgCtrl();
            return TRUE;
        }
    }


    return CDialog::PreTranslateMessage(pMsg);
}