|
|
| Посл.отвђт | Сообщенiе |
|
|
Дата: Июн 25, 2004 21:22:08 В C++ Builder есть такая возможность, что щёлкаешь по ListView, и выделяется вся строчка, а вот как сделать также на обычных WinAPI функциях не пойму, подскажите please.. |
|
|
Дата: Июн 25, 2004 21:44:17 LVS_EX_FULLROWSELECT? |
|
|
Дата: Июн 25, 2004 22:29:20 Спасибо. Только пришлось msdn на сайте MS копать, SetWindowLong не работал, нашёл там сообщение LVM_SETEXTENDEDLISTVIEWSTYLE, и теперь всё работает. |
|
|
Дата: Июн 26, 2004 00:10:21 Я дико извиняюсь за лекгий офф-топ, но раз уж зашла речь о ListView... Можно ли в ListView сделать edit чайлдов без сабклассинга? В каких-то примерах, то ли с васма, то ли с masm32, есть такая штука, но там сабклассинг. Без него можно? |
|
|
Дата: Июн 26, 2004 02:15:16 _DEN_ Вот какой я вариант придумал: 1. При LVN_BEGINLABELEDIT смотрим, куда юзер тыкнул мышкой, если он попал по сабитему, то в некоторой переменной запоминаем индекс сабитема, после чего сабклассим стандартный EDIT (тот, который получаем через LVM_GETEDITCONTROL). В нем вместо текста итемаподставляем текст сабитема и передвигаем его в нужное положение. 2. Отслеживаем WM_WINDOWPOSCHANGING и не даем контролу резайзить EDIT, а делаем это при необходимости сами. 3. При LVN_ENDLABELEDIT смотрим значение в глобальной переменной. Если оно ненулевое(т.е., редактировался не итем, а сабитем), то присваиваем соотвествующему сабитему новый текст, а потом возвращаем ноль, чтобы контрол не присвоил этот текст основному итему. Работает прекрасно. Можешь пользоваться. Только копирайт укажи :))) |
|
|
Дата: Июн 26, 2004 02:27:25 Toxic Это же сабклассинг... Лень... :-) Я вот думаю, может LVS_EX_FULLROWSELECT и просто отлов edit окна, после чего MoveWindow и все? |
|
|
Дата: Июн 26, 2004 02:34:47 _DEN_ Это же сабклассинг... Лень... :-) Ну ты даешь! Хоть что-то же надо сделать. Само по себе оно с неба не свалится. Это вариант граздо легче, чем создавать свой EDIT и сабклассить ListView. Я вот думаю, может LVS_EX_FULLROWSELECT и просто отлов edit окна, после чего MoveWindow и все? Ты хочешь получить именно тот результат, который я описал. Но только ты сам не знаешь как его реализовать, а я тебе уже готовый алгоритм описал. Так что, вперед за орденами! :) |
|
|
Дата: Июн 26, 2004 03:27:32 Toxic Но только ты сам не знаешь как его реализовать Папаша, что за тон? Я ничего сабклассить не хочу. Хотелось бы обойтись тремя-четыремя функциями... Вообщем, попробую - посмотрим. |
|
|
Дата: Июн 26, 2004 04:11:40 _DEN_ Папаша, что за тон? OK. Я уточню: судя по фразам "Я вот думаю", "может", "и все?" я сделал вывод, что ты еще не знаешь, как его конеретно реализовать. Ну а раз ты ни в какую не хочешь сабклассить, не буду настаивать. Время покажет. |
|
|
Дата: Июн 26, 2004 06:48:37 _DEN_ >Хотелось бы обойтись тремя-четыремя функциями... не по джедайски это =) Я ничего сабклассить не хочу. Так и на фиг не надо! Сделай суперклассинг и все. |
|
|
Дата: Июн 26, 2004 14:25:02 LVS_EDITLABELS |
|
|
Дата: Июн 26, 2004 21:54:04 hGoblin Прямо в точку))) Хоть бы мой первый пост прочитал... |
|
|
Дата: Июн 27, 2004 07:25:16 · Поправил: hGoblin Разве его нужно сабклассировать? :( Не вижу никаких сложностей. When label editing is canceled or completed, a list view control sends its parent window an LVN_ENDLABELEDIT notification message. The parent window is responsible for updating the item label if it keeps the new label. Три-четыре функции, как заказывали. Получил сообщение, отправил LVM_SETITEM. Никакого сабклассинга. Что не нравится? |
|
|
Дата: Июн 27, 2004 13:15:12 hGoblin Мать моя женщина... Редактироваться будут только Items, но не SubItems! Редактирование SubItems, делается вручную, что тут и обсуждалось. Создай ListView в виде LVS_REPORT и попробуй поредактировать SubItems |
|
|
Дата: Июн 27, 2004 17:13:51 Нда. Не вник что значит "edit чайлдов". За ликбез спасибо. |
|
Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.066 |