Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Visual C++/MFC/WTL > про CListCtrl в стиле Report


Автор: Dreamer_0x01 14.4.2005, 15:37
Скажите пожалуйста, можно ли получить указатель вида CWnd* конкретной ячейки СListCtrl, отображенного в виде Report?
Нужно для того, чтобы в каждую ячеечку добавить своих контролов и имеджев. Или это будет похоже на извращение и следует вместо CListCtrl использовать что-то еще?

Спасибо.

Автор: Step 14.4.2005, 17:31
нет внд для конкретной ячейки нужно переопределять драв методы... более скажу драв метод можно переопределить для всей строки а не для ячейки, для ячейки нужно получать координаты строки делать запрос в хеадербар для получение ширины ячеек и выщитывать координаты ячейки

с имеджами это элементарно, с контролами по сложнее.. но тоже можно... на следующей недели буду сам такое писать, слава богу опыт есть... только я полностью свой лист буду писать т.к. с преобразование листа я уже намучался в доволь....

Автор: Dreamer_0x01 14.4.2005, 17:46
Спасибо. Нда, не зря у меня было предчувствие, что это будет муторно.
Придется тоже самому класс написать, что-то подобное реализующее...

Автор: Step 14.4.2005, 19:02
Dreamer_0x01, я уже две недели хожу обдумываю все тонкости

Автор: Coocky 14.4.2005, 22:28
Dreamer_0x01
Ты не правильно подходишь к теме.
Что тебе надо?Отобразить котнролы в ячейках?Без проблем.Отобразить своим цветом?Без проблем..
Пиши-дам код в пару строчек,или смотри в поиске Маленькие тайны.МФС.
Добавлено @ 22:29
Step
Да перестань ты..Какие там тонкости.. smile
Давай в приват-помогу.

Автор: Step 14.4.2005, 22:36
Coocky, я хочу реализовать гораздо более сложною структуру, с потдержко групп, сложных групп, а не те что заложены в этом элементе для хп, также с прямой потдержкой контролов в ячейках, вообщем идея в том что кроме этого элемента, больше в принципе ничего и не надо будет даже сплитеров, рамок, и т.д. и т.п.

Автор: chipset 14.4.2005, 22:39
Цитата(Coocky @ 14.4.2005, 12:28)
Отобразить котнролы в ячейках?Без проблем

Может кинешь куском кода?

Цитата(Step @ 14.4.2005, 12:36)
Coocky, я хочу реализовать гораздо более сложною структуру, с потдержко групп, сложных групп, а не те что заложены в этом элементе для хп, также с прямой потдержкой контролов в ячейках, вообщем идея в том что кроме этого элемента, больше в принципе ничего и не надо будет даже сплитеров, рамок, и т.д. и т.п.

Не проще ли свой написать CListCtrl

Автор: Step 14.4.2005, 22:43
Цитата(chipset @ 14.4.2005, 22:39)
Не проще ли свой написать CListCtrl

вот именно его я и буду писать

свой сплитервнд я уже написал.. попродвинутей получилось.... вернее я целый движок написал... мутная система получилась но продвинутая.....

Автор: Dreamer_0x01 15.4.2005, 08:14
Цитата

Что тебе надо?Отобразить котнролы в ячейках?Без проблем.Отобразить своим цветом?Без проблем..


Что мне надо:
Нарисовать ClistCtrl в три столбца.
В первом столбце должны быть Чекбоксы в стиле баттонов.
Во втором - Комбобоксы.
В третьем - объекты моего класса, наследованые от CWnd (либо Сdialog, если так легче),в которых в зависиости от состояния комбобоксов буду рисовать либо текст, либо имиж. Но это уже тонкость, мне самое главное получить этот самый указатель на CWnd конкретной ячейки. Но как мне уже сказал Step , ячейка не является окошком, вот это уже хуже.

Цитата
Маленькие тайны.МФС.

а не подскажите мне, непросвещенному чайнику, что это за ресурс?

Автор: Step 15.4.2005, 09:01
Coocky, может подскажешь как высото строки поменять

