Visual C++ .NET/2D/Shape

Материал из .Net Framework эксперт
Перейти к: навигация, поиск

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>