Ответ 1
Есть два способа установить начальный фокус на конкретный элемент управления в MFC.
-
Первый и самый простой способ - использовать порядок вкладок ваших элементов управления. Когда вы используете редактор ресурсов в Visual Studio для вывода диалогового окна, вы можете назначить каждому элементу указатель табуляции. Элемент управления с наименьшим индексом вкладки автоматически получит начальный фокус. Чтобы установить порядок вкладок ваших элементов управления, выберите "Заказ табуляции" в меню "Формат" или нажмите Ctrl + D.
-
Второй, немного более сложный метод - переопределить функцию
OnInitDialog
в классе, представляющем ваше диалоговое окно. В этой функции вы можете установить фокус ввода на любой элемент управления, а затем вернутьFALSE
, чтобы указать, что вы явно задали фокус ввода одним из элементов управления в диалоговом окне. Если вы вернетесьTRUE
, структура автоматически устанавливает фокус в местоположение по умолчанию, описанное выше, как первый элемент управления в диалоговом окне. Чтобы установить фокус на определенный элемент управления, вызовите методGotoDlgCtrl
и укажите свой элемент управления. Например:BOOL CMyDialog::OnInitDialog() { CDialog::OnInitDialog(); // Add your initialization code here // ... // Set the input focus to your control GotoDlgCtrl(GetDlgItem(IDC_EDIT)); // Return FALSE because you manually set the focus to a control return FALSE; }
Обратите внимание, что вы должны не устанавливать фокус в диалоговом окне, просто называя метод
SetFocus
конкретного элемента управления. Raymond Chen объясняет здесь в своем блоге, почему это сложнее, и почему функцияGotoDlgCtrl
(или ее эквивалент, сообщениеWM_NEXTDLGCTRL
) является предпочтительным.