Автор: Dreamer_0x01 15.4.2005, 09:03


"CListCtrl. Редактируем внутри."
Coocky - ты про эту статью говорил?

Да,безусловно это хорошая статья.
Но тут у тебя ресуется один контрол в момент клика, и рисуется поверх ячейки ЦЛистКонтрола
А мне надо чтобы все разом нарисовались. И в момент скролинга тоже чтобы все как надо перерисовывались, причем краешки не полностью влезающих тоже должны быть видны.

В принципе, я пока что для себя побыстрому придумал такое решение:
1.Создаю класс от Wnd со скроллом.
2. В него помещаю еще одно Wnd фиксированного размера, вкотором вручную располагаю в виде таблицы вплотную друг к другу все нужные мне контролы, сетку рисуют OnPaint-ом.
3. Скролбаромом при надобности прокручиваю одно Wnd внутри другого.

Или это ну уж совсем отстойное решение?

Автор: Coocky 15.4.2005, 09:50
Step
Цитата
Coocky, может подскажешь как высото строки поменять

А тогда забудь про Лист.Делай свой,но только производный нет от Листа,а от CWnd
Вот пример есть на шагах,сложный,но уже навсегда. smile

Автор: Coocky 15.4.2005, 09:50
Добавлено @ 09:56
Dreamer_0x01
А можно немного узнать о твоем проекте?Может созреет лучшее дизайнерское решение.
Дело в том ,что сложнее всего будет обработать скролирование.Глюки будут страшные.Проще сделать тогда не скролирование,а фиксированый размер.А с помощью клавиатуры или кнопок переключать страницы.Если такое подойдет,то легко вычислить координаты ячейки, зная лишь номер строки и столбца.
Добавлено @ 09:58
Step
Цитата
свой сплитервнд я уже написал.. попродвинутей получилось

Мог бы сюда написать.У меня ДАФНО готовый лежит где-то.Еще на первом курсе домашнее задание было.
А вот пример из шагов,если интересен лист,произведеный от CWnd

Автор: Step 15.4.2005, 10:08
Цитата(Coocky @ 15.4.2005, 09:50)
А тогда забудь про Лист.Делай свой,но только производный нет от Листа,а от CWnd
Вот пример есть на шагах,сложный,но уже навсегда. 

вот и я про это

Автор: Coocky 15.4.2005, 10:09
А тебе надо отдельно рисовать,или все строки поменять?

Автор: Dreamer_0x01 15.4.2005, 10:48
Мой проект состоит из трех независимых программ.
Первая программа - (это основная моя работа) - это программа для микроконтроллера Atmel на 51 ядре, прибор измеряет несколько параметров и может передавать их через интерфейс RS485, протокол у меня свой.
Вторая программа - это уже программа на комп, предназначена для использования в рамках нашего предприятия и нужна для полного конфигурирования этого прибора с компа - это запись флеш-памяти (в которую надо загнать несолько тысяц значений из файла), всех параметров, и тд. (соответственно, прибор имеет соответствующее распознавание команд интерфейса.)

Сейчас речь идет о третьей программе. Она уже предназначена для пользователя.
Представляет своего рода терминал, который может обслуживать до 256 приборов. (Протокол обмена данных с прибором предусматривает 8 битную адресацию, опрос происходит по схеме "1. Все молчат - комп посылает запрос. 2. Все молчат - адресуемый говорит с компом".)

Вот. Соответственно на каждый прибор надо создать свое отображение. В этом отображении должны показываться основные параметры прибора (диапазон измериний, тип функции, измеренный параметр, ну и прочая специфика.). Причем на те, что стоят в важных местах, пользователь по своему усмотрению может открыть окошечко, в котором будет рисоваться график измеренного параметра. Окошечек этих будетоткрыто немного, где-то три-четыре (по опыту), с остальных приборов надо будет только снимать по одному параметру и сигнализировать в случае появляние каких-то крайних ситуаций. Важно, что эти окошечки не должны сильно загромождать экран, поэтому пользователь должен сам решить, какие ему больше всего нужны.

