Рисование прямоугольников мышью
08.03.2016, 18:17. Показов 1814. Ответов 0
Доброго времени суток.
Я написал программу рандомного создания прямоугольников в Panel, но мне нужно рисовать их мышкой. Сами функции Рисования мышью есть, но они в чем то ошибочны, но я не могу разобраться, как их изменить для корректной работы.
Функции взяты с рисования линий в той ж панели с цветами с colordialog. Все Line уже переименованы в Rectangle
Что еще нужно изменить?
функции рисования мышкой :
| 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
| void Project3::MyForm::pCanvas_MouseDown(System::
Object ^sender, System::Windows::Forms::MouseEventArgs ^e) {
isMouseDown = true;
firstPoint.coordX = e->X;
firstPoint.coordY = e->Y;
}
void Project3::MyForm::pCanvas_MouseMove(System::
Object ^sender, System::Windows::Forms::MouseEventArgs ^e) {
if (isMouseDown) {
System::Drawing::Graphics ^graphic =
pCanvas->CreateGraphics();
graphic->Clear(Color::FromName("Window"));
graphic->DrawRectangle(gcnew Pen(colorDialog1->Color, 3),
firstPoint.coordX, firstPoint.coordY,
secondPoint.coordX, secondPoint.coordY);
}
}
void pCanvas_MouseUp(System::
Object ^sender, System::Windows::Forms::MouseEventArgs ^e) {
isMouseDown = false;
}
void Project3::MyForm::bInsert_Click(System::Object ^sender,
System::EventArgs ^e) {
rectanglesArray[rectanglesCounter]->firstLinePoint.coordX =
firstPoint.coordX;
rectanglesArray[rectanglesCounter]->firstLinePoint.coordY =
firstPoint.coordY;
rectanglesArray[rectanglesCounter]->secondLinePoint.coordX =
secondPoint.coordX;
rectanglesArray[rectanglesCounter]->secondLinePoint.coordY =
secondPoint.coordY;
rectanglesArray[rectanglesCounter]->lineColorARGB =
colorDialog1->Color.ToArgb();
rectanglesCounter++;
tbArraySize->Text = System::Convert::ToString(System::
Convert::ToInt16(tbArraySize->Text) - 1);
} |
|
весь .cpp
| 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
109
110
111
112
113
114
115
| #include "MyForm.h"
#include <stdlib.h>
#include <time.h>
bool isMouseDown; //флаг нажатия кнопки мыши
int rectanglesArraySize, rectanglesCounter; //размерность и счетчик объектов
struct Points {
int coordX, coordY;
//координаты точки
};
Points firstPoint, secondPoint;
struct Rectangles {
Points firstRectanglePoint, secondRectanglePoint; //координаты прямоугольника
int RectangleColorARGB; //цвет прямоугольника
void DrawRectangle(System::Windows::Forms::Panel^pCanvas);
};
void DrawAll(Rectangles * rectanglesArray, int rectanglesCount, System::Windows::Forms::Panel^pCanras);
void Rectangles::DrawRectangle(System::Windows::Forms::Panel ^ pCanvas)
{
System::Drawing::Graphics^canvasGraphic = pCanvas->CreateGraphics();
canvasGraphic->DrawRectangle(gcnew System::Drawing::Pen(System::Drawing::Color::FromArgb(RectangleColorARGB)),
firstRectanglePoint.coordX,
firstRectanglePoint.coordY,
abs(secondRectanglePoint.coordX - firstRectanglePoint.coordX),
abs(secondRectanglePoint.coordY - firstRectanglePoint.coordY));
}
void DrawAll(Rectangles *rectanglesArray, int rectanglesCount, System::Windows::Forms::Panel^ pCanvas)
{
for (int i = 0; i < rectanglesCount; i++)
{
rectanglesArray[i].DrawRectangle(pCanvas);
}
}
void Project3::MyForm::bDrawRectangles_Click(System::Object^ sender, System::EventArgs^ e)
{
int rectanglesCount =
System::Convert::ToInt16(tbArraySize->Text);
Rectangles *rectanglesArray = new Rectangles[rectanglesCount];
srand((unsigned)time(NULL));
for (int i = 0; i < rectanglesCount; i++) {
rectanglesArray[i].firstRectanglePoint.coordX = rand() % pCanvas->Width;
rectanglesArray[i].firstRectanglePoint.coordY = rand() % pCanvas->Height;
rectanglesArray[i].secondRectanglePoint.coordX = rectanglesArray[i].firstRectanglePoint.coordX + rand() % (pCanvas->Width -
rectanglesArray[i].firstRectanglePoint.coordX + 1);
rectanglesArray[i].secondRectanglePoint.coordY = rectanglesArray[i].firstRectanglePoint.coordY + rand() % (pCanvas->Height -
rectanglesArray[i].firstRectanglePoint.coordY + 1);
rectanglesArray[i].RectangleColorARGB = System::Drawing::Color::FromArgb(rand() % 255, rand() % 255, rand() % 255, rand() % 255).ToArgb();
}
DrawAll(rectanglesArray, rectanglesCount, pCanvas);
delete[]rectanglesArray;
}
/*
void Project3::MyForm::pCanvas_MouseDown(System::
Object ^sender, System::Windows::Forms::MouseEventArgs ^e) {
isMouseDown = true;
firstPoint.coordX = e->X;
firstPoint.coordY = e->Y;
}
void Project3::MyForm::pCanvas_MouseMove(System::
Object ^sender, System::Windows::Forms::MouseEventArgs ^e) {
if (isMouseDown) {
System::Drawing::Graphics ^graphic =
pCanvas->CreateGraphics();
graphic->Clear(Color::FromName("Window"));
graphic->DrawRectangle(gcnew Pen(colorDialog1->Color, 3),
firstPoint.coordX, firstPoint.coordY,
secondPoint.coordX, secondPoint.coordY);
}
}
void pCanvas_MouseUp(System::
Object ^sender, System::Windows::Forms::MouseEventArgs ^e) {
isMouseDown = false;
}
void Project3::MyForm::bInsert_Click(System::Object ^sender,
System::EventArgs ^e) {
rectanglesArray[rectanglesCounter]->firstLinePoint.coordX =
firstPoint.coordX;
rectanglesArray[rectanglesCounter]->firstLinePoint.coordY =
firstPoint.coordY;
rectanglesArray[rectanglesCounter]->secondLinePoint.coordX =
secondPoint.coordX;
rectanglesArray[rectanglesCounter]->secondLinePoint.coordY =
secondPoint.coordY;
rectanglesArray[rectanglesCounter]->lineColorARGB =
colorDialog1->Color.ToArgb();
rectanglesCounter++;
tbArraySize->Text = System::Convert::ToString(System::
Convert::ToInt16(tbArraySize->Text) - 1);
}
*/ |
|
Добавлено через 14 минут

