![]() |
|
Модераторы: feodorv, GremlinProg, xvr, Fixin |
![]()
|
|
| suxxor |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 97 Регистрация: 14.10.2010 Репутация: нет Всего: нет |
На окне присутствует ComboBox с уже заполненными строками, как сделать чтобы при вводе текста в ComboBox для автозавершения по введённой строке?
К примеру ввожу "String" и он выдаёт все подходящие варианты из существующего списка (например "String Get") ![]() Нашёл только примеры на Delphi, C# на встроенных библиотеках, а нужно на WinAPI Это сообщение отредактировал(а) suxxor - 3.8.2011, 23:18 |
|||
|
||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 33 Всего: 183 |
Да вроде бы ничего сложного:
Обрабатывай ввод символа (скажем, уведомление EN_CHANGE на комбобоксе, если сабклассишь его, либо CBN_CHANGED). В обработчике пытаешься найти подходящий элемент списка; если нашел - выводи в редактор комбобокса (SetWindowText), но сначала запомни текущую позицию, чтобы поставить выделение с этого символа до конца строки. -------------------- ... |
|||
|
||||
| suxxor |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 97 Регистрация: 14.10.2010 Репутация: нет Всего: нет |
это не понимаю |
|||
|
||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 33 Всего: 183 |
Тебе нужно поставить выделение, начиная с символа, который пользователь не вводил, до конца строки, чтобы при следующем вводе оно заменилось на новый введенный символ. Выделение ставится через сообщение EM_SETSEL, параметром является диапазон. Если пользователь ввел, как на картинке "fr", т.е. 2 символа, то текущая позиция 2, надо выделять с 2 до конца строки. Другими словами, текущую позицию ты получаешь, просто спросив длину введенной пользователем строки.
-------------------- ... |
|||
|
||||
| suxxor |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 97 Регистрация: 14.10.2010 Репутация: нет Всего: нет |
|
|||
|
||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 33 Всего: 183 |
1) Для начала посмотреть в MSDN и понять кто посылает WM_NOTIFY, а кто WM_COMMAND.
2) Уведомление CBN_EDITCHANGE, да. 3) Что делать - все расписано в предыдущих постах. Задавай конкретные вопросы. Уж извини, полный ликбез в программу мероприятий не входит, это сам. -------------------- ... |
|||
|
||||
| suxxor |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 97 Регистрация: 14.10.2010 Репутация: нет Всего: нет |
Извиняюсь, привык что notify обрабатывать в WM_NOTIFY
Это сообщение отредактировал(а) suxxor - 4.8.2011, 19:32 |
|||
|
||||
| spyswamp |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 349 Регистрация: 18.8.2006 Репутация: нет Всего: 7 |
suxxor, "че тут делать"?
1. Получить введенный текст. 2. В цикле по всем элементам комбо-бокса найти первый, который начинается с введенного текста (case insensitive, само-собой). 3. Получить длину введенного текста. 4. Вставить найденный текст в строку ввода комбо-бокса. 5. Выделить текст в поле ввода комбо-бокса начиная с "длина строки" (ты его запомнил в пункте 3) и до конца строки (-1, либо общая длина уже выведенного текста - как больше нравится). Вот и весь алгоритм, камрад. Читай MSDN. Тебя должно интересовать: - получение введенного текста, - цикл по элементам комбо-бокса, - взятие текста у элемента комбо-бокса, - изменение введенного текста, - выделение введенного текста. Дерзай, емана! -------------------- - why you call it beta? - cuz it's betta then nothin' |
|||
|
||||
| Antonsaer |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 6 Регистрация: 16.8.2011 Репутация: нет Всего: нет |
||||
|
||||
| spyswamp |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 349 Регистрация: 18.8.2006 Репутация: нет Всего: 7 |
Ну слава богу.
-------------------- - why you call it beta? - cuz it's betta then nothin' |
|||
|
||||
| Dem_max |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1780 Регистрация: 12.4.2007 Репутация: 16 Всего: 39 |
кидай код сюда
-------------------- Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte") |
|||
|
||||
| suxxor |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 97 Регистрация: 14.10.2010 Репутация: нет Всего: нет |
Antonsaer, код в студию!
а можно заставить саму ОС это делать (через COM-интерфейс) How to Enable Autocomplete Manually (MSDN) вопрос - как использовать IEnumString в вышеуказанном примере? Это сообщение отредактировал(а) suxxor - 25.8.2011, 01:51 |
|||
|
||||
| Dem_max |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1780 Регистрация: 12.4.2007 Репутация: 16 Всего: 39 |
А зачем ОС заставлять то ? Может поддержка в ОС с Win 7 тока.
-------------------- Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte") |
|||
|
||||
| suxxor |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 97 Регистрация: 14.10.2010 Репутация: нет Всего: нет |
Хмммм.... по сути за нас итак чуть более чем всё делает сама ОСЪ, просто некоторым это не видно (или просто не знают). Класс поддерживается начиная с windows 2k |
|||
|
||||
| spyswamp |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 349 Регистрация: 18.8.2006 Репутация: нет Всего: 7 |
Я бы не стал использовать COM вообще. Нигде.
-------------------- - why you call it beta? - cuz it's betta then nothin' |
|||
|
||||
![]()
|
| Правила форума "C/C++: Системное программирование и WinAPI" | |
|
|
На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы . Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |