none
Предотвращение выделения текста в EDIT RRS feed

  • Вопрос

  • Добрый день!

    В моем приложении на Win32 API используется диалоговое окно с элементом EDIT. Когда оно открывается, этот самый EDIT, первый в очереди переходов, получает фокус, и весь текст в нем выделяется. Как  мне этого избежать?

    21 марта 2011 г. 11:37

Ответы

  • Тогда можно написать свой обработчик события WM_FOCUS для EDITa, в котором тескбоксу отправлять сообщение о снятии выделения или установить курсор в нужную позицию (например в начало). Для последнего случая событие WM_SETCURSOR.

    • Помечено в качестве ответа Abolmasov Dmitry 22 марта 2011 г. 13:29
    21 марта 2011 г. 13:10

Все ответы

  • Окно создается как ресурс? Если так, то в 2005/2008 студии (2010 в данный момент под рукой нет) порядок элементов устанавливается прощёлкиванием в нужном порядке контролов.
    Сначала надо включить режим нумерации: Menu -> Format -> Tab Order (Ctrl+D)

    http://cid-af1ee52481705fa4.photos.live.com/self.aspx/%D0%9A%D0%B0%D1%80%D1%82%D0%B8%D0%BD%D0%BA%D0%B8/ss1.gif

    21 марта 2011 г. 12:22
  • Ресурс. Да дело не в порядке элементов управления. Когда EDIT получает фокус, весь текст в нем выделяется. Я снимаю выделение, табом перехожу к другому элементу диалога, затем табом опять-таки обратно. И снова выделяется весь текст. Как этого избежать?
    21 марта 2011 г. 12:55
  • Тогда можно написать свой обработчик события WM_FOCUS для EDITa, в котором тескбоксу отправлять сообщение о снятии выделения или установить курсор в нужную позицию (например в начало). Для последнего случая событие WM_SETCURSOR.

    • Помечено в качестве ответа Abolmasov Dmitry 22 марта 2011 г. 13:29
    21 марта 2011 г. 13:10
  • Неужели нет способа попроще? Какой-нибудь элемент стиля контрола?
    21 марта 2011 г. 15:52
  • Другие методы мне не знакомы. Может кто другой подскажет. Я вообще с ресурсами не заморачивался и создавал контролы кодом.
    22 марта 2011 г. 8:58
  • Другого способа вроде бы и нет


    Для связи [mail]
    22 марта 2011 г. 13:29
  • Добрый вечер, Zemoh

    Возможно Вам ничего не надо делать с EDIT в Вашем диалоге.

    (Если, конечно, Вы не пишете увлекательную игру "Найди фокус")

    Протестируйте по Вашему алгоритму (TAB) диалоги других программ.

    (Например, "Открыть файл" VS 2010 или "Изменить палитру" Paint.)

    Выделение текста в этих диалогах, происходит также как и в Вашем диалоге.

    Пользователи Windows к этому уже привыкли.

    --------------------------------------

    Можно дополнительно протестировать EDIT Вашего диалога по алгоритму (Alt+Backspace или Ctrl-Z) при редактировании текста.

    //Инициализируем EDIT Диалога и инициируем передачу фокуса EDIT
    	case WM_INITDIALOG:
    		SetWindowText(GetDlgItem(hDlg,IDC_EDIT),_T("Текст в EDIT"));
    		PostMessage(hDlg,WM_SETFOCUS,NULL,0);
    		return (INT_PTR)TRUE;
    
    	case WM_SETFOCUS:
    		SetFocus(GetDlgItem(hDlg,IDC_EDIT));
    		return (INT_PTR)TRUE;
    

    23 марта 2011 г. 20:43
  • Не понял, зачем эти трюки с передачей фокуса? Edit и так получает фокус при открытии диалога, если он первый в очереди переходов.
    24 марта 2011 г. 10:55
  • Добрый вечер, Zemoh!

    Я тоже не понял зачем Вам какие-то трюки в Вашем приложении.

    Просто до меня Вам уже помогали разобраться с Вашей проблемой Skimin0k и Abolmasov Dmitry.

    Они Вам уже показали способы управления EDIT в диалогах.

    --------------------------------------

    Я понял, что в Вашем приложениии EDIT сразу получает фокус.

    Приведён пример кода, построенного Visual Studio:

    Обработчик сообщений для окна "О программе", в который я добавил строки управления EDIT,

    обеспечивающие отсутствие выделения текста после инициализации этого диалога.

    В этом диалоге (диалог "О программе" с добавленным EDIT) - первой в очереди переходов стоит кнопка "OK".

    24 марта 2011 г. 20:19