Соответсвенно, как я придумал это устроить чисто дизайнерски.

1. Главное окно имеет вид диалога с менюшкой, в которой находятся всякиевещи типа настроек портов, скоростей, таймаутов и прочего.
2. В главном окне есть табличка, которую я ка раз и хотел сделать.
В ней при опознавании присутствия прибора с новым адресом добавляется строка.
в этой строке добавляются следующие элементы:
  • чек-баттон в виде кнопки, который показывает, будем ли мы показывать значение измернного параметра прямо в таблице, или в специальном окошечке с графиком.
  • Тесктовые параметры
  • Комбобокс, который может выбрать режим отображения текстовых параметров - проценты, абсолютное значение и т.д....

в общем-то и вся идея.

Единственное, что мне тут не нравится - это тот самый присловутый скроллинг, ведь все сразу в таблицу не влезет. Но можно будет сделать так, чтобы вверху всегда стояли строки наиболееприорететные, а нижние вылезали в зону видимости только по принудительному скроллу или при аварийной ситуации, а в нормальном виде они просто где-то существует, и их значения всегда можно просмтреть в файле, который генерит программа.

Пробовал делть не в виде таблицы, а просто разбросать все "квадратики" по всему экрану, но уж больно в глазах рябит от такого представления. К тому же у всех разрешение монитора разное.

Автор: Coocky 15.4.2005, 11:19
Цитата
чек-баттон в виде кнопки, который показывает, будем ли мы показывать значение измернного параметра прямо в таблице, или в специальном окошечке с графиком.
Тесктовые параметры
Комбобокс, который может выбрать режим отображения текстовых параметров - проценты, абсолютное значение и т.д....


Ха!Так чем мой пример не подходит?
В столбце режим так пишем-режим.По нажатию-делаем комбо..
Значит так.Хороним диалог.(Извини)
Делаем SDI,разделеный сплитером.В левом углу CListView,в правом CScrollView,для графика..
ListView можно делать со встроеными чеками.Смотри SetExStyle(),кажется

Автор: Dreamer_0x01 15.4.2005, 13:15
Цитата
Ха!Так чем мой пример не подходит?


Слушай, что называется "с ходу" он у меня не компиляется. У меня студия.NET, я в ней пока не очень разобрался, так как до этого видел только 6 и то мало с ней работал, а время у меня сейчас на секунды идет. Выдает несколько ерроров, не очень мне понятных, и один не опасный варнинг насчет преобразования типов и всякой ботвы.

TitleTip.cpp(240): error C2360: initialization of 'pts' is skipped by 'case' label
TitleTip.cpp(241): error C2360: initialization of 'pts' is skipped by 'case' label
TitleTip.cpp(206) : see declaration of 'pts'
GridCtrl.cpp(2830): error C2668: 'CUIntArray::InsertAt' : ambiguous call to overloaded function

Цитата

Значит так.Хороним диалог.(Извини)
Делаем SDI,разделеный сплитером.В левом углу CListView,в правом CScrollView,для графика..


Ну по прочтению некоторых ветвей форума я уже понял, что ты не любишь диалоги smile
Но тут есть маленькая деталь - программировать под винды я начал сравнительно недавно, и с SDI еще не разбирался. (Хотя, мысль мне нравится, но тогда уж делать с MDI мне так кажется - на каждый прибор свой документ создавать и кучу чайлд-окон лепить в разных представлениях.)
А с диалогами вроде бы что-то получается. Во всяком случае открыть\закрыть, нарисовать что-то внутри, подвигать их я научился уже. smile
Так что ввиду нехватки времени пока придется первую версию сделать так,как представляется для меня возможным. Проект-то надо в воскресение чтоб работал уже. Плюс естественно не без глюков все выйдет, еще какое-то время уйдет на отладку и креш-тесты smile

Автор: Coocky 15.4.2005, 22:32
Dreamer_0x01
Хочешь,напишу тебе халявный интерфейс.Дай скриншот диалога.Все бесплатно.
Цитата
Хотя, мысль мне нравится, но тогда уж делать с MDI мне так кажется - на каждый прибор свой документ создавать и кучу чайлд-окон лепить в разных представлениях.)

