Добавил:
bekan
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:2-semestr / 10-ameliy_jif
.pdf
10-ámeliy jumıs. GUI ortalıǵında grafikalıq imkaniyatlar. Tuwrı sızıq
hám hár túrli geometriyalıq figuralardı sızıw.
Jumıstıń maqseti: Windows Forms (C++/CLI) ortalıǵında GDI+
(Graphics Device Interface Plus) grafikalıq kitapxanası menen islewdi úyreniw.
Grafikalıq kontekst (`Graphics`) túsinigin, reń (`Color`), qálem (`Pen`) hám kist
(`Brush`) túsiniklerin ámeliyatta qollanıw. Sızıq (`DrawLine`), tórtmúyeshlik
(`DrawRectangle`), ellips (`DrawEllipse`) hám basqa geometriyalıq figuralardı
sızıw kónlikpelerin qáliplestiriw. Koordinatalar sisteması menen islewdi
úyreniw.
Teoriyalıq bólim:
GDI+ – bul Windows operaciyalıq sistemasında 2D grafika menen islesiw
ushın arnalǵan klasslar jıynaǵı (`System::Drawing` namespace). Grafika sızıw
processiniń orayında `Graphics` klassı turadı. Bul klass bizge "xolst" (canvas)
wazıypasın atqaradı hám barlıq sızıw metodların óz ishine aladı.
Graphics obyekti
`Graphics` obyektin alıwdıń eki tiykarǵı usılı bar:
1. `Paint` waqıyası (Event) arqalı: Bul eń durıs jol. Forma yamasa
komponent (mısalı, `Panel` yamasa `PictureBox`) qayta sızılıwı kerek bolǵanda
(mısalı, ashılǵanda, ólshemi ózgergende) `Paint` waqıyası shaqırıladı. Bul
waqıyanıń `e->Graphics` parametri bizge tayın `Graphics` obyektin beredi.
2. `CreateGraphics()` metodı arqalı: Bul usıl kerekli jerde (mısalı, túyme
basılǵanda) grafika sızıw ushın qollanıladı. Biraq, bul usıl menen sızılǵan
súwretler turaqsız boladı (forma qayta sızılsa, óship ketedi). Sol sebepli `Paint`
waqıyasın qollanǵan maqul.
Koordinatalar sisteması
Windows Forms-ta koordinatalar sisteması "piksel" (pixel) menen
ólshenedi.
(0, 0) noqatı – formanıń (yamasa komponenttiń) joqarı shep
múyeshi.
X kósheri – ońǵa qaray ósedi.
Y kósheri – tómenge qaray ósedi (matematikadan ayırmashılıǵı
usı).
Qálem (Pen) hám Kist (Brush)
`Pen` (Qálem): Sızıqlar hám figuralardıń konturın (shegarasın)
sızıw ushın qollanıladı. Qálemniń reńi (`Color`) hám qalıńlıǵı
(`Width`) boladı. Mısalı: `gcnew Pen(Color::Red, 3)`.

`Brush` (Kist): Tuyıq figuralardıń ishki bólegin boyaw (Fill) ushın
qollanıladı. `SolidBrush` (bir reńli), `HatchBrush` (shtrixli),
`LinearGradientBrush` (gradientli) sıyaqlı túrleri bar. Mısalı:
`gcnew SolidBrush(Color::Blue)`.
Reń (Color)
`Color` strukturası arqalı reńlerdi tańlawǵa boladı. `Color::Red`,
`Color::Blue` sıyaqlı tayın reńler bar. Sonday-aq, `Color::FromArgb(r, g, b)`
metodı arqalı óz reńińizdi (RGB modeli) jaratıwıńızǵa boladı (0-255
aralıǵındaǵı sanlar). `Color::FromArgb(a, r, g, b)` metodı "móldirlik" (Alpha
channel) ti de qollap-quwatlaydı.
Tiykarǵı sızıw metodları
`Graphics` klassınıń metodları:
`DrawLine(pen, x1, y1, x2, y2)`: (x1, y1) hám (x2, y2) noqatları
arasında sızıq sızadı.
`DrawRectangle(pen, x, y, width, height)`: Tórtmúyeshliktiń
konturın sızadı.
`FillRectangle(brush, x, y, width, height)`: Tórtmúyeshliktiń ishin
boyaydı.
`DrawEllipse(pen, x, y, width, height)`: Ellips (Dóńgelek) sızadı.
(Tórtmúyeshlik ishine sızılǵan ellips).
`DrawPolygon(pen, points[])`: Kóp múyeshlik sızadı (Points
massivi arqalı).
`DrawString(text, font, brush, x, y)`: Tekst jazadı.
`DrawImage(image, x, y, w, h)`: Súwret (Image) qoyadı.
ÁMELIY BÓLIM:
Formaǵa figuralar sızıwshı programma.
1-mısal: Sızıq hám Tórtmúyeshlik (Paint waqıyası)
Kod (Form_Paint):
private: System::Void MyForm_Paint(System::Object^ sender,
System::Windows::Forms::PaintEventArgs^ e) {
// Graphics obyektin alıw
Graphics^ g = e->Graphics;

// Qálem jaratıw (Qızıl, qalıńlıǵı 5)
Pen^ myPen = gcnew Pen(Color::Red, 5);
// Sızıq sızıw (0,0 dan 200,200 ge)
g->DrawLine(myPen, 0, 0, 200, 200);
// Kók reńli kist
SolidBrush^ myBrush = gcnew SolidBrush(Color::Blue);
// Tórtmúyeshlikti boyaw (x=50, y=50, eni=100, boyı=50)
g->FillRectangle(myBrush, 50, 50, 100, 50);
// Konturın sızıw (Qara qálem menen)
g->DrawRectangle(Pens::Black, 50, 50, 100, 50);
}
Túsindirme: `Paint` waqıyası forma ashılǵanda avtomat isleydi. Biz `Pen` hám
`SolidBrush` obyektlerin jarattıq (`gcnew`). `DrawLine` diagonallıq sızıq sızdı.
`FillRectangle` kók tórtmúyeshliktiń ishin boyadı, `DrawRectangle` bolsa onıń
sırtına qara ramka sızdı.
2-mısal: Dóńgelek hám Tekst
Kod:
Graphics^ g = e->Graphics;
// Dóńgelek sızıw (Kvadrat ishine)
g->DrawEllipse(Pens::Green, 100, 100, 100, 100);
// Tekst jazıw

