Garfikus állapotot a Garphics objektumban tároljuk. A GDI+ a konténerek használatával lehetővé teszi, hogy átmenetileg megváltoztassuk egy grafikus objektum állapotát. A BeginContainer és az EndContainer metódusok között bármilyen változtatást hajtunk végre a grafikus objektumon, az nem befolyásolja az objektum konténeren kívüli állapotát.
A következő példában különböző helyekre tesszük ki a téglalapba írt szöveget. Figyeljük meg a vonatkoztatási pont, az origó eltolását.
private void DrawHello(Graphics myGraphics)
{
GraphicsContainer myContainer;
myContainer = myGraphics.BeginContainer();
Font myFont = new Font("Times New Roman",26);
StringFormat myStringFormat = new StringFormat();
SolidBrush myBrush=new SolidBrush(Color.Gray);
Pen myPen= new Pen(myBrush,2);
myGraphics.DrawRectangle(myPen,0,0,100,50);
myGraphics.DrawString( "Hello!", myFont, myBrush, 0,0, myStringFormat);
myGraphics.EndContainer(myContainer);
}
private void myExampleContainers(PaintEventArgs e)
{Graphics myGraphics= e.Graphics;
GraphicsContainer myGraphicsContainer;
// új origónk a (100,100) pontba kerül
myGraphics.TranslateTransform(100, 100);
// Hello! kiiratása az új origóba.
DrawHello(myGraphics);
// Hello!-t újból kiírjuk, de előszőr eltoljuk x irányba
myGraphics.TranslateTransform(100, 0, MatrixOrder.Append);
// Forgatás -30 fokkal a konténeren belül
myGraphicsContainer = myGraphics.BeginContainer();
myGraphics.RotateTransform(-30);
DrawHello(myGraphics);
myGraphics.EndContainer(myGraphicsContainer);
// Hello!-t újból kiírjuk, de előszőr tovább toljuk x irányba
myGraphics.TranslateTransform(100, 0, MatrixOrder.Append);
DrawHello(myGraphics);
// Forgatás 45 fokkal és skálázás a konténeren belül
myGraphicsContainer = myGraphics.BeginContainer();
myGraphics.ScaleTransform(2, 1.5f);
myGraphics.RotateTransform(45, MatrixOrder.Append);
DrawHello(myGraphics);
myGraphics.EndContainer(myGraphicsContainer);
}
Példa a konténerek használatára
Programozás tankönyv
XVII. Fejezet