|
9 / 9 / 1
Регистрация: 21.12.2008
Сообщений: 43
|
||||||
Создание классов геометрических фигур, рисование на GDI (MFC)03.04.2009, 16:22. Показов 17250. Ответов 8
Метки нет (Все метки)
Нужно создать класс Shape, как некий родительский класс геометрических фигур, от которого будут наследоваться последующие конкретные классы: треугольник, прямоугольник; и нарисовать их. Далее нужно будет реализовать возможность перемещать эти фигуры, но сейчас не до этого, надо разобраться с самими классами
Читал литературу на эту тему, более или менее разобрался, делаю это на GDI. Класс Shape унаследовал от CPaintDC (и скорее всего, это бред), а надо, насколько я понимаю, от CObject Вот что у меня пока что получилось (код приведён не весь, только нужное):
1) Про сам класс Shape - правильно ли было наследовать его от CPaintDC? Скорее всего нет, это получается, что я создал ещё один класс рисования 2) И поэтому при рисовании в окне я могу нарисовать либо прямоугольник, либо треугольник, потому как только один из них может получить контекст устройства, чтобы рисовать в нём. Как быть?
0
|
||||||
| 03.04.2009, 16:22 | |
|
Ответы с готовыми решениями:
8
Рисование геометрических фигур Построить систему классов для описания плоских геометрических фигур Построить систему классов для описания плоских геометрических фигур |
|
2256 / 771 / 25
Регистрация: 27.05.2008
Сообщений: 1,496
|
|
| 03.04.2009, 16:48 | |
|
Насколько я понял, в задании хотят независимый класс Shape. сделайте базовый класс и дайте ему вирутальный метод отрисовки,принимающий контекст GDI.Также всем фигурам свойственно иметь координаты (X,Y). Все остальное - свойство отдельных фигур. Унаследуйте классы треугольника,прямоугольника и т п от базового, переопределите метод отрисовки. После чего в главной программе можно будет создать,скажем, список или вектор Shape* и вызывать отрисовку для каждого в цикле. Поскольку функция вирутальная, вызываться будет отрисовка соответствующего объекта. Функцию отрисовки Shape можно определить чисто виртуальной,поможет при отладке.
0
|
|
|
9 / 9 / 1
Регистрация: 21.12.2008
Сообщений: 43
|
||||||||||||||
| 04.04.2009, 02:07 [ТС] | ||||||||||||||
-------
Как я понимаю задачу и что я хочу сделать - у меня будут просто кнопки, например, Нарисовать треугольник, при нажатии которой будет отрисовываться объект класса TriAngle. То есть, для этого в событии OnLButtonDown кнопки будет вызываться конструктор класса и функция его прорисовки Поправьте, если бред получился, а то я как в тёмной комнате
0
|
||||||||||||||
|
9 / 9 / 1
Регистрация: 21.12.2008
Сообщений: 43
|
|||||||||||||||||||||
| 07.04.2009, 18:06 [ТС] | |||||||||||||||||||||
|
Вопрос и правда был глупый. Вот что получилось:
В готовой программе две кнопки, по нажатию на одну рисуется прямоугольник, по нажатию на вторую - треугольник Захотел сделать третью кнопку - по нажатию на которую всё нарисованное стирается. Не осилил передать ей контекст главного окна, у неё в собственных параметрах конструктора уже есть такой параметр, если я не путаю Вот здесь застрял:
У меня единственная проблема, я искал в книгах, искал в сети, не нашёл. Как передать его контекст? Ведь не &CMainWnd, это ересь вообще Добавлено через 21 час 49 минут 59 секунд Внезапно обнаружил - AfxGetApp()->m_pMainWnd А ещё оказалось, что Invalidate ничего не стирает. Использовал FloodFill:
1
|
|||||||||||||||||||||
|
9 / 9 / 1
Регистрация: 21.12.2008
Сообщений: 43
|
||||||
| 12.04.2009, 17:07 [ТС] | ||||||
|
А как теперь это сделать с OnPaint?
0
|
||||||
|
9 / 9 / 1
Регистрация: 21.12.2008
Сообщений: 43
|
|
| 17.04.2009, 21:07 [ТС] | |
|
На обработчики нажатия кнопок нужно было поставить изменение глобальных переменных, а в OnPaint при условии изменения переменной - вызов функции рисования
Оттакая штука получилась: http://img5.imageshost.ru/imgs... 59311a.png Программу закончил, исходник приаттачил, вдруг кому-то понадобится
2
|
|
|
0 / 0 / 0
Регистрация: 14.02.2012
Сообщений: 6
|
|
| 14.02.2012, 01:28 | |
|
class CMainWnd : public CFrameWnd
Честно говоря я не очен понял как оно у вас заработало? Мне выдает кучу ошибок. И хотелось бы узнать а где описание класса CFrameWnd?
0
|
|
|
9 / 9 / 1
Регистрация: 21.12.2008
Сообщений: 43
|
|
| 14.02.2012, 09:12 [ТС] | |
|
Я не помню уже совершенно, сейчас посмотрел на своё творение и содрогнулся
Нашёл его в завалах, скомпиленный .exe запустился, хоть и криво работает, а компилить нету желания и Студии А что, "class CMainWnd : public CFrameWnd" - это что-то плохое?
0
|
|
|
0 / 0 / 0
Регистрация: 14.02.2012
Сообщений: 6
|
|
| 15.02.2012, 22:05 | |
|
"class CMainWnd : public CFrameWnd" нет это не плохое)))это как я понял создание окна. Между прочем у вас не плохо оформлен код. Хоть и криво как вы говорите. Прост класс CFrameWnd у меня пишет на студии что не найден. Но по мойму надо прописать:
#pragma comment(lib, "GdiPlus.lib") и #include <windows.h> в StdAfx.cpp. в Header Files и #include <GdiPlus.h> using namespace Gdiplus; в StdAfx.cpp.в Source Files.У меня VC2008 Но я еще не специалист только осваиваю.
0
|
|
| 15.02.2012, 22:05 | |
|
Помогаю со студенческими работами здесь
9
Построить систему классов для описания плоских геометрических фигур Построить систему классов для описания плоских геометрических фигур Построить систему классов для описания плоских геометрических фигур Многофайловая система классов для описания плоских геометрических фигур Иерархия классов для геометрических фигур Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд.
Даже если у вас. . .
|
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает
монорепозиторий в котором находятся все исходники.
При создании нового решения, мы просто добавляем нужные проекты
и имеем. . .
|
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение:
В этой книге («Подход, основанный на вариантах использования») Ивар утверждает,
что архитектура программного обеспечения — это
структуры,. . .
|
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога
Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
|
|
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога
Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip
На первой гифке отладочные линии отключены, а на второй включены:. . .
|
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога
Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем.
. . .
|
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
|
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
|