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

Как нарисовать эллипс и границу «две точки-тире» фиолетового цвета

13.04.2013, 15:45. Показов 2703. Ответов 17
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день, подскажите пожалуйста, как нарисовать эллипс и границу «две точки- тире» фиолетового цвета, закраску желтыми наклонными диагональными слева- направо и справа- налево линиями.

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
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
// MyView.cpp : implementation file
//
 
#include "stdafx.h"
#include "LabMDF.h"
#include "MyView.h"
#include "MyDoc.h"
 
// MyView
 
IMPLEMENT_DYNCREATE(MyView, CView)
 
MyView::MyView()
{
 
}
 
MyView::~MyView()
{
}
 
BEGIN_MESSAGE_MAP(MyView, CView)
    ON_WM_RBUTTONDOWN()
    ON_WM_MOUSEMOVE()
    ON_WM_RBUTTONUP()
END_MESSAGE_MAP()
 
 
// MyView drawing
 
void MyView::OnDraw(CDC* pDC)
{
    MyDoc* pDoc = (MyDoc *)GetDocument();
    // TODO: add draw code here
    CPen penRis(PS_SOLID, 1, RGB(255, 0, 0));
    pDC->SelectObject(&penRis);
    for(int i=0; i<pDoc->N; i++)
    {
        pDC->MoveTo(pDoc->P[i][0]);
        pDC->Ellipse(pDoc->P[i][1]);
    }
}
 
 
// MyView diagnostics
 
#ifdef _DEBUG
void MyView::AssertValid() const
{
    CView::AssertValid();
}
 
#ifndef _WIN32_WCE
void MyView::Dump(CDumpContext& dc) const
{
    CView::Dump(dc);
}
#endif
#endif //_DEBUG
 
 
// MyView message handlers
void MyView::OnRButtonDown(UINT nFlags, CPoint point)
{
    // TODO: Add your message handler code here and/or call default
    p1=p2=point;
 
    CView::OnRButtonDown(nFlags, point);
}
 
void MyView::OnMouseMove(UINT nFlags, CPoint point)
{
    int x1, x2, y1, y2;
    // TODO: Add your message handler code here and/or call default
    if (nFlags & MK_RBUTTON)
    {
        CPen penSt(PS_SOLID, 1, RGB(255, 255, 255)),
            penRis(PS_SOLID, 1, RGB(255, 0, 0));
        CClientDC dc(this);
        dc.SelectObject(&penSt);
        dc.MoveTo(p1);
        dc.LineTo(p2);
        p2=point;
        dc.SelectObject(&penRis);
        dc.MoveTo(p1);
        dc.Ellipse(x1, x2, y1, y2);
        //Рисую я так: dc->elipce(x1, x2, y1, y2); А как изменить цвет этого элипса?
 
//Мне посоветовали такие функции:
//CPen MyPen(PS_DASHDOT,1,RGB(0,255,0)); // настраиваем перо
//dc.SelectObject(MyPen); // выбираем перо
    }
 
    CView::OnMouseMove(nFlags, point);
}
 
void MyView::OnRButtonUp(UINT nFlags, CPoint point)
{
    // TODO: Add your message handler code here and/or call default
    MyDoc* pDoc = (MyDoc *)GetDocument();
    pDoc->P[pDoc->N][0]=p1;
    pDoc->P[pDoc->N][1]=p2;
    pDoc->N++;
 
 
    CView::OnRButtonUp(nFlags, point);
}
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
13.04.2013, 15:45
Ответы с готовыми решениями:

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

Нарисовать цветовую шкалу от темно-красного до фиолетового цвета
Помогите. Нужно преобразовать значения от -32768 до 32767 в RGB Что-то типа радуги: от темно-красного(черного) (-32768 ) до...

a img {border} фиолетового цвета. Как выставить свой?
Здравствуйте! Рылся в гугле не нашел особо ничего по своему вопросу. Честно говоря даже не имею понятия как составить запрос. Вот в чем...

