| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > 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 Да перестань ты..Какие там тонкости.. Давай в приват-помогу. |
| Автор: Step 14.4.2005, 22:36 |
| Coocky, я хочу реализовать гораздо более сложною структуру, с потдержко групп, сложных групп, а не те что заложены в этом элементе для хп, также с прямой потдержкой контролов в ячейках, вообщем идея в том что кроме этого элемента, больше в принципе ничего и не надо будет даже сплитеров, рамок, и т.д. и т.п. |
| Автор: chipset 14.4.2005, 22:39 | ||||
Может кинешь куском кода?
Не проще ли свой написать CListCtrl |
| Автор: Step 14.4.2005, 22:43 | ||
вот именно его я и буду писать свой сплитервнд я уже написал.. попродвинутей получилось.... вернее я целый движок написал... мутная система получилась но продвинутая..... |
| Автор: 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
А тогда забудь про Лист.Делай свой,но только производный нет от Листа,а от CWnd Вот пример есть на шагах,сложный,но уже навсегда. |
| Автор: Coocky 15.4.2005, 09:50 | ||
| Добавлено @ 09:56 Dreamer_0x01 А можно немного узнать о твоем проекте?Может созреет лучшее дизайнерское решение. Дело в том ,что сложнее всего будет обработать скролирование.Глюки будут страшные.Проще сделать тогда не скролирование,а фиксированый размер.А с помощью клавиатуры или кнопок переключать страницы.Если такое подойдет,то легко вычислить координаты ячейки, зная лишь номер строки и столбца. Добавлено @ 09:58 Step
Мог бы сюда написать.У меня ДАФНО готовый лежит где-то.Еще на первом курсе домашнее задание было. А вот пример из шагов,если интересен лист,произведеный от CWnd |
| Автор: Step 15.4.2005, 10:08 | ||
вот и я про это |
| Автор: 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 еще не разбирался. (Хотя, мысль мне нравится, но тогда уж делать с MDI мне так кажется - на каждый прибор свой документ создавать и кучу чайлд-окон лепить в разных представлениях.) А с диалогами вроде бы что-то получается. Во всяком случае открыть\закрыть, нарисовать что-то внутри, подвигать их я научился уже. Так что ввиду нехватки времени пока придется первую версию сделать так,как представляется для меня возможным. Проект-то надо в воскресение чтоб работал уже. Плюс естественно не без глюков все выйдет, еще какое-то время уйдет на отладку и креш-тесты |
| Автор: Coocky 15.4.2005, 22:32 | ||
| Dreamer_0x01 Хочешь,напишу тебе халявный интерфейс.Дай скриншот диалога.Все бесплатно.
Неудобно.Можно 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
Да я сам в шоке.Разве там есть switch? 'CUIntArray::InsertAt' А это откуда? Ты точно МФС юзаешь? |
| Автор: Dreamer_0x01 18.4.2005, 12:38 | ||||
Есть, да еще какой... ;) В "CTitleTip::PreTranslateMessage(MSG* pMsg) "
А это в "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 |
| Я тогда файлы не крепил-прав еще не было.Ща поищу Добавлено @ 22:03 Вот лови.И будь Внимательный при поиске http://forum.vingrad.ru/index.php?showtopic=34913 |
| Автор: Dreamer_0x01 19.4.2005, 08:33 | ||
Да, и вправду лажа какая-то получилась...Сейчас историю в броузере просматриваю - ума не приложу, откуда я в тот день этот файл выкачал... Эксперимент продолжается! Ура! |
| Автор: Coocky 19.4.2005, 21:17 |
| Dreamer_0x01 Ну проблемі будут-звони.За интерфейс отвечаю |