Скачиваний:
5
Добавлен:
20.05.2024
Размер:
531.96 Кб
Скачать

Lekciya-11. GUI ortalıǵında grafikalıq imkaniyatlar. Tuwrı sızıq hám hár túrli geometriyalıq

figuralardı sızıw komponentaları.

Jobası:

1.Visual C++ tiń grafik múmkinshilikleri

2.Graphics klası usılları tiykarında grafiklerdi dúziw

3.Tuwrı sızıq hám hár qıylı geometriyalıq figuralardı sızıw komponentaları

Gilt sózler: Qıya sızıq túrindegi massiv, striń, strlen(), sizeof(), strcpy(), strcat(), strstr(), strchr(), assign(), append(), resize(), insert(), delete(), add().

Visual C++ ózi grafikalıq strukturalı ortalıq bolıp esaplanadı. Grafikalıq degende qálegen zattı kompyuterde piksellerde payda etiw túsiniledi. Pikselde eki argumentleri bar, yaǵnıy koorlinatalari A (x, al) kórinisinde. Hár qanday IDE ortalıqlarda grafika menen islew múmkinshiligi bar. Olar túrlishe atalıwı múmkin. Biraq, olardıń ruchkası (qálemi) hám qálemi boladı. GUI kóriniste islew tolıq grafika menen baylanıslı bolıp, texnikanıń grafikalıq rejimde islewin támiyinleydi. Házirde derlik barlıq paydalanıwshılar grafikalıq múmkinshiliklerinen paydalanıp isleydi.

Visual C++tiń grafikalıq imkaniyatları. Grafikalıq múmkinshilikke iye bolǵan sistemalarǵa tiykarlanıp, noqat, sızıq, tórtmúyeshlik, sheńber, kóp múyesh sıyaqlı sırtqı kórinislerdi óz ishine aladı. GUI tiykarındaǵı barlıq elementlerge dıqqat menen qarasańız sol grafik strukturalardan ibarat boladı.

Visual C++ tiń imkaniyatların kóriw ushın Graphics klasına baylanısamız. Bul klasstıń atlar keńisligi System. Drawiń hám kitapxanası System. Drawiń. Common. dll bolıp esaplanadı.

Sızıw ushın GDI+ moduldı inkapsulyatsiya etedi jáne bul klasstan miyrasxor alıw múmkin emes. Bul klass MarshalByRefObject, IDisposable, System::Drawiń::IdeviceContextga tiykarlanǵan bolıp, Object MarshalByRefObject → Graphics klasınıń miyrasxorı esaplanadı.

Grafika klası ekranǵa suwretlerdi sızıw usılların óz ishine alǵan. Grafika arnawlı bir qurılmanı kontekst penende xızmet etedi.

Grafikalıq obyekt járdeminde kóp túrli forma hám sızıqlar sızıw múmkin. Sızıqlar hám sırtqı kórinisler sızıw ushın arnawlı DrawGraphicalElement usıllardı úyreniw kerek. Bul usıllar DrawLine, DrawArc, DrawClosedCurve, DrawPolygon hám DrawRectańle óz ishine aladı. Sızıqlar hám sırtqı kórinisler sızıw ushın qálem járdeminde hám sırtqı kórinislerdi toltırıw ushın qálem járdeminde ámelge asırıladı.

1

Grafika klası imkaniyatları onıń qásiyetleri hám usıları arqalı kórsetip ótemiz. Sonıń jańa parametri kelse, oǵan da toqtalıp ótiledi.

12.1- Keste. Grafika klası qásiyetleri.

Qásiyeti

Wazıypası

 

 

 

Grafikanıń sızılǵan shegarasın shekleytuǵın shegaranı aladı

Clip

yamasa ornatadı.

 

 

 

 

Grafikanıń kesiw shegarasın shegaralaytuǵın RectańleF

ClipBounds

dúzilisin aladı.

 

 

 

CompositińM

