| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Общие вопросы > Стратегический вопрос. |
| Автор: Royan 1.4.2004, 17:53 | ||
| У меня в прорамме планируется быть осциллограф. Будет сниматься аудио сигнал и выводиться на маленький нарисованный мной экранчик. Вопрос: Как наболее грамотно сделать поледовательную прорисовку элементов. 1) Запихать все функции выводящие графическую информацию в одну процедуру вызываемую при сообщении WM_PAINT или 2)У меня уже есть класс "оболочка" В нем можно ассоциировать какой-то член класса (например виртуальную функцию) с конкретным сообщением, так вот можно ли вызывав например такую виртуалную функцию унаследованного класса, вызвать еще и ее бызовую копию. Например:
Это надо для того чтобы можно было построить иерархию классов, и каждый из них добавил бы свою функцию обработки WM_PAINT, как следствие программа была бы логически построена и хорошо инкапсулирована. |
| Автор: Масяня 1.4.2004, 18:34 | ||
Конечно, можно! Для отключения виртуального механизма вызова вирт. функций используй оператор разрешения обасти видимости. Например, так Base::foo(). |
| Автор: Гость_Tinto 1.4.2004, 19:25 |
| Не знаю как вы делаете, а я сделал так. Данные приходят пакетами через СОМ-порт с периодом 120мс. Пакет обрабатывается и выводится на экран(TeeChart) и все. Единственно узкое место здесь, это лимит времени на обработку данных не более 120мс. Аналогично можно вводить данные и со звуковухи, только надо программный буфер предусмотреть, т.к данные со звуковухи идут непрерывно. А вообше-то зачем заморачиваться, если есть готовая программа, SpectraLab называется |
| Автор: cardinal 1.4.2004, 20:25 |
| Модератор: Название темы должно отражать ее суть! |
| Автор: Royan 1.4.2004, 20:48 |
| 2Cardinal, раз модератор да еще такой умный, то и предложи, а то вишь замечания тут радзовать 2МасяняBase::foo() вызовет только foo() из Base, а мне надо так чтобы одним вызовом foo() где либо вызвались все foo в иерархии классов, подобно тому как вызываются конструторы. 2TintoПотому как здесь есть учебный проект и его надо сделать. Суть примерно такова: сделать из звуковухи модем, то есть модулировать входящий сигнал и превращать в цифры. |
| Автор: srd 1.4.2004, 20:53 | ||
| Royan Так можно вызовы цепочкой организовать
|
| Автор: Royan 1.4.2004, 20:56 |
| Это я понимаю |
| Автор: cardinal 1.4.2004, 22:46 | ||||||||
В правилах написано:
Моя задача, как и всех других модераторов, делать замечания участникам форума, если они не придерживаются правил.
И не надо наезжать на модераторов. Они следят за порядком на форуме.
Ну а если хочешь мое мнение услышать: для начала надо решить критический это момент или нет 1. если да, то тут, наверно, не до инкапсуляции. Тут речь пойдет (как я понял) об изображении сигналов, так что надо подзадуматься, как бы не напридумывать так, чтобы потом изображение дергалось. 2. если нет, то надо делать так, как удобней тебе (ничего лучшего чем то, что предложил srd предложить не могу). |
| Автор: Royan 2.4.2004, 09:44 | ||||
Не умничай
Кстати отличный вопрос, если кто сталкивался с этим, как решали эту проблему? |
| Автор: Royan 2.4.2004, 10:46 |
| Нашел в FAQ'е и через search: http://forum.vingrad.ru/index.php?act=ST&f=31&t=19425 http://forum.vingrad.ru/index.php?act=Search&CODE=show&searchid=7bd51b659398ee0e186cb6087bb8f187&search_in=posts&result_type=topics&highlite=%EC%E5%F0%F6%E0%ED%E8%E5 |
| Автор: mr.DUDA 2.4.2004, 13:23 | ||||
Royan, а можно упростить себе жизнь вот так
Использование макросов в данном случае даёт более унифицированный внешний вид кода, чем при явном указании имён базовых классов (никаких других выигрышей и проигрышей тут нету, т.к. функция Base() будет inline, т.е. подставляемая, и к тому же кроме cast-а ничего не содержит). Сравни с тем же примером, но без Base():
не надо загоняться на имена базовых классов, а достаточно вызвать Base( )... |
| Автор: Royan 3.4.2004, 15:29 |
| Да ты прав, я думал предложить свой вариант, когда на этапе компиляции составляется карта в конструкторе каждого из унаследованных классов, а после ее в бызовом классе раскрутить в цикле, так как OnMyPaint базового класса вызывается по умолчанию, но потом до меня дошло, что это все равно то же самое, что предложил и ты, покуда пришлось бы прописывать в каждом конструкторе лишнюю строчку кода |
| Автор: mr.DUDA 3.4.2004, 21:49 |
| Угу, только в моём коде ни одной лишней строчки компилятор не генерит |