Неудобно.Можно SDI,но с переключениями представлений

Автор: Dreamer_0x01 16.4.2005, 10:23
Цитата

Хочешь,напишу тебе халявный интерфейс.Дай скриншот диалога.Все бесплатно.


Спасибо, Coocky. Я восхищаюсь подобным участием и поступками.
Но может быть, оттого я сейчас сижу именно сдесь и работаю за копейки, что никогда не любил выезжать на чужой спине. Часто это было как раз наоборот.
А поскольку это моя работа, и я за нее деньги получаю, я ее делаю сам. Я должен сам во всем рахобраться, иначе у меня не будет удовлетворения от сделанного.

Мне бы лучше понять, почему уменя твой пример не компиляется, это задело меня за живое - не люблю чувствовать себя чайником. Но как я понял, то что я написал,для тебя не очень информативно. Вот попробую еще сегодня дома скомпилять в шестой версии, может прокатит.


Добавлено @ 10:25
Кстати, ты говорил, что со скроллом будут ужасные глюки. Странно, но у меня нет сейчас ни одного, как я его не насиловал. Правда, это еще не окончательный вариант, а всего лишь наброски..

Автор: Step 16.4.2005, 10:55


для тех кто еще не передумал извращаться над лист контролом:

если вы пожелаете еще и сделать анимашайн при наведения мышке на ячейку должен вам сообщить что выглядить будет уродливо, перерисовываться будет миниму 2 строки... мерцания в принципе гарантируеться, использовать двойную буферизацию будет затруднитель так как придеться хранить второй буфер для каждой строки, а потом сливать...


может я и не прав, но это то что ощутил на себе.... если я не прав дайте код... для двойной буфферизации лист контрола

Автор: Coocky 16.4.2005, 16:27
Dreamer_0x01
Цитата
TitleTip.cpp(240): error C2360: initialization of 'pts' is skipped by 'case' label
TitleTip.cpp(241): error C2360: initialization of 'pts' is skipped by 'case' label
TitleTip.cpp(206) : see declaration of 'pts'
GridCtrl.cpp(2830): error C2668: 'CUIntArray::InsertAt' : ambiguous call to overloaded function



Да я сам в шоке.Разве там есть switch?
'CUIntArray::InsertAt'
А это откуда?
Ты точно МФС юзаешь? smile

Автор: Dreamer_0x01 18.4.2005, 12:38
Цитата

Да я сам в шоке.Разве там есть switch?


Есть, да еще какой... ;)
В "CTitleTip::PreTranslateMessage(MSG* pMsg) "


Цитата

CUIntArray::InsertAt'
А это откуда?


А это в
"int CGridCtrl::InsertColumn(LPCTSTR strHeading,
UINT nFormat /* = DT_CENTER|DT_VCENTER|DT_SINGLELINE */,
int nColumn /* = -1 */)
"
, "m_arColWidths.InsertAt(nColumn, (int)0);"



А МФС юзаю конечно...
Может, я что-то не то стянул?
Стягивал файл "26.зип", приаттаченный к твоему сообщению из какой-то старой ветви форума.


Автор: Coocky 18.4.2005, 21:57
smile smile smile
Я тогда файлы не крепил-прав еще не было.Ща поищу smile
Добавлено @ 22:03
Вот лови.И будь Внимательный при поиске smile
http://forum.vingrad.ru/index.php?showtopic=34913

Автор: Dreamer_0x01 19.4.2005, 08:33
Цитата

Вот лови.И будь Внимательный при поиске


Да, и вправду лажа какая-то получилась...Сейчас историю в броузере просматриваю - ума не приложу, откуда я в тот день этот файл выкачал... smile

Эксперимент продолжается! Ура!

Автор: Coocky 19.4.2005, 21:17
Dreamer_0x01
Ну проблемі будут-звони.За интерфейс отвечаю smile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)