HIK Elektronikus Felsőoktatási Tankönyv- és Szakkönyvtár
A Kempelen Farkas Felsőoktatási Digitális Tankönyvtár/vagy más megjelenítő által közvetített digitális tartalmat a felhasználó a szerzői jogról szóló 1999. évi LXXVI. tv. 33. paragrafus (4) bekezdésében meghatározott oktatási, illetve tudományos kutatási célra használhatja fel. A felhasználó a digitális tartalmat képernyőn megjelenítheti, letöltheti, arról elektronikus adathordozóra vagy papíralapon másolatot készíthet, adatrögzítő rendszerében tárolhatja. A Kempelen Farkas Felsőoktatási Digitális Tankönyvtár/vagy más megjelenítő weblapján található digitális tartalmak üzletszerû felhasználása tilos, valamint kizárt a digitális tartalom módosítása és átdolgozása, illetve az ilyen módon keletkezett származékos anyag további felhasználása.

17.14. Grafikus konténerek

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