· Начало · Отвђтить · Статистика · Поиск · FAQ · Правила · Установки · Язык · Выход · WASM.RU · Noir.Ru ·

 WASM Phorum —› WASM.WIN32 —› Полное выделение строчки в ListView

. 1 . 2 . >>

Посл.отвђт Сообщен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 чайлдов". За ликбез спасибо.

. 1 . 2 . >>


Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.066