17
Неэпический
 Аватар для Croessmah
18149 / 10731 / 2067
Регистрация: 27.09.2012
Сообщений: 27,035
Записей в блоге: 1
13.04.2013, 16:03
WinAPI:
C++
1
2
3
4
5
6
7
8
9
        HPEN hPen=CreatePen(PS_DASHDOTDOT,1,RGB(255,0,255));
        HPEN hOldPen=(HPEN)SelectObject(hDC,hPen);      
        HBRUSH hBrush=CreateHatchBrush(HS_DIAGCROSS,RGB(255,255,0));
        HBRUSH hOldBrush=(HBRUSH)SelectObject(hDC,hBrush);
        Ellipse(hDC,100,100,200,300);
        SelectObject(hDC,hOldBrush);
        SelectObject(hDC,hOldPen);
        DeleteObject(hPen);
        DeleteObject(hBrush);
0
2 / 2 / 3
Регистрация: 17.12.2012
Сообщений: 79
13.04.2013, 16:24  [ТС]
не, мне нужно в MDF (библиотека классов MFC)

Добавлено через 17 минут
ну например я хочу создать круг, но на 41 строчке pDC->Ellipse(pDoc->P[i][1]); он выдает ошибку типа "отсуствуют экземпляры перегруженная функция, как это сделать и как вообще создать круг если нажата правая кнопка мыши и чтобы у круга была граница «две точки- тире» фиолетового цвета, закраска желтыми наклонными диагональными слева- направо и справа- налево линиями .

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
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
// MyView.cpp : implementation file
//
 
#include "stdafx.h"
#include "LabMDF.h"
#include "MyView.h"
#include "MyDoc.h"
 
// MyView
 
IMPLEMENT_DYNCREATE(MyView, CView)
 
MyView::MyView()
{
 
}
 
MyView::~MyView()
{
}
 
BEGIN_MESSAGE_MAP(MyView, CView)
    ON_WM_RBUTTONDOWN()
    ON_WM_MOUSEMOVE()
    ON_WM_RBUTTONUP()
END_MESSAGE_MAP()
 
 
// MyView drawing
 
void MyView::OnDraw(CDC* pDC)
{
    MyDoc* pDoc = (MyDoc *)GetDocument();
    // TODO: add draw code here
    CPen penRis(PS_SOLID, 1, RGB(255, 0, 0));
    pDC->SelectObject(&penRis);
    for(int i=0; i<pDoc->N; i++)
    {
        pDC->MoveTo(pDoc->P[i][0]);
        pDC->Ellipse(pDoc->P[i][1]);
    }
}
 
 
// MyView diagnostics
 
#ifdef _DEBUG
void MyView::AssertValid() const
{
    CView::AssertValid();
}
 
#ifndef _WIN32_WCE
void MyView::Dump(CDumpContext& dc) const
{
    CView::Dump(dc);
}
#endif
#endif //_DEBUG
 
 
// MyView message handlers
void MyView::OnRButtonDown(UINT nFlags, CPoint point)
{
    // TODO: Add your message handler code here and/or call default
    p1=p2=point;
 
    CView::OnRButtonDown(nFlags, point);
}
 
void MyView::OnMouseMove(UINT nFlags, CPoint point)
{
    // TODO: Add your message handler code here and/or call default
    if (nFlags & MK_RBUTTON)
    {
        int x1, x2, y1, y2;
        CPen penSt(PS_SOLID, 1, RGB(255, 255, 255)),
            penRis(PS_SOLID, 1, RGB(255, 0, 0));
        CClientDC dc(this);
        dc.SelectObject(&penSt);
        dc.MoveTo(p1);
        dc.Ellipse(x1, x2, y1, y2);
        p2=point;
        dc.SelectObject(&penRis);
        dc.MoveTo(p1);
        dc.Ellipse(x1, x2, y1, y2);
 
    }
 
    CView::OnMouseMove(nFlags, point);
}
 
