Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

2-semestr / 10-ameliy_jif

.pdf
Скачиваний:
0
Добавлен:
20.09.2026
Размер:
268 Кб
Скачать
☆
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 kishireytilip­jayı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