Сообщение от AHIME
Все Line уже переименованы в Rectangle
|
К сожалению, не все
| 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
| void Project3::MyForm::pCanvas_MouseDown(System::
Object ^sender, System::Windows::Forms::MouseEventArgs ^e) {
isMouseDown = true;
firstPoint.coordX = e->X;
firstPoint.coordY = e->Y;
}
void Project3::MyForm::pCanvas_MouseMove(System::
Object ^sender, System::Windows::Forms::MouseEventArgs ^e) {
if (isMouseDown) {
System::Drawing::Graphics ^graphic =
pCanvas->CreateGraphics();
graphic->Clear(Color::FromName("Window"));
graphic->DrawRectangle(gcnew Pen(colorDialog1->Color, 3),
firstPoint.coordX, firstPoint.coordY,
secondPoint.coordX, secondPoint.coordY);
}
}
void pCanvas_MouseUp(System::
Object ^sender, System::Windows::Forms::MouseEventArgs ^e) {
isMouseDown = false;
}
void Project3::MyForm::bInsert_Click(System::Object ^sender,
System::EventArgs ^e) {
rectanglesArray[rectanglesCounter]->firstRectanglePoint.coordX =
firstPoint.coordX;
rectanglesArray[rectanglesCounter]->firstRectanglePoint.coordY =
firstPoint.coordY;
rectanglesArray[rectanglesCounter]->secondRectanglePoint.coordX =
secondPoint.coordX;
rectanglesArray[rectanglesCounter]->secondRectanglePoint.coordY =
secondPoint.coordY;
rectanglesArray[rectanglesCounter]->RectangleColorARGB =
colorDialog1->Color.ToArgb();
rectanglesCounter++;
tbArraySize->Text = System::Convert::ToString(System::
Convert::ToInt16(tbArraySize->Text) - 1);
} |
|
теперь все
0
|