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.