カスタムコントロール - peace098beat/windows_applicaciton GitHub Wiki
Windows フォームにおけるグラフィックスと描画
https://msdn.microsoft.com/ja-jp/library/a36fascx(v=vs.110).aspx
このセクションの内容
グラフィックスの概要
グラフィックスに関連するマネージ クラスの概要を提供します。
GDI+ マネージ コードについて
マネージ GDI+ クラスに関する情報を提供します。
マネージ グラフィックス クラスの使用
GDI+ マネージ クラスを使用して、さまざまなタスクを完了する方法を示します。
関連項目
System.Drawing
GDI+ の基本的なグラフィックス機能を使用できるようにします。
System.Drawing.Drawing2D
2 次元グラフィックスおよびベクター グラフィックス機能の詳細を提供します。
System.Drawing.Imaging
高度な GDI+ イメージング機能を提供します。
System.Drawing.Text
高度な GDI+ タイポグラフィ機能を提供します。 この名前空間のクラスを使用して、フォントのコレクションを作成して使用することができます。
System.Drawing.Printing
印刷機能を提供します。
方法 : コントロール クラスを継承する
https://msdn.microsoft.com/ja-jp/library/skcysbt2(v=vs.110).aspx
カスタム コントロールを作成するには
1. 新しい Windows アプリケーション プロジェクトまたは Windows コントロール ライブラリ プロジェクトを作成します。
2. [プロジェクト] メニューの [クラスの追加] をクリックします。
3. [新しい項目の追加] ダイアログ ボックスにある [カスタム コントロール] をクリックします。
4. 新しいカスタム コントロールがプロジェクトに追加されます。
5. 7 キーを押してカスタム コントロールのコード エディターを開きます。
6. OnPaint メソッドを見つけます。このメソッドは、基本クラスの OnPaint メソッドの呼び出しを除いて、空白になっています。
7. コントロールで使用するカスタム描画を含むように、コードを修正します。
8. コントロールのグラフィックスを描画するコードの作成については、「コントロールのカスタム描画およびレンダリング」を参照してください。
9. コントロールに含めるカスタム メソッド、カスタム プロパティ、カスタム イベントを実装します。
10. 保存してコントロールの動作確認を行います。
Control.CreateGraphics メソッド ()
private void AutoSizeControl(Control control, int textPadding)
{
// Create a Graphics object for the Control.
Graphics g = control.CreateGraphics();
// Get the Size needed to accommodate the formatted Text.
Size preferredSize = g.MeasureString(
control.Text, control.Font).ToSize();
// Pad the text and resize the control.
control.ClientSize = new Size(
preferredSize.Width + (textPadding * 2),
preferredSize.Height+(textPadding * 2) );
// Clean up the Graphics object.
g.Dispose();
}
グローバル変換とローカル変換
https://msdn.microsoft.com/ja-jp/library/c499ats3(v=vs.110).aspx
ローカル変換 ローカル変換は、描画される特定の項目に対して適用されます。 たとえば、GraphicsPath オブジェクトの Transform メソッドを使用すると、そのパスのデータ点を変換できます。 次の例は、変換せずに四角形を描画し、回転変換を実行してパスを描画します。 ワールド変換は適用されないことを前提とします。
Matrix myMatrix = new Matrix();
myMatrix.Rotate(45);
myGraphicsPath.Transform(myMatrix);
myGraphics.DrawRectangle(myPen, 10, 10, 100, 50);
myGraphics.DrawPath(myPen, myGraphicsPath);
さまざまな結果を得るために、ワールド変換とローカル変換を組み合わせて実行できます。 たとえば、ワールド変換を使用して座標系を変更し、新しい座標系上に描画されたオブジェクトをローカル変換を使用して回転およびスケーリングできます。 たとえば、クライアント領域の左端から 200 ピクセル、上端から 150 ピクセルの位置にある点を座標系の原点にするとします。 また、単位がピクセル、x 軸が右向き、y 軸が上向きであることを前提とします。 既定の座標系の y 軸は下向きであるため、水平軸を基準とした反転を実行する必要があります。 このような反転の行列を次の図に示します。 変換 次に、右に 200 単位、下に 150 単位の平行移動を実行する必要があるとします。 Graphics オブジェクトのワールド変換を設定することにより、上で説明した座標系を設定する例を次に示します。
Matrix myMatrix = new Matrix(1, 0, 0, -1, 0, 0); // Y軸反転
myGraphics.Transform = myMatrix;
myGraphics.TranslateTransform(200, 150, MatrixOrder.Append);
左下隅が新しい座標系の原点である四角形 1 つで構成されるパスを作成するコードを次に示します。このコードは、上の例の末尾に記述します。 この四角形は、ローカル変換を適用せずに 1 回、ローカル変換を適用して 1 回塗りつぶされます。 このローカル変換は、水平方向にファクター 2 のスケーリングと、それに続く 30°の回転で構成されます。
// Create the path.
GraphicsPath myGraphicsPath = new GraphicsPath();
Rectangle myRectangle = new Rectangle(0, 0, 60, 60);
myGraphicsPath.AddRectangle(myRectangle);
// Fill the path on the new coordinate system.
// No local transformation
myGraphics.FillPath(mySolidBrush1, myGraphicsPath);
// Set the local transformation of the GraphicsPath object.
Matrix myPathMatrix = new Matrix();
myPathMatrix.Scale(2, 1);
myPathMatrix.Rotate(30, MatrixOrder.Append);
myGraphicsPath.Transform(myPathMatrix);
// Fill the transformed path on the new coordinate system.
myGraphics.FillPath(mySolidBrush2, myGraphicsPath);
新しい座標系と 2 つの四角形を次の図に示します。