Как мне установить фокус на CEdit в дочернем диалоговом окне, которое находится внутри TabCtrl?

#c #visual-c #mfc #focus #editbox

#c #visual-c #mfc #фокус #окно редактирования

Вопрос:

У меня есть диалоговое окно (CDialog) с отрисованным владельцем CTabCtrl в нем. Содержимое вкладок — это дочерние диалоги (по одному для каждой вкладки). На каждой вкладке есть CEdit. Когда пользователь нажимает на вкладку, я скрываю все дочерние диалоги с помощью ShowWindow (SW_HIDE) и показываю выбранный.

Проблема в том, что когда у меня есть, например, две вкладки, щелкните внутри окна редактирования на первой вкладке, а затем переключитесь на вторую, фокус ввода остается на этом (невидимом) окне редактирования на первой вкладке, независимо от того, что я делаю в своем коде (пробовал вызывать все методы, которые потенциально могут устанавливать фокус, ничего не изменилось).

Ответ №1:

Попробуйте это:

 GetDlgItem(IDC_YOURCONTROL)->SetFocus();
  

Или соответствующая переменная, связанная с элементом управления:

 m_YOURCONTROLControl.SetFocus();
  

Комментарии:

1. Виден ли элемент управления до установки фокуса? Другой вариант — сначала задать для вкладки (у нее должен быть явный идентификатор) значение itsef, а затем элемент управления.