MF C: Как установить фокусировку ящиков CEdit? - PullRequest
2 голосов
/ 31 января 2020

Я работаю над своим первым простым проектом MF C, но я борюсь с одной проблемой: хочу установить фокус всех полей CEdit в одном из диалогов. Моя идея заключается в том, чтобы при открытии диалога фокусировался на первом окне редактирования, а затем переключаться между ними с помощью «табуляции».

Я видел метод SetFocus(), но не смог применить его правильно , Также я не смог найти решение для реализации порядка фокусировки с помощью клавиши c.

Заранее спасибо всем, кто нашел время, чтобы помочь мне!

1 Ответ

3 голосов
/ 31 января 2020

Вы можете установить фокус на данный элемент управления, когда ваше диалоговое окно впервые отображается, вызывая SetFocus в вашей функции OnInitDialog(). Однако, если вы это сделаете, ваш OnInitDialog() должен вернуть FALSE:

BOOL MyDialog::OnInitDialog() {
    CDialog::OnInitDialog(); // Call base class member
    GetDlgItem(IDC_MYEDIT)->SetFocus();
    //..
    return FALSE; // Otherwise, the framework will reset the focus to its default
}

Из документации M / S :

Возвращаемое значение Указывает, установило ли приложение фокус ввода для одного из элементов управления в диалоговом окне. Если OnInitDialog возвращает ненулевое значение, Windows устанавливает фокус ввода в положение по умолчанию, первый элемент управления в диалоговом окне. Приложение может вернуть 0, только если оно явно установило фокус ввода на один из элементов управления в диалоговом окне.

...