Universitatea Tehnică a Moldovei Catedra Automatică şi Tehnologii Tehnologii Informaţionale Inf ormaţionale
RAPORT
Disciplina: Programarea Disciplina: Programarea în Windows ucrare de la!orator "r# $ Tema: Interfaţa %&I
A efectuat '
(ava Ion) TI*+$,
A verificat'
isnic Inga
Chişinău $-+,
1 Scopul şi sarcina lucrării 1.1 Scopul lucrării: &e studiat .rimitivele oferite de interfaţa %&I# 1.2 Sarcina lucrării: (crieţi un .rogram care afişea/ă în /ona client un desen animat ) utili/înd toate .rimitivele %&I# 2 Întrebări de control
1)
Descrieţi principalele primitive ale interfeţei grafice.
0lementele grafice .e care le afişaţi .e ecran sau le ti.ăriţi la im.rimantă .ot fi îm.ărţite în mai multe categorii) numite 1.rimitive2# Iată care sunt aceste categorii' Linii şi curbe # iniile re.re/intă !a/a oricărui sistem de desenare vectorial# %&I .ermite folosirea liniilor dre.te) a dre.tunghiurilor) a eli.selor) a arcelor
etc# iniile sunt desenate folosind .eniţa curentă selectată în conte3tul de dis.o/itiv# Suprafeţe pline# &acă o serie de linii sau de cur!e închid o su.rafaţă) aceasta .oate fi 1um.lută2 folosind .ensula %&I curentă# Această .ensulă .oate fi o
culoare com.actă) un model 4haşuri ori/ontale) verticale sau .e diagonală5 sau o imagine !itma. re.etată .e verticală sau .e ori/ontală# Imagini bitmap# Imaginile !itma. sunt matrice dre.tunghiulare de !iţi) care cores.und .i3elilor unui dis.o/itiv de afişare# Imaginile !itma. sunt
instrumente de !a/ă .entru sistemele grafice de ti. rastru# 6n general) acestea sunt folosite .entru afişarea imaginilor com.le3e 4deseori .reluate din lumea reală5 .e ecran sau .entru ti.ărirea acestora la im.rimantă# &e asemenea) imaginile !itma. sunt folosite .entru afişarea unor mici imagini 4cum ar fi .ictograme) indicatoare de mouse şi !utoane de .e !arele cu instrumente de lucru ale a.licaţiilor5 care tre!uie afişate foarte ra.id# Interfaţa %&I acce.tă d ouă ti.uri de imagini !itma.' un ti. mai vechi 4dar util5 de imagini !itma. de.endente de dis.o/itiv şi un ti. mai nou de imagini !itma. inde.endente de dis.o/itiv 4&I7 * &evice Inde.endent 7itma.5 care .ot fi stocate în fişiere# Text # (tructurile create .entru definirea fonturilor şi .entru o!ţinerea informaţiilor des.re fonturi sunt .rintre cele mai mari din Windows# 6nce.8nd cu
versiunea Windows 9#+) interfaţa %&I acce.tă fonturile TrueT:.e) !a/ate .e contururi um.lute) care .ot fi mani.ulate de alte funcţii %&I# Windows ;< acce.tă în continuare şi fonturile mai vechi) de ti. !itma. 4cum este fontul sistem .resta!ilit5 .entru com.ati!ilitate şi .entru economisirea s.aţiului de memorie#
2)
Enumeraţi metodele de obţinere a variabilei handle a contextului de dispozitiv .
=aria!ila handle a conte3tului de dis.o/itiv este calea de acces a ferestrei la funcţiile %&I# Prima metodă de o!ţinere a unei varia!ile handle a dis.o/itivului de conte3t este folosită în tim.ul .relucrării mesa>elor WM?PAI"T# (unt im.licate două funcţii' 7eginPaint şi 0ndPaint# Aceste funcţii au nevoie de varia!ila handle a ferestrei 4transmisă .rocedurii de fereastră ca .arametru5 şi de adresa unei varia!ile de ti.ul PAI"T(T@UCT# hdc 7eginPaint 4hwnd) B.s5 Da.elarea unor funcţii %&IE 0ndPaint 4hwnd) B.s5 Folosind varia!ila handle a conte3tului de dis.o/itiv) o!ţinută .rin a.elarea funcţiei 7eginPaint) nu se .oate de desenat decît în regiunea invalidă a ferestrei# Funcţia 7eginPaint validea/ă regiunea invalidă# (e .oate de o!ţinut o varia!ilă handle a unui conte3t de dis.o/itiv şi în tim.ul .relucrării altor mesa>e dec8t WM?PAI"T# A.elaţi funcţia %et&C .entru a o!ţine varia!ila handle şi a.oi a.elaţi funcţia @elease&C atunci c8nd nu mai aveţi nevoie de aceasta' hdc %et&C4hwnd5 Da.elarea unor funcţii %&IE @elease&C4hwnd) hdc5 (.re deose!ire de varia!ila handle a conte3tului de dis.o/itiv o!ţinută din structura PAI"T(T@UCT) varia!ila handle returnată de funcţia %et&C se referă la un dre.tunghi cu întreaga /onă client a ferestrei# Puteţi să desenaţi în orice .arte a /onei client) nu doar în dre.tunghiul invalid 4dacă e3istă un dre.tunghi invalid5# (.re deose!ire de funcţia 7eginPaint) %et&C nu validea/ă nici o regiune invalidă#
3)
Ce sisteme de coordonate ale dispozitivului de context cunoaşteţi?
Atunci c8nd folosim întregul ecran) s.unem că lucrăm în 1coordonate ecran2# Colţul din st8nga*sus este .unctul de coordonate 4-) -5# 1Coordonatele de fereastră 2 se referă la întreaga fereastră a ecranului) inclusiv !ara de titlu) meniu) !arele de derulare şi chenarul ferestrei# Pentru o fereastră normală) .unctul 4-) -5 este colţul din st8nga*sus al chenarului de redimensionare# Al treilea sistem de coordonate de dis.o/itiv * cu care vom lucra cel mai des *foloseşte 1 coordonatele zonei client 2# Punctul 4-)-5 este colţul din st8nga* sus al /onei client#
Reali!area sarcinii $
#include #include #include const double PI=3.14159265358993! "$PI=2%PI& const int c'ish(olo)s=2& *+,-* hate)+)ush! h+/+)ush! h'ish+)ush0c'ish(olo)s& *P h+lac/Pen! hhitePen& int sh"e06& double 7al& P$I" 06& ,-" (+(: ndP)oc;*! -I"! P,! P,& int IPI inain;*I"( hInstance! *I"( hP)e7Instance! P", s?(mdine! int i(mdhow @ static "(*, s?ame0 = ABua)iumA& * hwnd& C msD& (E wndclass& wndclass.cbi?e=si?eoF ;wndclass& GG imensiunea st)uctu)ii wndclass.stle=(H*,, (HJ,,& GG tilul de clasa wndclass.lFnndP)oc=ndP)oc& GG Pointe) la )ocedu)a de Fe)east)a wndclass.cb(lsKt)a=L& GG atiu sulimenta) in st)uctu)a clasei wndclass.cbndKt)a=L& GG atiu sulimenta) in instanta Fe)est)ei wndclass.hInstance=hInstance& GG *andle la instanta wndclass.hIcon=oadIcon;-!IIHPPI("I$& GG *andle la ictoD)ama alicatiei wndclass.h(u)so)=oad(u)so);-!I(H,,$& GG *andle la cu)so) wndclass.hb)+ac/D)ound=;*+,-*Cettoc/$bMect;*I"H+,-*& GG *andle la ensula utili?ata la desena)ea Funcdalului Fe)est)ei wndclass.ls?enuame=-& GG umele meniului ;- ent)u ca nu a7em meniu wndclass.ls?(lassame=s?ame& GG umele clasei de Fe)east)a wndclass.hIconm=oadIcon;-!IIHPPI("I$& GG *andle la ictoD)ama mica a alicatiei ,eDiste)(lassK;Nwndclass& hwnd = ()eateindow;s?ame! ABua)iumA! H$J,PPI$! (H-'-"! (H-'-"! (H-'-"! (H-'-"! -! -! hInstance! -& howindow;hwnd! i(mdhow& -dateindow;hwnd& while;CetessaDe;NmsD! -! L! L @ ")anslateessaDe;NmsD& isatchessaDe;NmsD& O )etu)n msD.wPa)am & O 7oid desenea?aa;*( hdc! int width! int heiDht @ int i& elect$bMect;hdc! h+/+)ush& elect$bMect;hdc! h+lac/Pen& ,ectanDle;hdc! L! L! width1! heiDht1& GG esenea?a 7alu)ile o7e"oK;hdc! L! 1LLQ1L%sin;7al! -& Fo);i=L&i<1LLL&iQQ ine"o;hdc! i! 1LLQ1L%si n;iG3L. LQ7al& GG (olo)ea?a aa elect$bMect;hdc! hate)+)ush& Kt'lood'ill;hdc! widthG2! heiDhtG2Q4LL! L! '$$'I+$,,& O 7oid desenea?aPeste;*( hdc!int K!int !int sh"e @ GG esenea?a (o)ul elect$bMect;hdc!h+lac/Pen& elect$bM ect;hdc ! h'ish+)ush0sh "e& llise;hdc! KL! 5L! KQL! Q5L& GG esenea?a coada o7e"oK;hdc! K63! 2L! -& i ne"o;hdc! K1L55%sin;7a l! 35& ine"o;hdc! K9L! & i ne"o;hdc! K1L55%sin;7a l! Q35& ine"o;hdc! K63! Q2L& Kt'lood'ill;hdc! K88! ! ,C+;L!L!L! '$$'I+$,,& Kt'lood'ill;hdc! K2! ! ,C+;L!L!L! '$$'I+$,,& GG esenea?a caul o7e"oK;hdc! KQ4L! 4L! -& ine"o;hdc! KQ115! 5Q2%sin;7al& ine"o;hdc! KQ1L5! & i ne"o;hdc! KQ115! Q52%sin; 7al& ine"o;hdc! KQ4L! Q4L& Kt'lood'ill;hdc! KQ1L3! ! ,C+;L!L!L! '$$'I+$,,& Kt'lood'ill;hdc! KQ2! ! ,C+;L!L!L! '$$'I+$,,& llise;hdc!KQ8L!1L!KQ84!6& O ,-" (+(: ndP)oc;* hwnd! -I" messaDe! P, wPa)am! P, lPa)am @ static *+I"P h+itma& static *( hdcem& static int cK+itma! c+itma! cK(lient! c(lient!i&
9
static -I"HP", I"H"I,1=1& *( hdc& PI" ",-(" s& switch ;messaDe @ case H(,"R GG ()ea?a ensulele h+/+)ush = ()eateolid+)ush;,C+;255! 255! 255& hate)+)ush = ()eateolid+)ush;,C+;L! L! 255& h'ish+)ush0L = ()eateolid+)ush;,C+;255! L! L& h'ish+)ush01 = ()eateolid+)ush;,C+;255! 255! L& GG ()ea?a enitele h+lac/Pen = ()eatePen;PH$I! 1! L& hhitePen = ()eatePen;PH$I! 4! ,C+;255! 255!255& GG ()ea?a conteKtul de diso?iti7 in memo)ie hdc = Cet(;hwnd& hdcem = ()eate(omatible(;hdc& cK+itma = 1LLL& c+itma = 1LLL& h+itma = ()eate(omatible+itma;hdc! cK+itma! c+itma& ,elease(;hwnd! hdc& elect$bMect;hdcem! h+itma& GG Initial in aa nui nici un este Fo);i=L&i<6&iQQ 0i.K=cK+itmaQ1LL& Fo);i=L&i<6&iQQ sh"e0i = )and;S2&
GG Po)neste time)ul et"ime);hwnd!I"H"I,1!1LL!-& )etu)n L& case HITR GG ctuali?ea?a dimensiunile ?onei client cK(lient = $$,;lPa)am& c(lient = *I$,;lPa)am& )etu)n L&
case H"I,R GG isca 7alul 7alQ=L.5& iF ;7al>"$PI 7al="$PI& GG isca estii in d)eata Fo);i=L&i<6&iQQ iF ;0i.K
GG esenea?a desenea?aa;hdcem!cK+itma!c+itma& Fo);i=L&i<6&iQQ iF ;0i.K<1L9L desenea?aPeste;hdcem!0i.K!0i.!sh"e0i& GG sea?a in ?ona client desenul din memo)ie hdc = +eDinPaint;hwnd! Ns& etaode;hdc! HI$",$PI(& etindowKtK;hdc! cK+itma! c+itma! L& etJiewo)tKtK;hdc! cK(lient! c(lient! L& etJiewo)t$)DK;hdc! cK(lientG2! c(lientG2! -& t)etch+lt;hdc! cK+itmaG2! c+itmaG2! cK+itma! c+itma! hdcem! L! L! cK+itma! c+itma! ,(($PU& ndPaint;hwnd! Ns& )etu)n L&
case H ",$UR GG te)De conteKtul de diso?iti7 din memo)ie elete(;hdcem&
GG te)De bitmaul din memo)ie elete$bMect;h+itma&
GG te)De ensulele c)eate elete$bMect;hate)+)ush& elete$bMect;h+/+)ush& Fo);i=L&i
GG te)De enitele c)eate elete$bMect;h+lac/Pen& elete$bMect;hhitePen&
:ill"ime);hwnd!I"H"I,1&
PostVuitessaDe;L&
,
)etu)n L& O )etu)n eFindowP)oc;hwnd! messaDe! wPa)am! lPa)am& O
"onclu!ie: a reali/area lucrării de la!orator am asimilat cunostinţe cu .rivire la interfaţa %&I) în s.ecial cum .ot fi desenate .rimitivele grafice %&I de ti.ul liniilor) cur!elor) su.rafeţelor .line) te3tului etc#) am învăţat cum .ot fi setate culorile su.rafeţelor .line) moduri de haşurare sau colorare# &e asemenea am aflat cum .ot fi reali/ate unele animaţii) ceea ce mi*a fost de a>utor la efectuarea acestei lucrări de la!orator#
<