void MyView::OnRButtonUp(UINT nFlags, CPoint point)
{
    // TODO: Add your message handler code here and/or call default
    MyDoc* pDoc = (MyDoc *)GetDocument();
    pDoc->P[pDoc->N][0]=p1;
    pDoc->P[pDoc->N][1]=p2;
    pDoc->N++;
 
 
    CView::OnRButtonUp(nFlags, point);
}
0
Модератор
Эксперт по электронике
8981 / 6748 / 921
Регистрация: 14.02.2011
Сообщений: 23,871
14.04.2013, 10:36
Цитата Сообщение от xparovozx Посмотреть сообщение
pDC->Ellipse(pDoc->P[i][1]); он выдает ошибку типа "отсуствуют экземпляры перегруженная функция,
А сколько параметров должно быть у функции рисования эллипса?
0
2 / 2 / 3
Регистрация: 17.12.2012
Сообщений: 79
14.04.2013, 13:53  [ТС]
Цитата Сообщение от ValeryS Посмотреть сообщение
А сколько параметров должно быть у функции рисования эллипса?
я не знаю, он не пишет, пишет только так "отсутствуют экземпляры перегруженная функция "CDC::Ellipse", соответствующие списку аргумента".
0
0 / 0 / 1
Регистрация: 21.10.2012
Сообщений: 23
14.04.2013, 13:57
Если не ошибаюсь, данная ошибка высвечивается, если не указан хотя бы один аргумент функции. А вообще в функции эллипса должно быть 4 аргумента
0
Модератор
Эксперт по электронике
8981 / 6748 / 921
Регистрация: 14.02.2011
Сообщений: 23,871
14.04.2013, 16:11
Цитата Сообщение от xparovozx Посмотреть сообщение
я не знаю,
интересно а как ты собираешься использовать функцию если не знаешь как она работает?
функция Ellipse класса CDC принимает или один аргумент CRect или четыре int
координаты левого верхнего и правого нижнего угла описывающего прямоугольника
а ты

