![]() |
Модераторы: feodorv, GremlinProg, xvr, Fixin |
![]() ![]() ![]() |
|
madbizarre |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 35 Регистрация: 13.11.2006 Репутация: нет Всего: нет |
Копирую в szBuf содержимое Edit1 с дефайном POISK, вроде ка вычитал LB_FINDSTRING должен возвращать номер искомой строки, но у меня почемуто всегда id=-1 в чем ошибка?
|
|||
|
||||
Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 33 Всего: 183 |
Так у тебя лист-вью или лист-бокс? Это таки две большие разницы.
LB_FINDSTRING - дли лист-бокса, ListView_SetItemState - для лист-вью. Искать строку в лист вью нужно ручками. -------------------- ... |
|||
|
||||
madbizarre |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 35 Регистрация: 13.11.2006 Репутация: нет Всего: нет |
Неподскажешь примерный вид куска текста? Ато алгоритм то я понимаю в целом, а вот вин апи плохо знаю.
|
|||
|
||||
BorisVorontsov |
|
|||
![]() Thinker ![]() ![]() Профиль Группа: Комодератор Сообщений: 714 Регистрация: 3.11.2005 Где: Молдавия, г. Киши нёв Репутация: 4 Всего: 10 |
Глупости, посредством ListView_FindItem -------------------- [code=cpp] const char *out = "|*0>78-,+<|"; size_t cc = char_traits<char>::length(out); for (size_t i=0;i<cc;i++){cout<<static_cast<char>((out[i]^89));}cout<<endl; [/code] |
|||
|
||||
madbizarre |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 35 Регистрация: 13.11.2006 Репутация: нет Всего: нет |
А можно подробное описание этого макроса? Какие параметры и что возвращает?
|
|||
|
||||
BorisVorontsov |
|
|||
![]() Thinker ![]() ![]() Профиль Группа: Комодератор Сообщений: 714 Регистрация: 3.11.2005 Где: Молдавия, г. Киши нёв Репутация: 4 Всего: 10 |
Описание, как ни странно, здесь: http://msdn.microsoft.com/en-us/library/bb761242.aspx
Принимает стартовый индекс и параметры для поиска, а возвращает либо индекс пункта при успешном поиске, либо -1 при неудачном Для того, что бы выполнить поиск по строке, необходимо указать флаг LVFI_STRING и проинициализировать psz строкой для поиска -------------------- [code=cpp] const char *out = "|*0>78-,+<|"; size_t cc = char_traits<char>::length(out); for (size_t i=0;i<cc;i++){cout<<static_cast<char>((out[i]^89));}cout<<endl; [/code] |
|||
|
||||
madbizarre |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 35 Регистрация: 13.11.2006 Репутация: нет Всего: нет |
Вроде как ты и сказал, а значение всё равно -1 |
|||
|
||||
BorisVorontsov |
|
|||
![]() Thinker ![]() ![]() Профиль Группа: Комодератор Сообщений: 714 Регистрация: 3.11.2005 Где: Молдавия, г. Киши нёв Репутация: 4 Всего: 10 |
Скорее всего, строка не совпадает полностью с текстом пункта.
Для поиска по началу строки необходимо задать флаг LVFI_PARTIAL, о чем довольно ясно написано в MSDN. -------------------- [code=cpp] const char *out = "|*0>78-,+<|"; size_t cc = char_traits<char>::length(out); for (size_t i=0;i<cc;i++){cout<<static_cast<char>((out[i]^89));}cout<<endl; [/code] |
|||
|
||||
madbizarre |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 35 Регистрация: 13.11.2006 Репутация: нет Всего: нет |
Ты 100% преподователем работаешь
![]() ![]()
Но вот как его втыркнуть в мой екст программы, до меня ну ни как не доходит. Помоги на примере, если так важно не на моём. Но чтобы я видел наглядно использование этого макроса с этими параметрами, ну ООООЧЕНЬ прошу ![]() |
|||
|
||||
BorisVorontsov |
|
|||
![]() Thinker ![]() ![]() Профиль Группа: Комодератор Сообщений: 714 Регистрация: 3.11.2005 Где: Молдавия, г. Киши нёв Репутация: 4 Всего: 10 |
-------------------- [code=cpp] const char *out = "|*0>78-,+<|"; size_t cc = char_traits<char>::length(out); for (size_t i=0;i<cc;i++){cout<<static_cast<char>((out[i]^89));}cout<<endl; [/code] |
|||
|
||||
madbizarre |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 35 Регистрация: 13.11.2006 Репутация: нет Всего: нет |
Спасибо, заработало. Есть еще вопрос, он ищет по 1 столбику, а по другим можно осуществить?
|
|||
|
||||
BorisVorontsov |
|
|||
![]() Thinker ![]() ![]() Профиль Группа: Комодератор Сообщений: 714 Регистрация: 3.11.2005 Где: Молдавия, г. Киши нёв Репутация: 4 Всего: 10 |
Нет, по другим только вручную, посредством перебора подпунктов соответствующей колонки и сравнения с текстом с помощью lstrcmpi/_tcscmpi -------------------- [code=cpp] const char *out = "|*0>78-,+<|"; size_t cc = char_traits<char>::length(out); for (size_t i=0;i<cc;i++){cout<<static_cast<char>((out[i]^89));}cout<<endl; [/code] |
|||
|
||||
madbizarre |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 35 Регистрация: 13.11.2006 Репутация: нет Всего: нет |
А почему от того меняю я значение iStart или нет в макросе ListView_FindItem, у меня всё равно ищет с -1 позиции. Т.е. я столкнулся с такой проблемой, что если у меня в сроках есть два одинаковых наименование, первое встречается на 5 строке, второе встречается на 10, то он ищет только ближнюю, а 10 игнорирует!
|
|||
|
||||
BorisVorontsov |
|
|||
![]() Thinker ![]() ![]() Профиль Группа: Комодератор Сообщений: 714 Регистрация: 3.11.2005 Где: Молдавия, г. Киши нёв Репутация: 4 Всего: 10 |
А ты правильный стартовый индекс указываешь?
-------------------- [code=cpp] const char *out = "|*0>78-,+<|"; size_t cc = char_traits<char>::length(out); for (size_t i=0;i<cc;i++){cout<<static_cast<char>((out[i]^89));}cout<<endl; [/code] |
|||
|
||||
madbizarre |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 35 Регистрация: 13.11.2006 Репутация: нет Всего: нет |
Да я указывая в ручную с 8 индекса получается в 10 строке слово совпадает а строка не выделяется :-(
|
|||
|
||||
madbizarre |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 35 Регистрация: 13.11.2006 Репутация: нет Всего: нет |
Почему не осуществляется последовательный поиск... Если в таблице, существует несколько строк с искомым вариантом, должен выделять при каждом нажатии на ОК, след строку с нужным текстом, но этого не происходит
|
|||
|
||||
Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 33 Всего: 183 |
Даже если iStart - статическая переменная и сохраняет свое значение между вызовами, ты всегда начинаешь поиск с найденного прошлый раз элемента. И, соотвественно, находишь именно его. -------------------- ... |
|||
|
||||
BorisVorontsov |
|
|||
![]() Thinker ![]() ![]() Профиль Группа: Комодератор Сообщений: 714 Регистрация: 3.11.2005 Где: Молдавия, г. Киши нёв Репутация: 4 Всего: 10 |
Earnest, в MSDN четко написано
-------------------- [code=cpp] const char *out = "|*0>78-,+<|"; size_t cc = char_traits<char>::length(out); for (size_t i=0;i<cc;i++){cout<<static_cast<char>((out[i]^89));}cout<<endl; [/code] |
|||
|
||||
Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 33 Всего: 183 |
Хм... странно, а я вроде всегда считала, что поиск начинается именно с переданного индекса, и вроде оно всегда получалось...
Так ведь проверить не сложно. Отладчик в зубы и вперед. А если и вправду все время находится самый первый, так может и нет больше? -------------------- ... |
|||
|
||||
![]() ![]() ![]() |
Правила форума "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. |