CEdit control MFC, помещая курсор в конец строки после SetWindowText
Я использую VC9, у меня есть элемент управления CEdit, содержимое которого reset по умолчанию (скажем - "заполнение" ) одним нажатием кнопки, а затем я вызываю SetFocus для элемента CEdit. Проблема в том, что курсор мигает в начале текста по умолчанию, и я хочу, чтобы он мигал конец строки по умолчанию.
Как это можно сделать?
Ответы
Ответ 1
Вы можете использовать CEdit :: SetSel для этого.
Пример:
CEdit* e = (CEdit*)GetDlgItem(IDC_EDIT1);
e->SetWindowText("hello world");
e->SetFocus();
e->SetSel(0,-1); // select all text and move cursor at the end
e->SetSel(-1); // remove selection
Ответ 2
Вы можете использовать CEdit::SetSel
для выполнения этого:
CEdit* e = (CEdit*)GetDlgItem(IDC_EDIT1);
e->SetWindowText("hello world");
// e->SetSel(0,-1); // you don't need this line
e->SetFocus();
e->SetSel(-1);
Поместит курсор в конец строки.
Ответ 3
У меня было странное открытие, но все еще имело к этому отношение.
Это решение не сработало для меня изначально. Даже после вызова SetSel (-1) мой курсор перемещался в начало поля редактирования.
Затем я сделал перестановку кода и начал работать.
Обучение состояло в том, что если я обновляю любой другой элемент управления после обновления элемента управления редактированием, курсор переместится в начало поля редактирования. Но если поле редактирования обновляется последним, курсор остается в конце поля редактирования.
Как у меня был код, похожий на
- Добавить текст для редактирования и вызова SetSel (-1)
- обновить статический контроль
И курсор не останется в конце. Но когда я изменил его на
- обновить статический контроль
- Добавить текст для редактирования и вызова SetSel (-1)
Мой курсор был отображен в конце поля редактирования.
У меня было это на уме с того дня, когда у меня было это открытие, чтобы обновить базу знаний здесь. Надеюсь, что это поможет случайной душе, чей курсор прыгает в верхней части окна редактирования даже после вызова API.