Форум программистов, компьютерный форум, киберфорум
Visual C++
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/15: Рейтинг темы: голосов - 15, средняя оценка - 4.80
20 / 20 / 2
Регистрация: 28.11.2012
Сообщений: 366

Рисование на окне диалога

26.04.2013, 12:12. Показов 3319. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте.
Наследуюсь от CPaintDc.
C++
1
2
3
4
5
6
7
class CMyPaintDC:public CPaintDC
{
 
public:
    CMyPaintDC(CDialog* pWnd);
    void DrawCross(int, int);
};
Далее определяю ф-цию void DrawCross(int, int);:
C++
1
2
3
4
5
void CMyPaintDC::DrawCross(int x, int y)
{
    MoveTo(x,y);
    LineTo(x+50,y+50);
}
А в событии диалогового окна OnPaint() передаю параметры в ф-цию:
C++
1
2
3
4
5
6
7
8
9
10
void CPaintExampleDlg::OnPaint()
{
CMyPaintDC mydc(this);
        CPen MyPen(PS_SOLID,1,RGB(0,255,0));
        mydc.SelectObject(MyPen);
        for(int i = 0; i<30; i++)
        {
            mydc.DrawCross(i+100,i+100);
        }
}
По моим представлениям должен нарисоваться сплошной прямоугольник из линий, но рисуется почему-то одна линия... Подскажите пожалуйста, почему?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
26.04.2013, 12:12
Ответы с готовыми решениями:

Как поменять цвет в окне диалога?
Microsoft Visual C++ .NET MFC Как поменять цвет текста, или лучше цвет фона при выводе в элемент &quot;Edit Control&quot; окна диалога,...

Рисование в окне
Здраствуйте! Помогите в написании программы (MFC):1) окно которое вызывает арифметическое действие; 2) вызывает меню с рисованием ...

Рисование в окне (mfc c++)
Задание: разработать программу, позволяющую рисовать эллипсы в окне мышью. Предусмотреть в меню Undo, Redo и Del all. С помощью...

5
 Аватар для Людвиг Бодмер
378 / 375 / 213
Регистрация: 29.03.2013
Сообщений: 867
26.04.2013, 15:08
Xantrax, Линия рисуется, по коду получается линии между точками (100,100) и (150,150) потом между точками (101,101) и (151,151) и так далее и они накладываются друг на друга. А для прямоугольника нужно что-то наподобие:
C++
1
2
3
4
5
void CMyPaintDC::DrawCross(int x, int y)
{
    MoveTo(x,y);
    LineTo(x,y+50);
}
C++
1
2
3
4
for(int i = 0; i<30; i++)
        {
            mydc.DrawCross(i+100,100);
        }
0
Автор FAQ
 Аватар для -=ЮрА=-
6614 / 4256 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
26.04.2013, 16:51
Модальное окно
0
20 / 20 / 2
Регистрация: 28.11.2012
Сообщений: 366
26.04.2013, 16:54  [ТС]
Да Людвиг вы правы...
Задам вопрос здесь же.
А как рисовать на уже нарисованных кругах, прямоугольниках и т.д.
Я думаю, что тут какой-то подход нужен... Но пока не подозреваю какой, направьте пожалуйста.
Вот я нарисовал круг, но подозреваю, что на нем уже ничего не нарисовать...
C++
1
2
3
4
5
6
7
   CMyPaintDC mydc(this);
        CPen MyPen(PS_SOLID,3,RGB(0,255,0));
        CBrush MyBrush(RGB(0,0,0));
        mydc.SelectObject(MyBrush);
        mydc.SelectObject(MyPen);
        CRect Myrectangle(1,1,200,200);
        mydc.Ellipse(&Myrectangle);
Как на нем допустим нарисовать крест? Или X, или что-нибудь?
0
 Аватар для Людвиг Бодмер
