Как установить начальный фокус элемента управления в конкретном окне?
Я создал приложение, в котором я использую оконную процедуру, чтобы отслеживать все элементы управления в окне.
У меня вопрос, как мне изначально установить фокус на первый созданный элемент управления в окне?
1 ответ
Есть два способа установить начальный фокус на конкретный элемент управления в MFC.
Первый и самый простой метод заключается в использовании порядка табуляции ваших элементов управления. Когда вы используете Resource Editor в 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
метод конкретного контроля. Рэймонд Чен объясняет здесь в своем блоге, почему это сложнее, и почемуGotoDlgCtrl
функция (или ее эквивалент,WM_NEXTDLGCTRL
сообщение) является предпочтительным.