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

2-semestr / 7-lekciya_jif

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