Добавил:
bekan
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:2-semestr / 7-lekciya_jif
.pdf
1
7-lekciya. GUI ortalıǵında grafikalıq imkaniyatlar. GUI ortalıǵında grafikalıq jaǵday,
súwretlerdi hám funkciya grafiklerin sızıw (Chart).
Jobası:
1. Visual C++ tiń grafikalıq 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, String, 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
koordinataları A (x, al) kórinisinde. Hár qanday IDE ortalıqlarda grafika menen islew
múmkinshiligi bar. Olar hár túrli 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ázirgi waqıtta 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. Drawing hám kitapxanası System. Drawing. Common. dll bolıp
esaplanadı.
Sızıw ushın GDI+ moduldi inkapsulyaciya etedi jáne bul klasstan miyrasxor alıw múmkin
emes. Bul klass MarshalByRefObject, IDisposable, System::Drawing::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 DrawRectangle ó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ı.

2
Grafika klası imkaniyatları onıń qásiyetleri hám usıları arqalı kórsetip ótemiz. Sonıń jańa
Qásiyeti
Wazıypası
Clip
Grafikanıń sızılǵan shegarasın shekleytuǵın shegaranı aladı
yamasa ornatadı.
ClipBounds
Grafikanıń kesiw shegarasın shegaralaytuǵın RectangleF
dúzilisin aladı.
CompositińM
ode
Kompozit súwretler sızıw jaǵdayın aladı yamasa ornatadı.
CompositińQ
uality
Grafikaǵa sızılǵan kompoziciyalıq súwretlerdiń kórsetiw
sapasın ornatadı.
DpiX
Bul grafikanıń gorizontal ólshemin aladı.
DpiY
Bul grafikanıń vertikal ólshemin aladı.
Interpolation
Mode
Bul grafikalar menen baylanıslı interpolyaciya rejimin aladı
yamasa ornatadı.
IsClipEmpty
Bul grafika kesiw salasın bos yamasa joq ekenligin kórsetip,
bir baha aladı.
IsVisibleClip
Empty
Bul grafika anıq kesiw tarawın bos yamasa joq ekenin
kórsetip, bir mánis aladı.
PageScale
Bul grafika ushın bet moduli hám birlik moduli ortasında
shegarasın sazlaw.
PageUnit
Bul grafika bet koordinataları ushın qollanılatuǵın ólshem
birligi sazlaw.
PixelOffsetM
ode
Bul grafika kórsetiw waqtında Piksel ofset qanday
kórsetilgen mánis sazlaw.
RenderińOrig
in
Bul grafika kórsetiw rejimin ornatadı.
SmoothińMo
de
Grafikalar ushın kórsetiw sapasın aladı yamasa ornatadı.
TextContrast
Tekst kórsetiw ushın gamma mánisin belgilew.
parametri kelse, oǵan da toqtalıp ótiledi.
12.1- Keste. Grafika klası qásiyetleri.

3
TextRenderiń
Hint
Bul grafika menen baylanıslı tekst ushın kórsetiw rejimin
ornatadı.
Transform
Grafikalar ushın geometriyalıq ózgeriwiniń nusqasın aladı
yamasa ornatadı.
VisibleClipB
ounds
Grafikdıń anıq kesiw salasın tegislew ushın tórtmúyúshlik
aladı.
this->Text = "DrawLine - úshmúyeshlik sızıw";
button1->Text = "SÍZÍW";
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 Tipinde 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(Rectangle, Rectangle, GraphicsUnit) - Grafikalıq ámeldegi jaǵdayı
menen bir grafikalıq konteyner saqlaydı, belgilengen parametrli ózgertiw menen jańa
grafikalıq konteynerden paydalanadı hám ashadı. Bunda Rectangle tórtmúyesh bolıp,
Rectangle(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 qollanıladı.
Ú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 kodtı jaylastıramız.
2- qádem. Komponenta hám textBox qásiyetlerin sazlaw ámellerdi orınlaw
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ómendegi kodtı
jaylastıramız.

4
myPoint[1], myPoint[2], myPoint[3], myPoint[4]);
e
e
this->Text = "Ellipse - sızıw";
button1->Text = "SÍZÍW";
Pen ^ pen = gcnew Pen(Color::Black);
->Graphics->DrawLine(System::Drawing::Pens::Black,
myPoint[3], myPoint[4], myPoint[5], myPoint[6]);
->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 kodtı jaylastıramız.
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.
myPoint[1], myPoint[2], myPoint[3], myPoint[4]);
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.
1- Súwret. DrawEllipse sızıw nátiyjesi.