378 / 375 / 213
Регистрация: 29.03.2013
Сообщений: 867
26.04.2013, 17:27
Xantrax, да также рисуется все, поверх просто, надо только выбрать кисть/карандаш другого цвета, чтоб не сливалось. Крест можно с помощью LineTo() той же нарисовать по координатам
0
20 / 20 / 2
Регистрация: 28.11.2012
Сообщений: 366
21.06.2013, 10:05  [ТС]
Подскажите пожалуйста, почему не рисует полигон?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
void CCircleDrawDlg::OnBnClickedOk()
{
    CPoint point[3];
 
    point[0].x = 0;
    point[0].y = 0;
    
    point[1].x = 100;
    point[1].y = 100;
 
    point[2].x = 150;
    point[2].y = 150;
 
    CPaintDC dc(this);
    CPen blackpen(PS_SOLID,1,RGB(0,0,0));
    CPen* oldpen = dc.SelectObject(&blackpen);    
    CBrush brush(RGB(234,35,42));
    CBrush* oldbrush = dc.SelectObject(&brush);
    CRgn rgn;
    rgn.CreatePolygonRgn(point,3,ALTERNATE);
    dc.PaintRgn(&rgn);
    
    dc.SelectObject(&oldpen);
    dc.SelectObject(&oldbrush);
Добавлено через 20 минут
Замыкать полигон как я понял не обязательно.
Но почему он у меня не рисуется?
Круг рисуется:
C++
1
2
3
4
5
6
7
8
9
10
CClientDC dc(this);
    CPen blackpen(PS_SOLID,1,RGB(0,0,0));
    CPen* oldpen = dc.SelectObject(&blackpen);    
    CBrush brush(RGB(234,35,42));
    CBrush* oldbrush = dc.SelectObject(&brush);
    CRect rect(20,20,200,200);
 
    dc.Ellipse(rect);
    dc.SelectObject(oldpen);
    dc.SelectObject(oldbrush);
А полигон, что-то я не пойму каким методом нарисовать...

Добавлено через 14 секунд
Замыкать полигон как я понял не обязательно.
Но почему он у меня не рисуется?
Круг рисуется:
C++
1
2
3
4
5
6
7
8
9
10
CClientDC dc(this);
    CPen blackpen(PS_SOLID,1,RGB(0,0,0));
    CPen* oldpen = dc.SelectObject(&blackpen);    
    CBrush brush(RGB(234,35,42));
    CBrush* oldbrush = dc.SelectObject(&brush);
    CRect rect(20,20,200,200);
 
    dc.Ellipse(rect);
    dc.SelectObject(oldpen);
    dc.SelectObject(oldbrush);
А полигон, что-то я не пойму каким методом нарисовать...

Добавлено через 13 минут
C++
1
dc.FillRgn(&rgn,&brush);
Тоже не работает...

Добавлено через 17 часов 35 минут
Так как же все-таки нарисовать полигон с помощью функции CreatePolygonRgn()?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
21.06.2013, 10:05
Помогаю со студенческими работами здесь

Рисование графики в окне (MFC)
Здравствуйте! В диалоговом приложении открываю дочернее окно, где рисую поля и на них графики. Показаны фрагменты, поясняющие методы...

Задача на рисование фигур в окне
Ребят, такая проблема, у меня есть программа которая рисует в центре окна одну из 3 фигур(прямоугольник, эллипс, ромб) в 3 разных цветах и...

Рисование линии в окне приложения MFC
Здраствуйте. Я новичок в написании MFC. Столкнулся со следующей проблей - не могу реализовать рисование прямой линии в окне. Разобрался...

Рисование графика синусоиды в диалоговом окне
Как нарисовать во времени график синусоиды на элементе диалогового окна Picture? Программу прикрепляю

Рисование в окне без полной перерисовки (MFC)
В ходе изучения MFC да и вообще WinAPI у меня появился проблема.В нете ни чего не нашёл сколько искал.Вот в чём её суть. Допустим Я хочу...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru