■ フォーム表示時のフォームへの直接描画とpictureBoxへの描画
| フォームが表示された時に、同時に下記を実行する例です。 @フォームへの直接描画 Aピクチャーボックスへの直接描画 それぞれ Form 及びPictureBoxのPaintイベントの中にコードを描画します。 以下、 Form1.h 抜粋 |
|
<プログラム例>
private: System::Void Form1_Paint(System::Object^ sender, System::Windows::Forms::PaintEventArgs^ e)
{
Graphics^ g = e->Graphics;
Pen^ redPen = gcnew Pen(Color::Red, 3); //太さ3の赤ペン
SolidBrush^ br = gcnew SolidBrush(Color::Red); //赤のブラシ
System::Drawing::Font^ objFont = gcnew System::Drawing::Font("MS Pゴシック", 15); //文字サイズ: 15ドッド
g->DrawEllipse(redPen,10,10,30,30);
g->DrawString("この赤い円はフォームに直接描画されています",objFont, br, 0,40); //文字描画開始位置(0,40) //基点:フォームの左上
}
private: System::Void pictureBox1_Paint(System::Object^ sender, System::Windows::Forms::PaintEventArgs^ e)
{
Graphics^ g = e->Graphics;
Pen^ bluePen = gcnew Pen(Color::Blue, 5); //太さ5の青ペン
SolidBrush^ br = gcnew SolidBrush(Color::Blue); //赤のブラシ
System::Drawing::Font^ objFont = gcnew System::Drawing::Font("MS Pゴシック", 20); //文字サイズ: 20ドッド
g->DrawEllipse(bluePen,10,10,30,30);
g->DrawString("この青い円はpictureBoxに描画されています",objFont, br, 0,40); ////文字描画開始位置(0,40) //基点: pictureBoxの左上
}
|
<実行結果> ![]() |
| ピクチャーボックスに 直線、円、矩形を描画 |
|
<プログラム例>
private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e)
{
// 描画を行うグラフィックスクラスを生成
Graphics^ g = pictureBox1->CreateGraphics();
// 画像の上に文字列を書き込み
// System::Drawing::Font^ myFont = gcnew System::Drawing::Font(FontFamily::GenericSansSerif, 14, FontStyle::Bold);
// g->DrawString("書き込む文字", myFont, Brushes::Red, 0, 0);
// 画像の上に直線を描画
Pen^ blackPen = gcnew Pen(Color::Black, 3);
g->DrawLine(blackPen, 0, 30, pictureBox1->Width, 60); // 普通の黒色直線 点1(0,30) 点2(右端,30)
g->DrawLine(blackPen, 0, 60, pictureBox1->Width, 30); // 普通の黒色直線 点1(0,60) 点2(右端,30)
//太い赤線の描画
Pen^ boldPen = gcnew Pen(Color::Red, 8); // 太い線赤線オブジェクト生成
g->DrawLine(boldPen, 0, 90, pictureBox1->Width, 90); //点1(0,90) 点2(右端,90)
//青色の点線の描画
Pen^ dotPen = gcnew Pen(Color::Blue, 5); //青色、線幅5
dotPen->DashStyle = System::Drawing::Drawing2D::DashStyle::Dot;
//dotPen->DashStyle = DashStyle::Dot; //この場合以下が必要:using namespace System::Drawing::Drawing2D;
g->DrawLine(dotPen, 0, 110, pictureBox1->Width, 110);
//一点鎖線の描画
dotPen->DashStyle = System::Drawing::Drawing2D::DashStyle::DashDot; //1点鎖線
g->DrawLine(dotPen, 0, 140, pictureBox1->Width, 140);
dotPen->DashStyle = System::Drawing::Drawing2D::DashStyle::DashDotDot; //2点鎖線
g->DrawLine(dotPen, 0, 170, pictureBox1->Width, 170); //
//円の描画
Pen^ redPen = gcnew Pen(Color::Black, 3);
g->DrawEllipse(redPen, 65, 220, 75,75); //赤線 基点(65,220) 幅×高さ:100×50
SolidBrush^ greenBrush = gcnew SolidBrush(Color::Green);
g->FillEllipse(greenBrush, 65, 320, 75, 75); //緑色塗りつぶし 基点(65,220) 幅×高さ:100×50
//矩形の描画
SolidBrush^ redBrush = gcnew SolidBrush(Color::Red);
g->DrawRectangle(blackPen, 50, 400, 100, 50); // 四角形を描画する //黒線、基点(50.400)、幅×高さ:100×50
g->FillRectangle(redBrush, 50, 470, 100, 50); // 塗り潰しの四角形を描画する//赤色塗潰し 基点(50,470)、幅×高さ:100×50
}
|
<実行結果>![]() |
| フォームに直接描画する場合は、上記のコードで pictureBox1を thisに変更するだけです。 |
|
<プログラム例>
private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e)
{
// // 描画を行うグラフィックスクラスを生成
Graphics^ g = this->CreateGraphics();
// 画像の上に直線を描画
Pen^ blackPen = gcnew Pen(Color::Black, 3);
g->DrawLine(blackPen, 0, 30, this->Width, 60); // 普通の黒色直線 点1(0,30) 点2(右端,30)
g->DrawLine(blackPen, 0, 60, this->Width, 30); // 普通の黒色直線 点1(0,60) 点2(右端,30)
//太い赤線の描画
Pen^ boldPen = gcnew Pen(Color::Red, 8); // 太い線赤線オブジェクト生成
g->DrawLine(boldPen, 0, 90, this->Width, 90); //点1(0,90) 点2(右端,90)
//青色の点線の描画
Pen^ dotPen = gcnew Pen(Color::Blue, 5); //青色、線幅5
dotPen->DashStyle = System::Drawing::Drawing2D::DashStyle::Dot;
//dotPen->DashStyle = DashStyle::Dot; //この場合以下が必要:using namespace System::Drawing::Drawing2D;
g->DrawLine(dotPen, 0, 110, this->Width, 110);
//一点鎖線の描画
dotPen->DashStyle = System::Drawing::Drawing2D::DashStyle::DashDot; //1点鎖線
g->DrawLine(dotPen, 0, 140, this->Width, 140);
dotPen->DashStyle = System::Drawing::Drawing2D::DashStyle::DashDotDot; //2点鎖線
g->DrawLine(dotPen, 0, 170, this->Width, 170); //
//円の描画
Pen^ redPen = gcnew Pen(Color::Black, 3);
g->DrawEllipse(redPen, 65, 220, 75,75); //赤線 基点(65,220) 幅×高さ:100×50
SolidBrush^ greenBrush = gcnew SolidBrush(Color::Green);
g->FillEllipse(greenBrush, 65, 320, 75, 75); //緑色塗りつぶし 基点(65,220) 幅×高さ:100×50
//矩形の描画
SolidBrush^ redBrush = gcnew SolidBrush(Color::Red);
g->DrawRectangle(blackPen, 50, 400, 100, 50); // 四角形を描画する //黒線、基点(50.400)、幅×高さ:100×50
g->FillRectangle(redBrush, 50, 470, 100, 50); // 塗り潰しの四角形を描画する//赤色塗潰し 基点(50,470)、幅×高さ:100×50
}
|
<実行結果>![]() |
<プログラム例>
main() { }