5
Graphics ^grp = pictureBox1->CreateGraphics();
Brush
grp->Clear(
switch
grp->FillPie(brsh,50,50,150,150,150,100); break;
Túrli sırtqı kórinislerdi boyaw. Bunda komponentanıń berilgen ornında,
this->Text = " Formanı boyaw ";
label1->Text =
comboBox1->Text =
comboBox1->Items->Add(
comboBox1->Items->Add("Sheńber");
boyalǵan 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 kodtı jaylastıramız.
" Kerekli formanı saylań:";
" Sırtqı kórinisler ";comboBox1->Items->Add("Tórtmúyeshlik");
"Ellipis"); comboBox1->Items->Add("Sheńber");
2- adım. Komponenta hám ComboBox qásiyetlerin Sazlaw
ámellerin orınlaw múmkin.
3- adım. ComboBox komponentasınıń
comboBox1_SelectedIndex Changed hádiysesine tómendegi kodtı
jaylastıramız.
^ brsh = gcnew SolidBrush(Color::Green);
SystemColors::Control);
(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:

6
button1->Text = " Tazalaw ";
this->Text = " Forma sızıw ";
Graphics ^ grp = pictureBox1->CreateGraphics();
grp->Clear(SystemColors::Window);
2- Súwret. Túrli sırtqı kórinislerdi boyaw 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 súwretke 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 kodtı jaylastıramız.
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 kodtı jaylastıramız. Bul kod komponentanı tazalaw
ushın qollanıladı.
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ń
mánisi 1 ge ózgeredi. Sebebi sızıwdı baslaw ushın. Bunı ámelge asırıw ushın

7
tıshqanshanıń pictureBox1_MouseDown hádiysesine Drow = true; di jazıp
Graphics^ graf = pictureBox1->CreateGraphics();
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ıw ushın tıshqanshanıń pictureBox1_MouseUp hádiysesine Drow=
false; ti jazıp qoyamız.
7- adım. Tıshqansha komponentanıń ústinde kelip sızıwı ushın
tómendegi kodtı kiritemiz.
if (Drow == true){
graf->FillEllipse(Brushes::Violet, e->X, e->Y, 3,3); // Qálem qalıńlıǵı
Kodta 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ı
tazalawdı ámelge asıradı, ekinshisi, redaktorlawdan súwretti saqlaw ushın,

8
this->Text = " Súwretti redaktorlaw
if (e->Button == System::Windows::Forms::MouseButtons::Left){
úshinshisi, súwretti redaktorlaw ushın júklewdi ámelge asıradı. using namespace
private: Bitmap ^ bmp_for_draw;
private: Point start_point;
Graphics^ grp = pictureBox1->CreateGraphics();
grp->Clear(
System::Drawing::Drawing; di qosıp qoyıw kerek.
1- adım. Súwretlerdi ózgertiw ushın qollanılatuǵın ózgeriwshilerdi
járiyalaymız.
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.
"; 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
algoritmdi jazamız.
SystemColors::Window);
4- adım.
pictureBox1_MouseDown Hádiysesine tómendegi algoritmdi kiritemiz
Tıshqansha komponentanıń ústinde kelip sızıwı ushın
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 algoritmdi kiritemiz

9
OpenFileDialog ^ open_dialog = gcnew OpenFileDialog();
open_dialog->Filter =
files (*.*)|*.*"
if
if (e->Button == System::Windows::Forms::MouseButtons::Left){
Draw = false;
full_name_of_image = open_dialog->FileName;
System::Windows::Forms::DialogResult rezult = MessageBox::Show("Tańlanǵan fayl
6- adım. Komponentaga kerekli súwretti júklew ushın
button3_Click
Hádiysesine tómendegi algoritm jazıladı:
"Image Files(*.BMP;*.JPG;*.GIF;*.PNG)|*.BMP;*.JPG;*.GIF;*.PNG|All
;
(open_dialog->ShowDialog() == System::Windows::Forms::DialogResult::OK){
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) {
7- adım. Komponentadaǵı súwretti saqlaw ushın button2_Click
hádiysesine tómendegi kod jazıladı.

10
if (e->Button == System::Windows::Forms::MouseButtons::Left){
Graphics
graf->DrawLine(pen_for_draw, start_point,
start_point =
>Invalidate();
if (pictureBox1->Image != nullptr){
String
^format = full_name_of_image->Substring(full_name_of_image->Length - 4, 4);
SaveFileDialog
savedialog->Title =
savedialog->OverwritePrompt =
savedialog->CheckPathExists =
savedialog->Filter =
Files(*.GIF)|*.GIF|Image Files(*.PNG)|*.PNG|All files (*.*)|*.*"
savedialog->ShowHelp =
// If selected, save
if
} catch(Exception ^ e) {
^savedialog = gcnew SaveFileDialog();
"Rasmni saqlash ...";
true;
true;
"Image Files(*.BMP)|*.BMP|Image Files(*.JPG)|*.JPG|Image
;
true;
(savedialog->ShowDialog() == System::Windows::Forms::DialogResult::OK){
try{
8- adım.
tómendegi kodtı kiritemiz:
^graf = Graphics::FromImage(pictureBox1->Image);
e->Location;
Programmanı isletkende tómendegi ayna shıǵadı.
Tıshqancha komponentanıń ústine kelip sızıwı ushın
e->Location);
Соседние файлы в папке 2-semestr
