Здравствуйте, turbocode, Вы писали:
RF>>Как сделать ячейки в таблице (класс CListCtrl) редактируемыми? RF>>Не могли бы вы привести пример кода или дать ссылку на этот пример?
T>Первый пример в гугле
Этот пример у меня не работает. При нажатии на нужную кнопку у меня выделяется вся строка, но никакого появления edit-а у меня нет.
Что мне следут сделать?
Может быть, мне лучше написать свой код? Я знаю, что нужно использовать компонент CEdit для того, чтобы редактировать нужную мне клетку.
Но как это правильно сделать? И какие события мне надо обрабатывать? Какие функции нужно писать? И как мне правильно уничтожать этот edit для при нажатии на клавишу ввода (Enter или Return) или при клике мышкой (одиночным или двойным) на другую клетку таблицы?
1613 г. = 2024 г.
Re[3]: Как сделать ячейки в таблице (класс CListCtrl) редактируемыми?
Здравствуйте, RussianFellow, Вы писали:
RF>Здравствуйте, turbocode, Вы писали:
RF>>>Как сделать ячейки в таблице (класс CListCtrl) редактируемыми? RF>>>Не могли бы вы привести пример кода или дать ссылку на этот пример?
T>>Первый пример в гугле
RF>Этот пример у меня не работает. При нажатии на нужную кнопку у меня выделяется вся строка, но никакого появления edit-а у меня нет.
RF>Что мне следут сделать?
RF>Может быть, мне лучше написать свой код? Я знаю, что нужно использовать компонент CEdit для того, чтобы редактировать нужную мне клетку. RF>Но как это правильно сделать? И какие события мне надо обрабатывать? Какие функции нужно писать? И как мне правильно уничтожать этот edit для при нажатии на клавишу ввода (Enter или Return) или при клике мышкой (одиночным или двойным) на другую клетку таблицы?
Здравствуйте, RussianFellow, Вы писали:
RF>Как сделать ячейки в таблице (класс CListCtrl) редактируемыми?
Вообще, сделать это очень трудно и не стоит даже пытаться объяснить.
(MFC тут кстати и ни при чём, если не будешь использовать его
в реализации, а если будешь, оно особенно сильно не поможет).
При том, что это сделать трудно, КАК это делать ещё очень сильно
зависит от того, ЧТО ты хочешь в итоге получить, потому что
разные наборы фич будут приводить к совершенно разным решениям.
Простейшие в разной степени работающие и неработающие примеры того,
как это сделать, есть на codeguru и других подобных сайтах, 80% из
них -- фуфло не работающее в реальности, но хотя бы демонстрирующее
подходы к решению.
Подход в общем общий один -- сначала ловится нотификация от SysListView32
LVN_BEGINLABELEDIT, что-то такое, потом вычисляется контур ячейки и
создаётся EDITBOX над ListView в этом месте, перекрывающий ячейку,
в него записывается значение из ячейки, затем начинаются пляски с
бубном по ловле выхода из EDITBOX. Принципиально можно делать двумя
путями: модальное выполнение EDITBOX (отдельный message loop), либо
немодальное выполнение EDITBOX, но в обоих случаях нужно ловить
потерю фокуса из EDITBOX и завершать редактирование по этому событию:
брать значение, уничножать EDIT, устанавливать значение обратно в грид,
и всё такое.
Отдельная тема -- это выделение чем-то вроде маркера фокуса ячейки грида,
которая будет редактироваться -- ListView это делать не умеет. Но плюс в том,
что это можно и не делать, активироваться только мышкой. Если делать, то
хрошее решение -- отрисовывать все ячейки грида самому. При этом полезно
данные в гриде тоже не хранить (OWNERDATA стиль).
Всё это настолько геморно, что возможно в итоге ты к концу поймёшь, что
легче было не использовать ListView, а написать грид с нуля самому.
Это тоже нелегко, но хотя бы всё будет твоё и не будет дурацких ограничений.
Re[4]: Как сделать ячейки в таблице (класс CListCtrl) редактируемыми?
(во втором случае--и .zip-файл исходников, и .zip-файл демо)
и выложить их на какой-нибудь открытый сервер (на www.rsdn.org или на любой другой)--а то я забыл свой пароль на www.codeproject.com, а восстановить его не могу.
1613 г. = 2024 г.
Re[5]: Как сделать ячейки в таблице (класс CListCtrl) редактируемыми?