Visual C++ .NET/2D/Shape
Версия от 15:31, 26 мая 2010; (обсуждение)
Содержание
Draw shapes
using namespace System;
using namespace System::ComponentModel;
using namespace System::Collections;
using namespace System::Windows::Forms;
using namespace System::Data;
using namespace System::Drawing;
public ref class Form1 : public System::Windows::Forms::Form
{
public:
Form1(void)
{
this->SuspendLayout();
this->AutoScaleDimensions = System::Drawing::SizeF(6, 13);
this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font;
this->ClientSize = System::Drawing::Size(300, 300);
this->Name = L"Form1";
this->Text = L"Happy Face";
this->Paint +=
gcnew System::Windows::Forms::PaintEventHandler(this,
&Form1::Form1_Paint);
this->ResumeLayout(false);
}
System::Void Form1_Paint(System::Object^ sender,
System::Windows::Forms::PaintEventArgs^ e)
{
Graphics^ g = e->Graphics;
Pen^ b4pen = gcnew Pen(Color::Black, 4);
// Head
Rectangle rect = Drawing::Rectangle(25, 25, 250, 250);
g->FillEllipse(Brushes::Yellow, rect);
g->DrawEllipse(b4pen, rect);
// Mouth
g->FillPie(Brushes::White, 100, 175, 100, 50, 0, 180);
g->DrawPie(b4pen, 100, 175, 100, 50, 0, 180);
// Left Eye
rect = Drawing::Rectangle(100, 100, 25, 25);
g->FillEllipse(Brushes::White, rect);
g->DrawEllipse(b4pen, rect);
// Right Eye
rect = Drawing::Rectangle(175, 100, 25, 25);
g->FillEllipse(Brushes::White, rect);
g->DrawEllipse(b4pen, rect);
// Get rid of pen Created
delete b4pen;
}
};
[STAThreadAttribute]
int main(array<System::String ^> ^args)
{
Application::Run(gcnew Form1());
return 0;
}
Intersect Or Union
using namespace System;
using namespace System::ComponentModel;
using namespace System::Collections;
using namespace System::Windows::Forms;
using namespace System::Data;
using namespace System::Drawing;
public ref class Form1 : public System::Windows::Forms::Form
{
public:
Form1(void)
{
InitializeComponent();
Drawing::Point point1 = Drawing::Point(25,25);
Drawing::Point point2 = Drawing::Point(100,100);
Drawing::Size size = Drawing::Size(200, 150);
rect1 = Drawing::Rectangle(point1, size);
rect2 = Drawing::Rectangle(point2, size);
}
Drawing::Rectangle rect1;
Drawing::Rectangle rect2;
void InitializeComponent(void)
{
this->SuspendLayout();
this->AutoScaleDimensions = System::Drawing::SizeF(6, 13);
this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font;
this->ClientSize = System::Drawing::Size(330, 300);
this->Name = L"Form1";
this->Text = L"Click in Window";
this->Paint +=
gcnew System::Windows::Forms::PaintEventHandler(this,
&Form1::Form1_Paint);
this->MouseDown +=
gcnew System::Windows::Forms::MouseEventHandler(this,
&Form1::Form1_MouseDown);
this->ResumeLayout(false);
}
System::Void Form1_Paint(System::Object^ sender,
System::Windows::Forms::PaintEventArgs^ e)
{
// Draw a couple of rectangles
e->Graphics->DrawRectangle(Pens::Black, rect1);
e->Graphics->DrawRectangle(Pens::Black, rect2);
}
System::Void Form1_MouseDown(System::Object^ sender,
System::Windows::Forms::MouseEventArgs^ e)
{
// build a point from x,y coords of mouse click
Point p = Point(e->X, e->Y);
// did we click in the intersection?
if (Rectangle::Intersect(rect1, rect2).Contains(p))
Text = "Intersection and Union";
// did we click in the union?
else if (Rectangle::Union(rect1, rect2).Contains(p))
Text = "Union";
// did we miss altogether
else
Text = "Outside of Both";
}
};
[STAThreadAttribute]
int main(array<System::String ^> ^args)
{
Application::Run(gcnew Form1());
return 0;
}
Optimized Happy Face
using namespace System;
using namespace System::ComponentModel;
using namespace System::Collections;
using namespace System::Windows::Forms;
using namespace System::Data;
using namespace System::Drawing;
public ref class Form1 : public System::Windows::Forms::Form
{
public:
Form1(void)
{
InitializeComponent();
Head = Drawing::Rectangle(125, 25, 250, 250);
Mouth = Drawing::Rectangle(200, 175, 100, 50);
LEye = Drawing::Rectangle(200, 100, 25, 25);
REye = Drawing::Rectangle(275, 100, 25, 25);
b4pen = gcnew Pen(Color::Black, 4);
}
System::Drawing::Rectangle Head;
System::Drawing::Rectangle Mouth;
System::Drawing::Rectangle LEye;
System::Drawing::Rectangle REye;
Pen^ b4pen;
void InitializeComponent(void)
{
this->SuspendLayout();
this->AutoScrollMinSize = System::Drawing::Size(400,400);
this->AutoScaleDimensions = System::Drawing::SizeF(6, 13);
this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font;
this->ClientSize = System::Drawing::Size(292, 273);
this->Name = L"Form1";
this->Text = L"Optimized Happy Face";
this->Paint +=
gcnew System::Windows::Forms::PaintEventHandler(this,
&Form1::Form1_Paint);
this->ResumeLayout(false);
}
System::Void Form1_Paint(System::Object^ sender, System::Windows::Forms::PaintEventArgs^ e)
{
Graphics^ g = e->Graphics;
Drawing::Rectangle ClipRect = e->ClipRectangle;
ClipRect.Offset(-AutoScrollPosition.X, -AutoScrollPosition.Y);
g->TranslateTransform((float)AutoScrollPosition.X,
(float)AutoScrollPosition.Y);
if (!(Rectangle::Intersect(ClipRect, Head)).IsEmpty)
{
g->FillEllipse(Brushes::Yellow, Head);
g->DrawEllipse(b4pen, Head);
if (!(Rectangle::Intersect(ClipRect, Mouth)).IsEmpty)
{
g->FillPie(Brushes::White, Mouth, 0, 180);
g->DrawPie(b4pen, Mouth, 0, 180);
}
if (!(Rectangle::Intersect(ClipRect, LEye)).IsEmpty)
{
g->FillEllipse(Brushes::White, LEye);
g->DrawEllipse(b4pen, LEye);
}
if (!(Rectangle::Intersect(ClipRect, REye)).IsEmpty)
{
g->FillEllipse(Brushes::White, REye);
g->DrawEllipse(b4pen, REye);
}
}
}
};
[STAThreadAttribute]
int main(array<System::String ^> ^args)
{
Application::Run(gcnew Form1());
return 0;
}
Print shapes out
using namespace System;
using namespace System::ComponentModel;
using namespace System::Collections;
using namespace System::Windows::Forms;
using namespace System::Data;
using namespace System::Drawing;
public ref class Form1 : public System::Windows::Forms::Form
{
public:
Form1(void)
{
InitializeComponent();
}
System::Drawing::Printing::PrintDocument^ printDocument;
System::Windows::Forms::PrintDialog^ printDialog;
System::ComponentModel::Container ^components;
void InitializeComponent(void)
{
this->printDocument =
(gcnew System::Drawing::Printing::PrintDocument());
this->printDialog = (gcnew System::Windows::Forms::PrintDialog());
this->SuspendLayout();
//
// printDocument
//
this->printDocument->PrintPage +=
gcnew System::Drawing::Printing::PrintPageEventHandler(this,
&Form1::printDocument_PrintPage);
//
// printDialog
//
this->printDialog->Document = this->printDocument;
//
// Form1
//
this->AutoScaleDimensions = System::Drawing::SizeF(6, 13);
this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font;
this->ClientSize = System::Drawing::Size(300, 300);
this->Name = L"Form1";
this->Text = L"Click to Print";
this->Paint +=
gcnew System::Windows::Forms::PaintEventHandler(this,
&Form1::Form1_Paint);
this->Click +=
gcnew System::EventHandler(this, &Form1::Form1_Click);
this->ResumeLayout(false);
}
System::Void Form1_Click(System::Object^ sender, System::EventArgs^ e)
{
if (printDialog->ShowDialog() == Windows::Forms::DialogResult::OK)
{
printDocument->Print();
}
}
System::Void printDocument_PrintPage(System::Object^ sender,
System::Drawing::Printing::PrintPageEventArgs^ e)
{
CreateHappyFace(e->Graphics); //Same call as Form1_Paint
e->HasMorePages = false;
}
System::Void Form1_Paint(System::Object^ sender,
System::Windows::Forms::PaintEventArgs^ e)
{
CreateHappyFace(e->Graphics);//Same call as printDocument_PrintPage
}
// Generic Happy Face Creator
void CreateHappyFace(Graphics ^g)
{
Pen^ b4pen = gcnew Pen(Color::Black, 4);
Rectangle rect = Drawing::Rectangle(25, 25, 250, 250);
g->FillEllipse(Brushes::Yellow, rect);
g->DrawEllipse(b4pen, rect);
g->FillPie(Brushes::White, 100, 175, 100, 50, 0, 180);
g->DrawPie(b4pen, 100, 175, 100, 50, 0, 180);
rect = Drawing::Rectangle(100, 100, 25, 25);
g->FillEllipse(Brushes::White, rect);
g->DrawEllipse(b4pen, rect);
rect = Drawing::Rectangle(175, 100, 25, 25);
g->FillEllipse(Brushes::White, rect);
g->DrawEllipse(b4pen, rect);
delete b4pen;
}
};
[STAThreadAttribute]
int main(array<System::String ^> ^args)
{
Application::Run(gcnew Form1());
return 0;
}
Scrolling shapes
using namespace System;
using namespace System::ComponentModel;
using namespace System::Collections;
using namespace System::Windows::Forms;
using namespace System::Data;
using namespace System::Drawing;
public ref class Form1 : public System::Windows::Forms::Form
{
public:
Form1(void)
{
this->SuspendLayout();
this->AutoScrollMinSize = System::Drawing::Size(400,400);
this->AutoScaleDimensions = System::Drawing::SizeF(6, 13);
this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font;
this->ClientSize = System::Drawing::Size(292, 273);
this->Name = L"Form1";
this->Text = L"Scrolling Happy Face";
this->Paint +=
gcnew System::Windows::Forms::PaintEventHandler(this,
&Form1::Form1_Paint);
this->ResumeLayout(false);
}
System::Void Form1_Paint(System::Object^ sender,
System::Windows::Forms::PaintEventArgs^ e)
{
Graphics^ g = e->Graphics;
g->TranslateTransform((float)AutoScrollPosition.X,
(float)AutoScrollPosition.Y);
Pen^ b4pen = gcnew Pen(Color::Black, 4);
// Head
Rectangle rect = Drawing::Rectangle(25, 25, 250, 250);
g->FillEllipse(Brushes::Yellow, rect);
g->DrawEllipse(b4pen, rect);
// Mouth
g->FillPie(Brushes::White, 100, 175, 100, 50, 0, 180);
g->DrawPie(b4pen, 100, 175, 100, 50, 0, 180);
// Left Eye
rect = Drawing::Rectangle(100, 100, 25, 25);
g->FillEllipse(Brushes::White, rect);
g->DrawEllipse(b4pen, rect);
// Right Eye
rect = Drawing::Rectangle(175, 100, 25, 25);
g->FillEllipse(Brushes::White, rect);
g->DrawEllipse(b4pen, rect);
// Get rid of pen Created
delete b4pen;
}
};
[STAThreadAttribute]
int main(array<System::String ^> ^args)
{
Application::Run(gcnew Form1());
return 0;
}