【问题标题】:TAB effect upon Hitting ENTER key in VC6-MFC在 VC6-MFC 中按 ENTER 键时的 TAB 效果
【发布时间】:2011-01-24 05:58:29
【问题描述】:

我想在多个文本框上实现 TAB 效果。在文本框中输入值然后按 Enter 键后,焦点应自动移动到下一个文本框(与在文本框中按下 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() 中)。但即使这样也行不通。

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

【问题讨论】:

    标签: visual-c++ mfc visual-c++-6


    【解决方案1】:

    这应该完成你想要的:

    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);
    }
    

    【讨论】:

    • 感谢您的回答..抱歉回复晚了..将执行此操作并回复...再次感谢
    猜你喜欢
    • 1970-01-01
    • 2012-04-19
    • 2019-08-30
    • 2010-11-03
    • 1970-01-01
    • 2012-01-22
    • 2015-06-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多