| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Visual C++/MFC/WTL > можно ли такое через ListView |
| Автор: NPU_gh0st 6.12.2007, 11:38 |
можно ли такое(как на рисунке) сделать через ListView (не через DBGrid), не хочу через DBGrid так как на него у меня нет описания вообще. прошу сказать возможно ли такое вообще, а если да, то как. Или иной способ динамично менять ширину строк в ListView. Если нет, то посоветуйте что нибудь. Или подкиньте ссылку на нормальное описалово DBGrid. |
| Автор: Greeen 6.12.2007, 15:10 |
| http://www.firststeps.ru/mfc/steps/r.php?367 |
| Автор: NPU_gh0st 7.12.2007, 04:15 |
| Спасибо конечно (дал бы тебе +, да сообщений мало). Но я бы хотел узнать такое вообще возможно на ListView??? так как проект уже напислан с использованием этого элемента, но тут вдруг понадобилось менять ширину строки... Не хотелось бы все переписывать из-за такой мелочи. Что вы мне можете посоветовать??? |
| Автор: Earnest 7.12.2007, 09:03 |
| Теоретически можно, разными способами. 1) SetItemImage для каждого итема (картинка - это серая кнопка или серая кнопка со стрелкой). 2) Полный OwnerDraw Но я бы посоветовала разобраться с гридом. Потому что у тебя именно грид, а не список. И может оказаться, что завтра "вдруг" потребуется еще что-то, что лист-вью стандартно не поддерживает. |
| Автор: NPU_gh0st 7.12.2007, 11:33 |
| Earnest, спасибо за варианты. вопросы по твоим советам: 1) а можно будет с помощью картинки менять ширину строки. 2) Полный OwnerDraw (извени но не знаю что это такое еще не встречал) - что это??? может это стиль LVS_OWNERDRAWFIXED, если да то что дальше??? (хотя я думая вряд ли) минус Grida это то что его прийдется учить искать карту откликов этого элемента (к примеру на перетаскивание, или упорядовачивания по нажатию заголовка) , сделать так чтобы выделялась только строка и т.д. А кроме как изменения ширины строки от грида ничего не нужно, может даже и стрелочка не обязательна, главное чтобы размер строки можно было поменять наведя курсор на разделительную линию (как у Grid) |
| Автор: Earnest 7.12.2007, 14:30 |
| 1) Что ты подразумеваешь по шириной строки? Если высоту, то да. Собственно, только с помощью картинок ее и можно изменить (по крайней мере я другого способа не знаю). Однако имей ввиду, что высота строки одинаковая для всех элементов: она определяется высотой картинок в image-list. А если это размер поля по горизонтали, то вообще не понимаю, в чем проблема: если есть хедер, то меняй себе этот размер сколько угодно, это стандартное поведение. 2) Да, это стиль LVS_OWNERDRAWFIXED. А дальше ты должен полностью сам отрисовать каждый итем в виртуальной функции DrawItem - учитывая все его состояния, которые туда передаются. 3) Есть еще один способ кастомизации отображения: CustomDraw. Он несколько проще, чем OwnerDraw, т.к. можно выбирать - это я рисую, а здесь пусть Windows парится. Однако, его гибкость гораздо меньше. Выполняется это через обработку сообщения WM_NOTIFY с кодом NM_CUSTMODRAW. Все это несложно, но достаточно громоздко, в двух словах не опишешь. Ищи примеры и разбирайся (например, на codeproject), будут конкретные вопросы - задашь. |
| Автор: NPU_gh0st 9.12.2007, 11:01 |
| Earnest, спасибо буду искать примеры (если не сложно не кинишь ссылку на опред. пример, где это есть, желательно методов 2 и 3). 1) да это высота 2) и 3) а с их помощью можно будет поменять высоту одной строки??? еще раз спасибо |
| Автор: Earnest 11.12.2007, 18:34 |
| Т.е. ты предлагаешь мне вместо тебя поискать? Нет у меня готовых ссылок. Помню, что видела на codeproject упоминания, поэтому и советую. Там достаточно простая классификация - можно по контролам искать, или по ключам LVS_OWNERDRAWFIXED или NM_CUSTOMDRAW. 2) и 3) - нельзя. Высота у всех строк будет одинаковая. Хочешь разную - пользуйся гридом. |