Kompozit súwretler sızıw jaǵdayın aladı yamasa ornatadı.

ode

 

 

Grafikaǵa sızılǵan kompozitsion súwretlerdiń kórsetiw

CompositińQ

sapasın ornatadı.

uality

 

 

 

DpiX

Bul grafikanıń gorizontal ólshemin aladı.

 

 

DpiY

Bul grafikanıń vertikal ólshemin aladı.

 

 

 

Bul grafikalar menen baylanıslı interpolyatsiya rejimin aladı

Interpolation

yamasa ornatadı.

Mode

 

 

 

 

Bul grafika kesiw salasın bos yamasa joq ekenligin kórsetip,

IsClipEmpty

bir baha aladı.

 

 

 

 

Bul grafika anıq kesiw salasın bos yamasa joq ekenligin

IsVisibleClip

kórsetip, bir baha aladı.

Empty

 

 

 

 

Bul grafika ushın bet moduli hám birlik modulı ortasında

PageScale

shegarasın sazlaw.

 

 

 

 

Bul grafika bet koordinataları ushın isletiletuǵın ólshem

PageUnit

birligi sazlaw.

 

 

 

 

Bul grafika kórsetiw waqtında Piksel ofset qanday

PixelOffsetM

kórsetilgen baha sazlaw.

ode

 

 

 

RenderińOrig

Bul grafika kórsetiw rejimin ornatadı.

in

 

SmoothińMo

Grafikalar ushın kórsetiw sapasın aladı yamasa ornatadı.

de

 

TextContrast

Tekst kórsetiw ushın gamma ma`nisin belgilew.

 

 

2

 

Bul grafika menen baylanıslı tekst ushın kórsetiw rejimin

TextRenderiń

ornatadı.

Hint

 

 

 

 

Grafikalar ushın geometriyalıq ózgeriwiniń nusqasın aladı

Transform

yamasa ornatadı.

 

 

 

 

Grafikdıń anıq kesiw salasın tegislew ushın tórtmúyúshlik

VisibleClipB

aladı.

ounds

 

 

 

Grafika klası usıları tómendegilerden ibarat:

1.AddMetafileComment(Byte[]) - Súwret metafaylına túsindirme qosadı. Bunda Byte[] Belgili massiv bolıp, <System::Byte> ^ data Tipiinde anıqlanadı hám mısalı, array<Byte>^metaCom = {(Byte)'T',(Byte)'e',(Byte)'s',(Byte)'t'}; sıyaqlı anıqlanıwı múmkin.

2.BeginContainer() - Grafikanıń házirgi jaǵdayı menen grafikalıq konteynerdi saqlaydı hám jańa grafikalıq konteynerdi ashadı hám isletedi.

BeginContainer(Rectańle, Rectańle, GraphicsUnit) - Grafikalıq ámeldegi jaǵdayı

menen bir grafikalıq konteyner saqlaydı, belgileńen parametrli ózgertiw menen jańa grafikalıq konteynerden paydalanadı hám ashadı. Bunda Rectańle tórtmúyesh bolıp,

Rectańle(0,0,200,200) sıyaqlı anıqlanadı. Birinshi tórtmúyesh konteyner ushın shkalanı hám ekinshisi konteyner ushın tarawdıń ózgeriwirin anıqlaydı. GraphicsUnit - konteyner ushın ólshem birligin anıqlaw ushın isletiledi.

Úshmúyeshlik sızıw. Bunda komponentanıń berilgen ornında, reńli sızıqlar arqalı úshmúyeshlik sızıwdı kóremiz. Onıń ushın 1 komponenta, 1 túyme hám 6 textBox komponentaların aynaǵa qolaylı etip jaylastıramız. Sebebi 3 sızıqtı birlestirsek, úshmúyeshlik payda boladı.

1- Qádem. Aynanıń Form1_Load Hádiysesinde tómendegi algoritmdı jaylastıramız.

this->Text = "DrawLine - úshmúyeshlik sızıw";

button1->Text = "SÍZÍW";

2-qádem. Komponenta hám textBox qásiyetlerin sazlaw ámellerdi orınlaw

Múmkin.

3-qádem. Sızıq sızıw ushın noqatlarǵa int myPoint[6]; ózgeriwshisin alamız.

4-qádem. Komponentanıń Paint degen hádiysesine tómendegu algoritmdi jaylastıramız.

3

myPoint[1], myPoint[2], myPoint[3], myPoint[4]); e->Graphics->DrawLine(System::Drawing::Pens::Black,

myPoint[3], myPoint[4], myPoint[5], myPoint[6]); e->Graphics->DrawLine(System::Drawing::Pens::Blue,

Ellips sızıw. Bunda komponentanıń berilgen ornında, reńli ellipis sızıwdı kóremiz. Onıń ushın 1 komponenta, 1 túyme hám 4 textBox komponentaların aynaǵa qolaylı etip jaylastıramız.

1-adım. Aynanıń Form1_Load hádiysesinde algoritmdi jaylastıramız.

this->Text = "Ellipse - sızıw";

button1->Text = "SÍZÍW";

2-adım. Komponenta hám textBox qásiyetlerin sazlaw ámellerdi orınlaw múmkin.

3-adım. Sızıq sızıw ushın noqatlarǵa int myPoint[4]; Ózgeriwshisin alamız.

4-adım. Komponentanıń Paint degen hádiysesine

jaylastıramız.

Pen ^ pen = gcnew Pen(Color::Black);

myPoint[1], myPoint[2], myPoint[3], myPoint[4]);

1- Súwret. DrawEllipse sızıw nátiyjesi.

Joqarıda keltirilgen sızıwlar arqalı basqa qálegen sırtqı kórinislerdi de sızıw múmkin. Túrli sırtqı kórinislerdi sızıp boyawdı kóremiz.

4

Túrli sırtqı kórinislerdi boyaw. Bunda komponentanıń berilgen ornında, boyalǵán formalardı sızıwdı kóremiz. Onıń ushın Brush – qálemnen paydalanıp, 1 komponenta, 1 label hám 1 Combox komponentaların aynaǵa qolaylı etip jaylastıramız.

1-adım. Aynanıń Form1_Load hádiysesinde tómendegi algoritmdı jaylastıramız.

this->Text = " Formanı boyaw "; label1->Text = " Kerekli formanı saylań:";

comboBox1->Text = " Sırtqı kórinisler ";comboBox1->Items->Add("Tórtmúyeshlik");

comboBox1->Items->Add("Ellipis"); comboBox1->Items->Add("Sheńber");

comboBox1->Items->Add("Sheńber");

2-adım.

Komponenta

va

ComboBox qásiyetlerin Sazlaw

ámellerin

orınlaw múmkin.

 

3-adım.

ComboBox

 

komponentasınıń

comboBox1_SelectedIndex Changed hádiysesine tómendegi algoritmdi jaylastıramız.

Graphics ^grp = pictureBox1->CreateGraphics(); Brush ^ brsh = gcnew SolidBrush(Color::Green); grp->Clear(SystemColors::Control);

switch (comboBox1->SelectedIndex){ case 0:

grp->FillRectangle(brsh,50,50,150,150); break; case 1:

grp->FillEllipse(brsh,50,50,300,150); break; case 2:

grp->FillEllipse(brsh,50,50,150,150); break; case 3:

grp->FillPie(brsh,50,50,150,150,150,100); break;

5

2- Súwret. Túrli sırtqı kórinislerdi boyaq nátiyjesi.

Hádiyseler arqalı forma sızıw. Hámme "Paint" sıyaqlı programmalardı onıń eń

ájayıp qásiyetlerinen biri tıshqansha menen sızıqlar sızıw bolıp tabıladı. Bunı ámelge asırıw ushın komponenttiń tıshqansha menen islew "MousDown", ""MausUp" hám

"MouseMove" Hádiyselerinen paydalanıw múmkin. Programmanıń algoritmi ideyası tómendegishe: paydalanıwshı tıshqanshanıń shep túymesin basqanda kursor arqasına júdá kóp kishi kvadratlar sızıla baslaydı. Bul kvadratlar kólemi kodta kórsetilgen. Bunnan tısqarı, "Button" knopkasın suwretke túsiretuǵın formaǵa kóshiriwińiz kerek. Bunda komponentaniń berilgen ornında, tıshqansha hádiyseleri arqalı formalardı sızıwdı kóremiz. Onıń ushın Brush – qálemnen paydalanıp, 1 komponenta, 1 button komponentasın aynaǵa qolaylı etip jaylastıramız.

1-adım. Aynanıń Form1_Load hádiysesinde tómendegi algoritmdi jaylastıramız.

button1->Text = " Tazalaw ";

this->Text = " Forma sızıw ";

2-adım. Komponenta hám

button qásiyetlerin sazlaw ámellerdi

orınlaw múmkin.

 

 

 

 

3-adım.

Button

komponentasınıń

button1_Click

hádiysesinde

tómendegi algoritmdı jaylastıramız. Bul algoritm

komponentanı tazalaw ushın isletiledi.

Graphics ^ grp = pictureBox1->CreateGraphics();

grp->Clear(SystemColors::Window);

4-adım. Komponentanıń tıshqansha hádiyselerin qayta islew ushın

Logikalıq bir ózgeriwshi alınadı, onıń ma`nisi [0] bolsın. Bool Drow = false;

5-adım. Tıshqansha komponentanıń ústine kelip logikalıq Ózgeriwshiniń

6

mánisi 1 ge ózgeredi. Sebebi sızıwdı baslaw ushın. Bunı ámelge asırıw ushın

tıshqanshanıń pictureBox1_MouseDown hádiysesine Drow = true; di jazıp

qoyamız.

6-adım. Tıshqansha komponentanıń ústinen ketkende logikalıq ózgeriwshiniń mánisi 0 ge ózgeredi. Sebebi sızıwdı tamamlaw ushın. Bunı ámelge asırıwsh ushın tıshqanshaniń pictureBox1_MouseUp hádiysesine Drow= false; ni jazıp qoyamız.

7-adım. Tıshqansha

komponentanıń ústinde kelip sızıwı ushın

tómendegi algoritmdı kiritemiz.

 

Graphics^ graf = pictureBox1->CreateGraphics(); if (Drow == true){

graf->FillEllipse(Brushes::Violet, e->X, e->Y, 3,3); // Qálem qalıńlıǵı

Algoritmde formalardı payda etiw ushın júdá kishi

ellipislardan

paydalanamız.

3- Súwret. Tıshqansha menen túrli sırtqı kórinislerdi sızıw.

Súwretlerdi ózgertiw. Onıń ushın fayllardı júklew openFiledialog hám fayllardı saqlaw saveFiledialog komponentalarınan paydalanamız. Onıń ushın

Brush - qáelemnen paydalanıp, 1 komponenta, 3 button komponentasın Aynaǵa qolaylı etip jaylastıramız. Buttonlardıń birinshisi, súwretti redaktorlawdı

7

tazalawdı ámelge asıradı, ekinshisi, redaktorlawdan súwretti saqlaw ushın, úshinshisi, súwretti redaktorlaw ushın júklewdi ámelge asıradı. using namespace System::Drawing::Drawing; di qosıp qoyıw kerek.

1-adım. Súwretlerdi ózgertiw ushın isletiletuǵın ózgeriwshilerdi járiyalaymız.

private: Bitmap ^ bmp_for_draw;

private: Point start_point; private: bool Draw; public: Pen^ pen_for_draw;

private: String ^ full_name_of_image;

2-adım. Programma aynasınıń Form1_Load hádiysesine dáslepki sazlamalardı ornatamız.

this->Text = " Súwretti redaktorlaw "; button1->Text = " Tazalaw "; button2->Text= " Súwretti saqlaw "; button3->Text = " Súwretti júklew ";

pen_for_draw = gcnew Pen(Color::Black, 4);

Bunda komponentalardı sazlaw hám bir qálemdi jaratıp alıw, onıń StartCap, EndCap qásiyetlerin ornatıw ámelge asırıladı.

3-adım. Komponenttegi súwretti tazalaw ushın button1_Click hádiysege algoritmdı jazamız.

Graphics^ grp = pictureBox1->CreateGraphics();

grp->Clear(SystemColors::Window);

4-adım. Tıshqansha komponentanıń ústinde kelip sızıwı ushın

pictureBox1_MouseDown Hádiysesine tómendegi algoritmdı kiritemiz

if (e->Button == System::Windows::Forms::MouseButtons::Left){ Draw = true;

start_point = e->Location;

5-adım. Tıshqansha komponentanıń ústine ketkende sızıwdı toqtatıw ushın pictureBox1_MouseUp hádiysesine tómendegi algoritmdı kiritemiz

8

if (e->Button == System::Windows::Forms::MouseButtons::Left){

Draw = false;

6-adım. Komponentaga kerekli

súwretti júklew ushın

button3_Click

 

Hádiysesine tómendegi algoritm jazıladı:

 

OpenFileDialog ^ open_dialog = gcnew OpenFileDialog();

open_dialog->Filter = "Image Files(*.BMP;*.JPG;*.GIF;*.PNG)|*.BMP;*.JPG;*.GIF;*.PNG|All files (*.*)|*.*";

if (open_dialog->ShowDialog() == System::Windows::Forms::DialogResult::OK){

full_name_of_image = open_dialog->FileName; bmp_for_draw = gcnew Bitmap(open_dialog->FileName);

//pictureBox1->Size = bmp_for_draw->Size;

pictureBox1->SizeMode = PictureBoxSizeMode::StretchImage; pictureBox1->Image = bmp_for_draw;

>Invalidate();

} catch(Exception^ e) {

System::Windows::Forms::DialogResult rezult = MessageBox::Show("Tańlanǵan fayl

Bundagi

asosi nuqson shundan

iboratki, agar rasmniń

o'lchamlari

komponentaniń ólshemleri menen birdey bolsa, jaqsı sızadı, birdey bolmasa, paydalanıwshı ekranınıń proporsiyasini alıp sızadı.

7-adım. Komponentadaǵı súwretti saqlaw ushın button2_Click hádiysesine tómendegi algoritm jazıladı

9

if (pictureBox1->Image != nullptr){

String ^format = full_name_of_image->Substring(full_name_of_image->Length - 4, 4); SaveFileDialog ^savedialog = gcnew SaveFileDialog();

savedialog->Title = "Rasmni saqlash ..."; savedialog->OverwritePrompt = true; savedialog->CheckPathExists = true;

savedialog->Filter = "Image Files(*.BMP)|*.BMP|Image Files(*.JPG)|*.JPG|Image Files(*.GIF)|*.GIF|Image Files(*.PNG)|*.PNG|All files (*.*)|*.*";

savedialog->ShowHelp = true;

// If selected, save

if (savedialog->ShowDialog() == System::Windows::Forms::DialogResult::OK){ try{

8-adım. Tıshqancha

komponentanıń ústine kelip sızıwı ushın

tómendegi algoritmdı kiritemiz:

if (e->Button == System::Windows::Forms::MouseButtons::Left){ Graphics ^graf = Graphics::FromImage(pictureBox1->Image);

graf->DrawLine(pen_for_draw, start_point, e->Location); start_point = e->Location;

>Invalidate();

Programmanı isletkende tómendegi ayna shıǵadı.

10

Соседние файлы в предмете Объектно ориентированное программирование