Эффект TAB при нажатии клавиши ENTER в VC6-MFC

Я хотел бы реализовать эффект 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, и все они принимают только числовые значения.

Как получить идентификатор для каждого из этих текстовых полей? Я попытался назначить CEdit (управляющая переменная) и получить доступ к идентификатору для каждого текстового поля, затем с помощью оператора switch-case я бы проверил, какое текстовое поле активно, а затем SetFocus() для следующего непосредственного (все это в PreTranslateMessage()). Но даже это не сработает.

Пожалуйста, предложите способ заставить это работать. Пожалуйста, дайте мне знать поток/код подробно, так как я новичок.


person linuxstack    schedule 24.01.2011    source источник


Ответы (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);
}
person Aidan Ryan    schedule 24.01.2011
comment
спасибо за ответ .... извините за поздний ответ .. реализую это и вернусь ... еще раз спасибо - person linuxstack; 02.04.2011