Цитата Сообщение от xparovozx Посмотреть сообщение
pDC->Ellipse(pDoc->P[i][1]);
что функции передали?
радиус(диаметр) ?так у эллипса два радиуса
центр, почему один?
вот почти правильное использование (у тебя же)
в MyView::OnMouseMove(
Цитата Сообщение от xparovozx Посмотреть сообщение
dc.Ellipse(x1, x2, y1, y2);
только никто не знает что такое x1, x2, y1, y2, они не инициализированы
и порядок аргументов попутан
вот так правильнее
C++
1
dc.Ellipse(x1,y1, x2,  y2);
и вот это что такое



Цитата Сообщение от xparovozx Посмотреть сообщение
dc.SelectObject(&penSt);
..................................
dc.SelectObject(&penRis);
утечка ресурсов будет
нужно освобождать ресурсы ( выбрать то что там было) примерно так
C++
1
2
3
4
5
CPen* oldPen=dc.SelectObject(&penSt);
 ..................................
dc.SelectObject(&penRis);
.........................................
dc.SelectObject(oldPen);
0
2 / 2 / 3
Регистрация: 17.12.2012
Сообщений: 79
15.04.2013, 21:14  [ТС]
я всё пробывал, ничего не помогает.
0
Модератор
Эксперт по электронике
8981 / 6748 / 921
Регистрация: 14.02.2011
Сообщений: 23,871
15.04.2013, 21:23
Цитата Сообщение от xparovozx Посмотреть сообщение
я всё пробывал, ничего не помогает.
покажи что пробовал
0
2 / 2 / 3
Регистрация: 17.12.2012
Сообщений: 79
15.04.2013, 21:27  [ТС]
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
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
// MyView.cpp : implementation file
//
 
#include "stdafx.h"
#include "LabMDF.h"
#include "MyView.h"
#include "MyDoc.h"
 
// MyView
 
IMPLEMENT_DYNCREATE(MyView, CView)
 
MyView::MyView()
{
 
}
 
MyView::~MyView()
{
}
 
BEGIN_MESSAGE_MAP(MyView, CView)
    ON_WM_RBUTTONDOWN()
    ON_WM_MOUSEMOVE()
    ON_WM_RBUTTONUP()
END_MESSAGE_MAP()
 
 
// MyView drawing
 
void MyView::OnDraw(CDC* pDC)
{
    MyDoc* pDoc = (MyDoc *)GetDocument();
    // TODO: add draw code here
    CPen penRis(PS_SOLID, 1, RGB(255, 0, 0));
    pDC->SelectObject(&penRis);
    for(int i=0; i<pDoc->N; i++)
    {
        pDC->MoveTo(pDoc->P[i][0]);
        [COLOR="Red"]pDC->Ellipse(pDoc->P[i][1]);
        //pDC->LineTo(pDoc->P[i][1]);
        //pDC->Ellipse(pDoc->CRect);
                //pDC->Ellipse(pDoc->int x1, y1, x2, y2);[/COLOR]
 
    }
}
 
 
// MyView diagnostics
 
#ifdef _DEBUG
void MyView::AssertValid() const
{
    CView::AssertValid();
}
 
#ifndef _WIN32_WCE
void MyView::Dump(CDumpContext& dc) const
{
    CView::Dump(dc);
}
#endif
#endif //_DEBUG
 
 
// MyView message handlers
void MyView::OnRButtonDown(UINT nFlags, CPoint point)
{
    // TODO: Add your message handler code here and/or call default
    p1=point;
 
    CView::OnRButtonDown(nFlags, point);
}
 
void MyView::OnMouseMove(UINT nFlags, CPoint point)
{
    // TODO: Add your message handler code here and/or call default
    if (nFlags & MK_RBUTTON)
    {
        int x1=200, y1=400, x2=200,  y2=400;
        CPen penSt(PS_SOLID, 1, RGB(255, 255, 255)),
            penRis(PS_SOLID, 1, RGB(255, 0, 0));
        CClientDC dc(this);
        [COLOR="Red"]CPen* oldPen=dc.SelectObject(&penSt);[/COLOR]
        dc.SelectObject(&penSt);
        dc.MoveTo(p1);
        dc.Ellipse(x1, y1, x2,  y2);
        p2=point;
        dc.SelectObject(&penRis);
        dc.MoveTo(p1);
        dc.Ellipse(x1, y1, x2,  y2);
 
    }
 
    CView::OnMouseMove(nFlags, point);
}
 
void MyView::OnRButtonUp(UINT nFlags, CPoint point)
{
    // TODO: Add your message handler code here and/or call default
    MyDoc* pDoc = (MyDoc *)GetDocument();
    pDoc->P[pDoc->N][0]=p1;
    pDoc->P[pDoc->N][1]=p2;
    pDoc->N++;
 
 
    CView::OnRButtonUp(nFlags, point);
}
а границу «две точки- тире» фиолетового цвета, закраску желтыми наклонными диагональными слева- направо и справа- налево линиями я не знаю как делать.
0
Модератор
Эксперт по электронике
8981 / 6748 / 921
Регистрация: 14.02.2011
Сообщений: 23,871
15.04.2013, 21:31
Цитата Сообщение от xparovozx Посмотреть сообщение
pDC->MoveTo(pDoc->P[i][0]);
вот это зачем

про эллипс я тебе расписывал а ты занового

Цитата Сообщение от xparovozx Посмотреть сообщение
pDC->Ellipse(pDoc->P[i][1]);
как ты эллипс собрался рисовать по одной точке?
0
2 / 2 / 3
Регистрация: 17.12.2012
Сообщений: 79
15.04.2013, 21:34  [ТС]
pDC->MoveTo(pDoc->P[i][0]); - это чтобы передвигать мышкой с нажатой правой кнопкой мыши.
А как тогда вообще эллипс рисовать? другим способом, по моим знаниям ошибки выдает, поэтому я и спросил.
0
Модератор
Эксперт по электронике
8981 / 6748 / 921
Регистрация: 14.02.2011
Сообщений: 23,871
15.04.2013, 21:44
Ты бы хоть книжку почитал
Цитата Сообщение от xparovozx Посмотреть сообщение
pDC->MoveTo(pDoc->P[i][0]); - это чтобы передвигать мышкой с нажатой правой кнопкой мыши.
MoveTo передвигает перо(карандаш) в указанную позицию при этом ничего не рисует
к мыши никакого отношения не имеет
используется обычно в паре с LineTo
C++
1
2
pDC->MoveTo(0,0); 
pDC->LineTo(10,10);
нарисует диагональную линию


Цитата Сообщение от xparovozx Посмотреть сообщение
А как тогда вообще эллипс рисовать?
вот тебе окружность с радиусом 50
и центром в 50,50
C++
1
pDC->Ellipse(0,0,100,100);
0
2 / 2 / 3
Регистрация: 17.12.2012
Сообщений: 79
15.04.2013, 21:48  [ТС]
Цитата Сообщение от ValeryS Посмотреть сообщение
pDC->Ellipse(0,0,100,100);
он у меня пишет, требуется имя члена.
0
Модератор
Эксперт по электронике
8981 / 6748 / 921
Регистрация: 14.02.2011
Сообщений: 23,871
15.04.2013, 21:54
Цитата Сообщение от xparovozx Посмотреть сообщение
он у меня пишет, требуется имя члена.
какого члена?
вот тебе рабочая процедура
C++
1
2
3
4
5
6
7
8
9
void CDrawElView::OnDraw(CDC* pDC)
{
    CDrawElDoc* pDoc = GetDocument();
    ASSERT_VALID(pDoc);
    if (!pDoc)
        return;
   pDC->Ellipse(0,0,100,100);
    // TODO: добавьте здесь код отрисовки для собственных данных
}
0
0 / 0 / 0
Регистрация: 13.08.2014
Сообщений: 11
19.09.2014, 13:36
Подскажите, а как сделать эллипс полым, у меня заполняет чёрным внутри, а мне нужна только граница.
pDC_a->Ellipse(Package_motin.f_x_coord-50, Package_motin.f_y_coord+50, Package_motin.f_x_coord+50, Package_motin.f_y_coord-50);
0
Неэпический
 Аватар для Croessmah
18149 / 10731 / 2067
Регистрация: 27.09.2012
Сообщений: 27,035
Записей в блоге: 1
19.09.2014, 13:43
Цитата Сообщение от 13042014 Посмотреть сообщение
Подскажите, а как сделать эллипс полым, у меня заполняет чёрным внутри, а мне нужна только граница.
Поменяйте кисть на HOLLOW_BRUSH или NULL_BRUSH
1
0 / 0 / 0
Регистрация: 13.08.2014
Сообщений: 11
19.09.2014, 14:00
Добавила CBrush Brush(NULL_BRUSH); но без изменений
Попробовала CBrush Brush(HOLLOW_BRUSH); тоже самое
Где-то что-то ещё надо объявить?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
19.09.2014, 14:00
Помогаю со студенческими работами здесь

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

Как нарисовать две точки с различными координатами?
Ребята, подскажите пожалуйста каким образом можно нарисовать в 3Д с помощью (plot3 или scatter3) 2 точки. У каждой из них свои координаты....

Как нарисовать линию с плавным переливанием цвета от стартовой точки к конечной?
Казалось бы, простая задача, но как? :) Допустим на QPainter

Нарисовать две звезды, окрашенные в разные цвета
1. составить программу которая нарисует две звезды окрашенные в разные цвета

Пятиугольник фиолетового цвета со сторонами в виде пунктирных линий
Вывести на экран монитора пятиугольник фиолетового (Magenta) цвета со сторонами в виде пунктирных линий одинарной толщины, цвет фона экрана...


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

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Новые блоги и статьи
Программный контроль заполнения реквизита табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать контроль заполнения реквизита "ПричинаСписания". . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
Вывод данных в справочнике через динамический список
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Программное заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru