2011-01-24 3 views
1

Я хотел бы реализовать эффект TAB для нескольких текстовых полей. После ввода значения в текстовое поле, а затем нажатия клавиши ввода, фокус должен быть автоматически перемещен в следующее текстовое поле (так же, как нажатие клавиши TAB с фокусом в текстовом поле). В настоящее время я пытаюсь использовать этот кусок кода в PreTranslateMessage():Эффект TAB при нажатии клавиши ENTER в VC6-MFC

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

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

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

ответ

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

спасибо за ответ .... извините за ответ поздно ..will осуществить это и получить обратно ... Еще раз спасибо – linuxstack

Смежные вопросы