Documente Academic
Documente Profesional
Documente Cultură
Prog. Windows Lab.2 MD
Prog. Windows Lab.2 MD
RAPORT
Lucrarea de laborator nr. 2
la disciplina:Programarea in Windows
Tema: Interfata GDI
Chiinu 2015
Noiuni teoretice
Interfaa pentru dispozitive grafice (GDI - Graphics Device Interface) este o component a
sistemului de operare Windows i are ca sarcin afiarea elementelor grafice (inclusiv a textului)
pe ecran i la imprimant.
De asemenea, trebuie s tii c interfa Windows GDI i are limitele ei. Cel puin n acest
moment, interfa GDI nu poate s fac tot ce v-ai putea dori de la o interfa grafic. Dei putei
s mutai pe ecran obiecte grafice, GDI este, n general, un sistem de afiare static, ce permite
numai animaii limitate. Aa cum este implementat n Windows 95, interfa GDI nu asigur un
suport direct pentru afiarea tridimensional sau pentru rotirea obiectelor. De exemplu, atunci
cnd desenai o elips, axele acesteia trebuie s fie paralele cu axele sistemului de coordonate.
Dei unele limbaje grafice folosesc numere n virgul mobil pentru coordonatele virtuale.
Windows 95 - din motive legate de performan - folosete numai numere ntregi pe 16 bii
aceasta este una dintre deficienele sistemului de operare Windows 95. Windows NT permite
folosirea coordonatelor pe 32 de bii.
Din punctul de vedere al programatorului, interfaa GDI este format din cteva sute de apeluri
de funcii i unele tipuri de date, macroinstruciuni i structuri asociate acestor funcii, nainte de a
studia n detaliu cteva dintre aceste funcii, haidei s vedem care este structura general a
interfeei GDI.
Funcii care obin (sau creeaz) i elibereaz (sau distrug) un context de dispozitiv.
Funcii care obin informaii despre contextul de dispozitiv.
Funcii care deseneaz ceva.
Funcii care stabilesc sau obin atribute ale contextului de dispozitiv.
Funcii care lucreaz cu obiecte GDI.
Elementele grafice pe care le afiai pe ecran sau le tiprii la imprimant pot fi mprite n mai
multe categorii, numite primitive". Iat care sunt aceste categorii:
Linii i curbe. Liniile reprezint baza oricrui sistem de desenare vectorial. GDI permite
folosirea liniilor drepte, a dreptunghiurilor, a elipselor (inclusiv subsetul de elipse
cunoscute sub numele de cercuri), a arcelor - care sunt curbe reprezentnd poriuni din
circumferina unei elipse sau a curbelor Bezier. Liniile sunt desenate folosind penia
curent selectat n contextul de dispozitiv.
Suprafee pline. Dac o serie de linii sau de curbe nchid o suprafa, aceasta poate fi
umplut" folosind pensula GDI curent. Aceast pensul poate fi o culoare compact,
un model (hauri orizontale, verticale sau pe diagonal) sau o imagine bitmap repetat
pe vertical sau pe orizontal.
Imagini bitmap. Imaginile bitmap sunt matrice dreptunghiulare de bii, care corespund
pixelilor unui dispozitiv de afiare. n general, acestea sunt folosite pentru afiarea
imaginilor complexe (deseori preluate din lumea real) pe ecran sau pentru tiprirea
acestora la imprimant. De asemenea, imaginile bitmap sunt folosite pentru afiarea unor
mici imagini (cum ar fi pictograme, indicatoare de mouse i butoane de pe barele cu
instrumente de lucru ale aplicaiilor) care trebuie afiate foarte rapid.
Text. Textul este mai puin matematic" dect alte aspecte ale graficii pe calculator.
Structurile create pentru definirea fonturilor i pentru obinerea informaiilor despre fonturi
sunt printre cele mai mari din Windows. ncepnd cu versiunea Windows 3.1, interfaa
GDI accept fonturile TrueType, bazate pe contururi umplute, care pot fi manipulate de
alte funcii GDI. Windows 95 accept n continuare i fonturile mai vechi, de tip bitmap
(cum este fontul sistem prestabilit) pentru compatibilitate i pentru economisirea spaiului
de memorie.
Alte aspecte ale interfeei GDI nu sunt la fel de uor de clasificat. Printre acestea se numr:
o
Contextul de dispozitiv
Atunci cnd vrei s desenai la un dispozitiv de ieire grafic (cum ar fi ecranul sau imprimanta)
trebuie s obinei mai nti o variabil handle a contextului de dispozitiv (DC - device context).
Variabila handle este apoi inclus ca parametru n apelul unei funcii GDI, identificnd dispozitivul
Ia care vrei s desenai. Contextul de dispozitiv conine mai multe atribute curente, care
specific modul de lucru al funciilor GDI pentru dispozitivul respectiv. Aceste atribute permit ca la
apelarea funciilor GDI s fie specificate numai coordonatele de nceput sau dimensiunea, nu i
toate celelalte informaii de care sistemul de operare are nevoie pentru desenarea obiectelor pe
dispozitivul folosit. Atunci cnd dorii s modificai unul dintre aceste atribute ale contextului de
dispozitiv, apelai o funcie specializat.
Desenarea liniilor
Interfaa Windows GDI conine i funciile SetPixel i GetPixel. Dei vom folosi funcia SetPixel n
programul CONNECT din Capitolul 7, n programele de grafic propriu-zis aceste funcii sunt
rareori folosite. n majoritatea cazurilor, cea mai simpl primitiv grafic vectorial trebuie s fie
considerat linia.
Windows poate s deseneze linii drepte, linii eliptice (linii curbe, pe circumferina unei elipse) i
curbe Bezier. Cele apte funcii acceptate de Windows 95 pentru desenarea liniilor
sunt LineTo (linii drepte), Polyline i PolylineTo (o serie de linii drepte conectate), PolyPolyline
(mai multe linii poligonale), Arc (linii eliptice), PolyBezier i PolyBezierTo. (Interfaa GDI din
Windows NT accept nc trei funcii pentru desenarea liniilor: ArcTo,
AngleArc iPolyDraw. Aceste funcii nu sunt ns acceptate n Windows 95.) Aspectul liniilor
desenate cu aceste funcii poate fi influenat de cinci atribute ale contextului de dispozitiv: poziia
curent a peniei (numai pentru funciile LineTo,PolylineTo i PolyBezierTo), penia selectat,
modul de afiare a fondului (numai pentru peniele care nu deseneaz cu o culoare compact),
culoarea fondului (pentru modul OPAQUE de afiare a fondului) i modul de desenare.
Funcia LineTo este una dintre puinele funcii GDI care nu are nevoie de dimensiunile complete
ale obiectului ce urmeaz s fie desenat. Funcia LineTo deseneaz o linie de la poziia curent"
definit n contextul de dispozitiv pan la punctul specificat la apelarea funciei (exclusiv acest
punct). Poziia curent este folosit ca punct de plecare i de alte funcii GDI. n contextul de
dispozitiv prestabilit, poziia curent are iniial valoarea (0,0). Dac apelai funcia LineTo fr s
stabilii mai nti poziia curent, funcia deseneaz o linie pornind din colul din stnga-sus al
zonei client.
Dac dorii s desenai o linie din punctul (xStart, yStart) pan n punctul (xEnd, yEnd) trebuie s
apelai mai nti funcia MoveToEx ca s stabilii ca poziie curent punctul (xStart, ySfart):
MoveToEx (hdc, xStart, yStart, &pt) ;
unde pt este o structur de tip POINT, definit n fiierele antet.
Funcia MoveToEx nu deseneaz nimic, ci doar schimb poziia curent. Poziia curent
anterioar este stocat n structura de tip POINT. Putei apoi s folosii funcia LineTo ca s
desenai linia:
Penie sunt determinate de propriile variabile handle. n fiierele antet din Windows este definit
tipul de date HPEN, care reprezint o variabil handle a unei penie. Putei s definii o variabil
(de exemplu, hPen) folosind aceast definiie de tip:
HPEN hPen ;
Putei s obinei variabila handle a uneia dintre peniele de stoc apelnd
funcia GetStockObject. De exemplu, s presupunem c vrei s folosii penia de stoc numit
WHITE_PEN. Obinei variabila handle a acesteia astfel:
hPen = GetStockObject (WHITE_PEN);
Apoi trebuie s selectai n contextul de dispozitiv penia a crei variabil ai obinut-o, apelnd
funciaSelectObject:
SelectObject (hdc, hPen) ;
Dup acest apel toate liniile pe care le desenai vor folosi penia WHITE_PEN, pn cnd
selectai o alt peni n contextul de dispozitiv sau tergei contextul de dispozitiv.
n loc s definii explicit variabila hPen, putei s combinai
funciile GetStockObject i SelectObject ntr-o singur instruciune:
SelectObject (hdc, GetStockObject (WHITE_PEN)) ;
Dac apoi vrei s revenii la penia BLACK_PEN, putei s obinei o variabil handle a acesteia
i s o selectai n contextul de dispozitiv tot cu o singur instruciune:
SelectObject (hdc, GetStockObject (WHITE_PEN));
Funcia SelectObject returneaz variabila handle a peniei selectate anterior n contextul de
dispozitiv. Dac deschidei un nou context de dispozitiv i executai instruciunea:
hPen = SelectObject (hdc, GetStockObject (WHITE_PEN)) ;
atunci penia curent selectat n contextul de dispozitiv va fi WHITE_PEN i hPen va fi variabila
handle a peniei BLACK_PEN. Putei apoi s selectai penia BLACK_PEN n contextul de
dispozitiv cu urmtoarea instruciune:
SelectObject (hdc, hPen) ;
Pentru a crea o peni proprie apelai funcia:
hPen = CreatePen (iPenStyle, iWidth, rgbColor) ;
Parametrul iPenStyle precizeaz dac se deseneaz o linie continu, o linie punctat sau una
ntrerupt. Parametrul iPenStyle poate fi unul dintre identificatorii definii n fiierele antet din
Windows.
Parametrul rgbColor din funcia CreatePen este un numr ntreg fr semn reprezentnd
culoarea peniei. Pentru toate stilurile de penie, exceptnd PS_INSIDEFRAME, atunci cnd
selectai penia n contextul de dispozitiv, Windows convertete acest parametru la cea mai
apropiat culoare pur pe care o poate reprezenta dispozitivul de afiare. PS_INSIDEFRAME
este singurul stil care poate folosi culori amestecate, dar numai pentru grosimi mai mari de un
pixel.
Funcia
Figura
Rectangle
Ellipse
Elips
RoundRect
Chord
Pie
Polygon
laturi
PolyPolygo
n
Windows deseneaz conturul figurilor folosind penia curent selectat n contextul de dispozitiv.
Pentru acest contur sunt folosite atributele stabilite pentru modul de desenare a fondului,
culoarea fondului i modul de desenare, ca i n cazul desenrii unei linii simple. Tot ceea ce ai
nvat despre linii se aplic i n cazul contururilor.
Figurile sunt umplute folosind pensula selectat n contextul de dispozitiv. n mod prestabilit,
aceasta este pensula de stoc WHITE_BRUSH, ceea ce nseamn c interiorul figurilor va fi
umplut cu alb. Windows definete ase pensule de stoc: WHITE-_BRUSH, LTGRAY_BRUSH,
GRAY_BRUSH, DKGRAY_BRUSH, BLACK_BRUSH i NULL_BRUSH (sau HOLLOW_BRUSH).
Putei s selectai una dintre aceste pensule n contextul de dispozitiv la fel cum selectai o
peni de stoc. Windows definete tipul HBRUSH ca variabil handle a unei pensule, aa c
putei s definii mai nti o variabil de acest tip:
HBRUSH hBrush ;
Putei s obinei variabila handle a pensulei de stoc GRAY_BRUSH apelnd
funcia GetStockObject:.
hBrush = Get&toCkObject (GBAY_BRUSH) ;
Putei s o selectai apoi n contextul de dispozitiv folosind funcia SelectObject:
SelectObject (hdc, hBrush) ;
Din acest moment, figurile desenate vor avea interiorul gri.
Dac vrei s desenai o figur fr contur, selectai n contextul de dispozitiv penia NULL_PEN:
SelectObject (hdc, GetStockObject (NULL_PEN)) ;
Dac vrei s desenai o figur fr s i umplei interiorul, selectai n contextul de dispozitiv
pensula NULL_BRUSH:
SelectObject (hdc, GetStockObject (NULL_BRUSH)) ;
Aa cum putei s creai penie proprii, putei s creai i pensule proprii.
4. Listingul Programului
#include <windows.h>
int i,j,dir;
int a[3][6] ={ {123,343,100,163,232,166},{128,15,129,74,234,255},{1,2,3,4,1,4} };
int circle(HWND hwnd,HDC hdc,int i, int j, int dir, RECT rect,int nr)
{
HPEN
hBluePen,hRedPen,hYellowPen,hGreenPen,hVioletPen,hOrangePen;
HBRUSH
hRedBrush,hBlueBrush,hYellowBrush,hGreenBrush,hVioletBrush,hOrangeBrush;
hBluePen = CreatePen ( PS_SOLID, 1, RGB(255,0,255) );
hRedPen = CreatePen ( PS_SOLID, 1, RGB(255,0,0) );
hGreenPen = CreatePen ( PS_SOLID, 1, RGB(0,255,0) );
hYellowPen = CreatePen ( PS_SOLID, 1, RGB(255,255,0) );
hVioletPen = CreatePen ( PS_SOLID, 1, RGB(255,0,255) );
hOrangePen = CreatePen ( PS_SOLID, 1, RGB(255,90,0) );
hRedBrush = CreateSolidBrush (RGB(255,0,0));
hBlueBrush = CreateSolidBrush (RGB(0,0,255));
hGreenBrush = CreateSolidBrush (RGB(0,255,0));
hYellowBrush = CreateSolidBrush (RGB(255,255,0));
hVioletBrush = CreateSolidBrush (RGB(255,0,255));
hOrangeBrush = CreateSolidBrush (RGB(255,90,0));
if(j+150>rect.bottom)
{
if(dir==1)a[2][nr]=2;else
}
if(i+150>rect.right)
{
if(dir==2)a[2][nr]=3;else
}
if(j+50<rect.top)
{
if(dir==3)a[2][nr]=4;else
}
if(i+50<rect.left)
{
if(dir==4)a[2][nr]=1;else
}
switch(a[2][nr])
{
a[2][nr]=3;
a[2][nr]=4;
a[2][nr]=1;
a[2][nr]=2;
case 1:{
a[0][nr]++; a[1][nr]++;break;
}
case 2:{
a[0][nr]++; a[1][nr]--;break;
}
case 3:{
a[0][nr]--; a[1][nr]--;break;
}
case 4:{
a[0][nr]--; a[1][nr]++;break;
}
switch(nr)
{
case 0:{SelectObject(hdc,hYellowPen); SelectObject(hdc,hRedBrush); break;}
case 1:{SelectObject(hdc,hBluePen); SelectObject(hdc,hGreenBrush); break;}
case 2:{SelectObject(hdc,hRedPen) ; SelectObject(hdc,hYellowBrush); break;}
case 3:{SelectObject(hdc,hGreenPen); SelectObject(hdc,hBlueBrush); break;}
case 4:{SelectObject(hdc,hOrangePen); SelectObject(hdc,hVioletBrush); break;}
case 5:{SelectObject(hdc,hVioletPen); SelectObject(hdc,hOrangeBrush); break;}
}
Ellipse (hdc,a[0][nr]+50,a[1][nr]+50,a[0][nr]+150,a[1][nr]+150);
DeleteObject(hBluePen);
DeleteObject(hRedPen);
DeleteObject(hYellowPen);
DeleteObject(hGreenPen);
DeleteObject(hVioletPen);
DeleteObject(hOrangePen);
DeleteObject(hRedBrush);
DeleteObject(hGreenBrush);
DeleteObject(hYellowBrush);
DeleteObject(hBlueBrush);
DeleteObject(hVioletBrush);
DeleteObject(hOrangeBrush);
return dir;
}
LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ;
int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
PSTR szCmdLine, int iCmdShow)
{
static TCHAR szAppName[] = TEXT ("Windows - Lab2") ;
HWND hwnd ;
MSG msg ;
WNDCLASS wndclass ;
wndclass.style = CS_HREDRAW | CS_VREDRAW ;
wndclass.lpfnWndProc = WndProc ;
wndclass.cbClsExtra = 0 ;
wndclass.cbWndExtra = 0 ;
wndclass.hInstance = hInstance ;
wndclass.hIcon = LoadIcon (NULL, IDI_APPLICATION) ;
wndclass.hCursor = LoadCursor (NULL, IDC_ARROW) ;
wndclass.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH) ;
wndclass.lpszMenuName = NULL ;
wndclass.lpszClassName = szAppName ;
RegisterClass(&wndclass);
hwnd = CreateWindow (szAppName,
TEXT ("Bubble"), WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT,
CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInstance, NULL) ;
i=1; dir=1;
ShowWindow (hwnd, iCmdShow) ;
UpdateWindow (hwnd) ;
while (GetMessage (&msg, NULL, 0, 0))
{
TranslateMessage (&msg) ;
DispatchMessage (&msg) ;
}
return msg.wParam ;
}
LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
HDC hdc ;
static int cxclient, cyclient;
PAINTSTRUCT ps ;
RECT rect;
GetClientRect(hwnd,&rect);
switch (message)
{
case WM_SIZE:
cxclient=LOWORD(lParam);
cyclient=HIWORD(lParam);
return 0;
case WM_PAINT:
hdc = BeginPaint (hwnd, &ps) ;
[0],rect,0);
[1],rect,1);
[2],rect,2);
InvalidateRect (hwnd,NULL,TRUE);
circle(hwnd,hdc,a[0][0],a[1][0],a[2]
circle(hwnd,hdc,a[0][1],a[1][1],a[2]
circle(hwnd,hdc,a[0][2],a[1][2],a[2]
circle(hwnd,hdc,a[0][3],a[1][3],a[2]
[3],rect,3);
circle(hwnd,hdc,a[0][4],a[1][4],a[2]
[4],rect,4);
circle(hwnd,hdc,a[0][5],a[1][5],a[2]
[5],rect,5);
return 0 ;
Sleep(15);
EndPaint (hwnd, &ps) ;
case WM_DESTROY:
PostQuitMessage (0) ;
return 0 ;
}
return DefWindowProc (hwnd, message, wParam, lParam) ;
}
#include <windows.h>
int i,j,dir;
int a[3][6] ={ {123,343,100,163,232,166},{128,15,129,74,234,255},{1,2,3,4,1,4} };
int circle(HWND hwnd,HDC hdc,int i, int j, int dir, RECT rect,int nr)
{
HPEN
hBluePen,hRedPen,hYellowPen,hGreenPen,hVioletPen,hOrangePen;
HBRUSH
hRedBrush,hBlueBrush,hYellowBrush,hGreenBrush,hVioletBrush,hOrangeBrush;
hBluePen = CreatePen ( PS_SOLID, 1, RGB(255,0,255) );
hRedPen = CreatePen ( PS_SOLID, 1, RGB(255,0,0) );
hGreenPen = CreatePen ( PS_SOLID, 1, RGB(0,255,0) );
hYellowPen = CreatePen ( PS_SOLID, 1, RGB(255,255,0) );
hVioletPen = CreatePen ( PS_SOLID, 1, RGB(255,0,255) );
hOrangePen = CreatePen ( PS_SOLID, 1, RGB(255,90,0) );
hRedBrush = CreateSolidBrush (RGB(255,0,0));
hBlueBrush = CreateSolidBrush (RGB(0,0,255));
hGreenBrush = CreateSolidBrush (RGB(0,255,0));
hYellowBrush = CreateSolidBrush (RGB(255,255,0));
hVioletBrush = CreateSolidBrush (RGB(255,0,255));
hOrangeBrush = CreateSolidBrush (RGB(255,90,0));
if(j+150>rect.bottom)
{
if(dir==1)a[2][nr]=2;else
}
if(i+150>rect.right)
{
if(dir==2)a[2][nr]=3;else
}
if(j+50<rect.top)
{
if(dir==3)a[2][nr]=4;else
}
if(i+50<rect.left)
{
if(dir==4)a[2][nr]=1;else
}
switch(a[2][nr])
{
a[2][nr]=3;
a[2][nr]=4;
a[2][nr]=1;
a[2][nr]=2;
case 1:{
a[0][nr]++; a[1][nr]++;break;
}
case 2:{
a[0][nr]++; a[1][nr]--;break;
}
case 3:{
a[0][nr]--; a[1][nr]--;break;
}
case 4:{
a[0][nr]--; a[1][nr]++;break;
}
}
switch(nr)
{
case 0:{SelectObject(hdc,hYellowPen); SelectObject(hdc,hRedBrush); break;}
case 1:{SelectObject(hdc,hBluePen); SelectObject(hdc,hGreenBrush); break;}
case 2:{SelectObject(hdc,hRedPen) ; SelectObject(hdc,hYellowBrush); break;}
case 3:{SelectObject(hdc,hGreenPen); SelectObject(hdc,hBlueBrush); break;}
case 4:{SelectObject(hdc,hOrangePen); SelectObject(hdc,hVioletBrush); break;}
case 5:{SelectObject(hdc,hVioletPen); SelectObject(hdc,hOrangeBrush); break;}
}
Ellipse (hdc,a[0][nr]+50,a[1][nr]+50,a[0][nr]+150,a[1][nr]+150);
DeleteObject(hBluePen);
DeleteObject(hRedPen);
DeleteObject(hYellowPen);
DeleteObject(hGreenPen);
DeleteObject(hVioletPen);
DeleteObject(hOrangePen);
DeleteObject(hRedBrush);
DeleteObject(hGreenBrush);
DeleteObject(hYellowBrush);
DeleteObject(hBlueBrush);
DeleteObject(hVioletBrush);
DeleteObject(hOrangeBrush);
return dir;
}
LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ;
int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
PSTR szCmdLine, int iCmdShow)
{
static TCHAR szAppName[] = TEXT ("Windows - Lab2") ;
HWND hwnd ;
MSG msg ;
WNDCLASS wndclass ;
wndclass.style = CS_HREDRAW | CS_VREDRAW ;
wndclass.lpfnWndProc = WndProc ;
wndclass.cbClsExtra = 0 ;
wndclass.cbWndExtra = 0 ;
wndclass.hInstance = hInstance ;
wndclass.hIcon = LoadIcon (NULL, IDI_APPLICATION) ;
wndclass.hCursor = LoadCursor (NULL, IDC_ARROW) ;
wndclass.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH) ;
wndclass.lpszMenuName = NULL ;
wndclass.lpszClassName = szAppName ;
RegisterClass(&wndclass);
hwnd = CreateWindow (szAppName,
TEXT ("Bubble"), WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT,
CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInstance, NULL) ;
i=1; dir=1;
ShowWindow (hwnd, iCmdShow) ;
UpdateWindow (hwnd) ;
while (GetMessage (&msg, NULL, 0, 0))
{
TranslateMessage (&msg) ;
DispatchMessage (&msg) ;
}
return msg.wParam ;
}
LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
HDC hdc ;
static int cxclient, cyclient;
PAINTSTRUCT ps ;
RECT rect;
GetClientRect(hwnd,&rect);
switch (message)
{
case WM_SIZE:
cxclient=LOWORD(lParam);
cyclient=HIWORD(lParam);
return 0;
case WM_PAINT:
hdc = BeginPaint (hwnd, &ps) ;
InvalidateRect (hwnd,NULL,TRUE);
circle(hwnd,hdc,a[0][0],a[1][0],a[2]
[0],rect,0);
[1],rect,1);
[2],rect,2);
[3],rect,3);
[4],rect,4);
circle(hwnd,hdc,a[0][1],a[1][1],a[2]
circle(hwnd,hdc,a[0][2],a[1][2],a[2]
circle(hwnd,hdc,a[0][3],a[1][3],a[2]
circle(hwnd,hdc,a[0][4],a[1][4],a[2]
circle(hwnd,hdc,a[0][5],a[1][5],a[2]
[5],rect,5);
Sleep(15);
EndPaint (hwnd, &ps) ;
return 0 ;
case WM_DESTROY:
PostQuitMessage (0) ;
return 0 ;
}
return DefWindowProc (hwnd, message, wParam, lParam) ;
}
Rezultatele de executie :
5. Concluzie:
La elaborarea lucrrii de laborator am luat cunotin cu interfaa GDI i cu cteva funcii
ale sale. Am desenat i redesenat cteva figurii astfel nct s obinem o animaiei.Eu am
afacut vizualizarea a 6 figuri geometrice ce se misca in diferite directii