Sunteți pe pagina 1din 5

RAPORT

Lucrarea de laborator nr.2


Programarea in Windows

A efectuat:

A verificat:
lect., univ. Lisnic Inga

Chisinau 2017

Tema: Interfaţa GDI

Scopul lucrarii: De a studia primitivele oferite de interfaţa GDI

Sarcina de lucru: Scrieţi un program care afişează în zona client un desen animat, utilizând toate
primitivele GDI.
Notiuni teoretice
Interfaţa pentru dispozitive grafice (GDI - Graphics Device Interface) este o componentă a sistemului de
operare Windows şi are ca sarcină afişarea elementelor grafice (inclusiv a textului) pe ecran şi la
imprimantă.
De asemenea, trebuie să ştiţi că interfaţă Windows GDI îşi are limitele ei. Cel puţin în acest moment,
interfaţă GDI nu poate să facă tot ce v-aţi putea dori de la o interfaţă grafică. Deşi puteţi să mutaţi pe ecran
obiecte grafice, GDI este, în general, un sistem de afişare static, ce permite numai animaţii limitate. Aşa
cum este implementată în Windows 95, interfaţă GDI nu asigură un suport direct pentru afişarea
tridimensională sau pentru rotirea obiectelor. De exemplu, atunci când desenaţi o elipsă, axele acesteia
trebuie să fie paralele cu axele sistemului de coordonate. Deşi unele limbaje grafice folosesc numere în
virgulă mobilă pentru coordonatele virtuale. Windows 95 - din motive legate de performanţă - foloseşte
numai numere întregi pe 16 biţi aceasta este una dintre deficienţele sistemului de operare Windows 95.
Windows NT permite folosirea coordonatelor pe 32 de biţi.
Din punctul de vedere al programatorului, interfaţa GDI este formată din câteva sute de apeluri de funcţii
şi unele tipuri de date, macroinstrucţiuni şi structuri asociate acestor funcţii, înainte de a studia în detaliu
câteva dintre aceste funcţii, haideţi să vedem care este structura generală a interfeţei GDI.

return 0 ;
case WM_PAINT:
hdc = BeginPaint(hwnd, &ps);
GetClientRect(hwnd, &rect);
//------------------------------------------------------------------------
------
//Desenam linii dreapte
//------------------------------------------------------------------------
-------
//crearea a doua penite noi
MoveToEx(hdc,500,0,NULL);// punctul initial (x,y)
LineTo(hdc,500,760); // punctul final (x,y)
MoveToEx(hdc,0,35,NULL);
LineTo(hdc,1368,35);
MoveToEx(hdc,0,175,NULL);
LineTo(hdc,1368,175);
MoveToEx(hdc,0,325,NULL);
LineTo(hdc,1368,325);
pen = CreatePen(PS_SOLID,2,RGB(255,100,100)); // crearea penitei pen
pen2 = CreatePen(PS_SOLID,2,RGB(20,60,50)); // crearea penitei pen2
//pastrarea penitei vechi
old_pen=(HPEN)SelectObject(hdc,pen);

MoveToEx(hdc,50,65,NULL);
LineTo(hdc,80,145);
MoveToEx(hdc,80,145,NULL);
LineTo(hdc,110,65);
MoveToEx(hdc,110,65,NULL);
LineTo(hdc,140,145);
MoveToEx(hdc,140,145,NULL);
LineTo(hdc,170,65);
//stergerea penitei pen
1
DeleteObject(pen);
//------------------------------------------------------------------------
------
// Desenam un dreptunghi
//------------------------------------------------------------------------
------
//crearea unei noi pensule
brush=CreateSolidBrush(RGB(0,0,255));// coloreaza toata figura
//brush=CreateHatchBrush(HS_BDIAGONAL,RGB(0,0,255)); // hasureaza figura
//pastrarea pensulei vechi
old_br=(HBRUSH)SelectObject(hdc,brush);
SelectObject(hdc,pen2);
Rectangle(hdc,50, 200, 250, 300); //Dreptunghi (50,200 virful sting de
sus) (250,300 virful drept de jos)
//stergerea obiectelor create
DeleteObject(pen2); // stergerea penitei pen2
DeleteObject(brush); // stergerea suprafetei colorate a figurii
//restaurarea obiectelor anterioare
SelectObject(hdc,old_pen); //selectam penita old_pen
SelectObject(hdc,old_br);
//------------------------------------------------------------------------
------
// Incarcam o imagine BITMAP
//------------------------------------------------------------------------
------
hBitmap
=(HBITMAP)LoadImage(NULL,"image.bmp",IMAGE_BITMAP,0,0,LR_LOADFROMFILE);
GetObject(hBitmap,sizeof(BITMAP),&Bitmap); //Obtinem marimea imaginii
bitmap
hCompatibleDC = CreateCompatibleDC(hdc); //Cream o noua variabila handle a
contextului de dispozitiv
hOldBitmap = SelectObject(hCompatibleDC,hBitmap);//Pastram imaginea veche
bitmap

StretchBlt(hdc,50,350,200,175,hCompatibleDC,0,0,Bitmap.bmWidth,Bitmap.bmHeight,S
RCCOPY); //Copiem imaginea bitmap si o deplasam
SelectObject(hCompatibleDC,hOldBitmap); //Restauram obiectul anterior
DeleteObject(hBitmap); //Stergem imaginea bitmap incarcata
DeleteDC(hCompatibleDC); //Stergem variabila handle a contextului de
dispozitiv
//------------------------------------------------------------------------
------
// Afisam text
//------------------------------------------------------------------------
------
SetTextColor(hdc, RGB(50,150,100));
TextOut(hdc,50,10,sir,lungime);
char sir2[50];
char lungime2=sprintf(sir2, "1. Text");
SetTextColor(hdc, RGB(50,50,50));
TextOut(hdc,510,10,sir2,lungime2);
char sir3[50];
char lungime3=sprintf(sir3, "2. Line");
SetTextColor(hdc, RGB(50,50,50));
TextOut(hdc,510,90,sir3,lungime3);
char sir4[50];
char lungime4=sprintf(sir4, "3. Figure");
SetTextColor(hdc, RGB(50,50,50));
TextOut(hdc,510,240,sir4,lungime4);
char sir5[50];

2
char lungime5=sprintf(sir5, "4. Image");
SetTextColor(hdc, RGB(50,50,50));
TextOut(hdc,510,420,sir5,lungime5);
//------------------------------------------------------------------------
------
EndPaint(hwnd, &ps);
return 0;
case WM_DESTROY:
PostQuitMessage(0);
return 0;
}
return DefWindowProc(hwnd, iMsg, wParam, lParam);
}

Rezultatele obtinute

Concluzii

3
In urma efectuarii acestei lucrari de laborator am studiat bazele şi principiile de functionare a
functiilor GDI.Am invatat sa folosim resursele acestei biblioteci pentru a desena diferite figuri
utilizind primitivele GDI.

S-ar putea să vă placă și