System::Drawing::Font^ myFont = gcnew System::Drawing::Font("Arial",
16);
g->DrawString("Sálem Grafika!", myFont, Brushes::Black, 10, 200);
Túsindirme: `DrawEllipse` metodına birdey eni hám boyı (100, 100) berilse, ol
dóńgelek (Circle) sızadı. Eger hár qıylı bolsa, ellips boladı. `DrawString` tekstti
kórsetiw ushın `Font` (shrift) hám `Brush` (reń) talap etedi.
3-mısal: Hár qıylı figuralar (Random)
Túymeni basqanda tosınnan (random) figuralar sızıw.
Kod (Button_Click):
private: System::Void button1_Click(System::Object^ sender,
System::EventArgs^ e) {
Graphics^ g = this->CreateGraphics(); // Paint emes, túyme
Random^ rand = gcnew Random();
for (int i = 0; i < 10; i++) {
int x = rand->Next(this->Width);
int y = rand->Next(this->Height);
int w = rand->Next(50, 100);
int h = rand->Next(50, 100);
// Random reń
Color c = Color::FromArgb(rand->Next(255), rand->Next(255),
rand->Next(255));
SolidBrush^ b = gcnew SolidBrush(c);
g->FillEllipse(b, x, y, w, h);
}
}

Túsindirme: `CreateGraphics()` arqalı biz `Paint` waqıyasınan tısqarı sızdıq.
`Random` klassı bizge tosınnan koordinatalar hám reńlerdi (`FromArgb`) berdi.
Cikl 10 dana reńli ellips sızadı. Dıqqat: Bul súwretler forma kishireytilipjayılǵanda óship ketiwi múmkin (sebebi Paint waqıyasında emes).
ÁMELIY TAPSÍRMALAR
1. Formaǵa qızıl reńli gorizontal sızıq sızıń.
2. Formanıń orayına kók tórtmúyeshlik sızıń.
3. Jasıl reńli, ishi boyalǵan dóńgelek (`FillEllipse`) sızıń.
4. "Programmalastırıw" degen sózdi úlken qızıl hárip penen jazıń.
5. Úshmúyeshlik sızıń (3 sızıq arqalı yamasa `DrawPolygon`).
6. 5 piksel qalıńlıqtaǵı kók sızıq sızıń.
7. Formanıń múyeshinen múyeshine (X forması) eki sızıq sızıń.
8. Bir-biriniń ishine jaylasqan 3 sheńber sızıń (Dart taxtası sıyaqlı).
9. Shaxmat taxtasın sızıń (8x8 aq-qara kvadratlar, cikller menen).
10. "Svetofor" sızıń (Tórtmúyeshlik hám 3 dóńgelek: Qızıl, Sarı, Jasıl).
11. `PictureBox` komponentine sızıń (Formaǵa emes).
12. Tıshqansha basılǵan jerge (`MouseClick`) kishi dóńgelek sızıń.
13. Sinus funkciyasınıń grafigin sızıń (noqatlar arqalı).
14. Gradient (reńniń birinen ekinshisine ótiwi) penen tórtmúyeshlik boyań
(`LinearGradientBrush`).
15. "Úy" súwretin sızıń (Tórtmúyeshlik - diywal, Úshmúyeshlik - tóbeler,
Kishi tórtmúyeshlik - ayna/esik).
Соседние файлы в папке 2-semestr
