Visual C++ .NET/2D/Shape
Содержание
Draw shapes
<source lang="csharp">
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;
}
</source>
Intersect Or Union
<source lang="csharp">
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;
}
</source>
Optimized Happy Face
<source lang="csharp">
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;
}
</source>
Print shapes out
<source lang="csharp">
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;
}
</source>
Scrolling shapes
<source lang="csharp">
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;
}
</source>