MINISTERUL EDUCAŢIEI ŞI TINERETULUI AL REPUBLICII MOLDOVA
UNIVERSITA UNIVE RSITAT TEA TEHNICA TEHN ICA A MOLDOVEI MOLDOVE I Facultatea Calculatoare, Inor!at"c# $" M"croelectron"c#
RAPORT LA LUCRAREA DE LABORATOR NR% & D"'c"(l"na ) Pro*ra!area +n "n-o.' "n-o.'
TEMA) /Intera0a 1DI2
A eectuat)
't%1r% TI34&& Co5+laș A-r"an
A 6er""cat)
lector a'"'tent L"'n"c In*a
C7" C7"ș"n#u "n#u &84 &849
Scopul lucrării
De a 'tu-"a (r"!"t"6ele oer"te -e "ntera0a 1DI Sarcina propusă
Scr"e0" un (ro*ra! care a"$ea:# +n :ona cl"ent un -e'en an"!at, ut"l":;n- toate (r"!"t"6ele 1DI% Noţiuni teoretice
Intera0a (entru -"'(o:"t"6e *ra"ce <1DI 3 1ra(7"c' De6"ce Interace= e'te o co!(onent# a '"'te!ulu" -e o(erare "n-o.' $" are ca 'arc"n# a"$area ele!entelor *ra"ce <"nclu'"6 a te>tulu"= (e ecran $" la "!(r"!ant#% De a'e!enea, tre5u"e '# $t"0" c# "ntera0# "n-o.' 1DI +$" are l"!"tele e"% Cel (u0"n +n ace't !o!ent, "ntera0# 1DI nu (oate '# ac# tot ce 63a0" (utea -or" -e la o "ntera0# *ra"c#% De$" (ute0" '# !uta0" (e ecran o5"ecte *ra"ce, 1DI e'te, +n *eneral, un '"'te! -e a"$are 'tat"c, ce (er!"te nu!a" an"!a0"" l"!"tate% A$a cu! e'te "!(le!entat# +n "n-o.' ?@, "ntera0# 1DI nu a'"*ur# un 'u(ort -"rect (entru a"$area tr"-"!en'"onal# 'au (entru rot"rea o5"ectelor% De e>e!(lu, atunc" c;n- -e'ena0" o el"('#, a>ele ace'te"a tre5u"e '# "e (aralele cu a>ele '"'te!ulu" -e coor-onate% De$" unele l"!5ae *ra"ce olo'e'c nu!ere +n 6"r*ul# !o5"l# (entru coor-onatele 6"rtuale% "n-o.' ?@ 3 -"n !ot"6e le*ate -e (eror!an0# 3 olo'e$te nu!a" nu!ere +ntre*" (e 4 5"0" acea'ta e'te una -"ntre -e"c"en0ele '"'te!ulu" -e o(erare "n-o.' ?@% "n-o.' NT (er!"te olo'"rea coor-onatelor (e & -e 5"0"% D"n (unctul -e 6e-ere al (ro*ra!atorulu", "ntera0a 1DI e'te or!at# -"n c;te6a 'ute -e a(elur" -e unc0"" $" unele t"(ur" -e -ate, !acro"n'truc0"un" $" 'tructur" a'oc"ate ace'tor unc0"", +na"nte -e a 'tu-"a +n -etal"u c;te6a -"ntre ace'te unc0"", 7a"-e0" '# 6e-e! care e'te 'tructura *eneral# a "ntere0e" 1DI% Tipuri de apeluri de funcţii
n *eneral, a(elur"le -e unc0"" 1DI (ot " cla'""cate +n !a" !ulte cate*or""% C7"ar -ac# nu 'unt oarte 'tr"cte $" e>"'t# unele 'u(ra(uner", ace'te cate*or"" (ot " enun0ate a'tel) •
Func0"" care o50"n <'au creea:#= $" el"5erea:# <'au -"'tru*= un conte>t -e -"'(o:"t"6%
•
Func0"" care o50"n "nor!a0"" -e'(re conte>tul -e -"'(o:"t"6%
•
Func0"" care -e'enea:# ce6a%
•
Func0"" care 'ta5"le'c 'au o50"n atr"5ute ale conte>tulu" -e -"'(o:"t"6%
•
Func0"" care lucrea:# cu o5"ecte 1DI%
Ele!entele *ra"ce (e care le a"$a0" (e ecran 'au le t"(#r"0" la "!(r"!ant# (ot " +!(#r0"te +n !a" !ulte cate*or"", nu!"te /(r"!"t"6e% Iat# care 'unt ace'te cate*or"") •
Linii şi curbe. L"n""le re(re:"nt# 5a:a or"c#ru" '"'te! -e -e'enare 6ector"al% 1DI (er!"te olo'"rea
l"n""lor -re(te, a -re(tun*7"ur"lor, a el"('elor <"nclu'"6 'u5'etul -e el"('e cuno'cute 'u5 nu!ele -e cercur"=, a arcelor 3 care 'unt cur5e re(re:ent;n- (or0"un" -"n c"rcu!er"n0a une" el"('e 'au a cur5elor Be:"er% L"n""le 'unt -e'enate olo'"n- (en"0a curent# 'electat# +n conte>tul -e -"'(o:"t"6%
•
•
•
Suprafeţe pline. Dac# o 'er"e
-e l"n"" 'au -e cur5e +nc7"- o 'u(raa0#, acea'ta (oate " /u!(lut# olo'"n- (en'ula 1DI curent#% Acea't# (en'ul# (oate " o culoare co!(act#, un !o-el <7a$ur" or":ontale, 6ert"cale 'au (e -"a*onal#= 'au o "!a*"ne 5"t!a( re(etat# (e 6ert"cal# 'au (e or":ontal#% Imagini bitmap. I!a*"n"le 5"t!a( 'unt !atr"ce -re(tun*7"ulare -e 5"0",
care core'(un- (">el"lor unu" -"'(o:"t"6 -e a"$are% n *eneral, ace'tea 'unt olo'"te (entru a"$area "!a*"n"lor co!(le>e <-e'eor" (reluate -"n lu!ea real#= (e ecran 'au (entru t"(#r"rea ace'tora la "!(r"!ant#% De a'e!enea, "!a*"n"le 5"t!a( 'unt olo'"te (entru a"$area unor !"c" "!a*"n"
tul e'te !a"
(u0"n /!ate!at"c -ec;t alte a'(ecte ale *ra"c"" (e calculator% Structur"le create (entru -e"n"rea ontur"lor $" (entru o50"nerea "nor!a0""lor -e'(re ontur" 'unt (r"ntre cele !a" !ar" -"n "n-o.'% nce(;n- cu 6er'"unea "n-o.' %4, "ntera0a 1DI acce(t# ontur"le TrueT(e, 5a:ate (e conturur" u!(lute, care (ot " !an"(ulate -e alte unc0"" 1DI% "n-o.' ?@ acce(t# +n cont"nuare $" ontur"le !a" 6ec7", -e t"( 5"t!a(
Alte a'(ecte ale "ntere0e" 1DI nu 'unt la el -e u$or -e cla'""cat% Pr"ntre ace'tea 'e nu!#r#) •
Moduri de mapare şi transformări. Mo-ur"le -e !a(are 1DI 6#
•
Metafişiere (metafiles). Un !eta"$"er e'te o colec0"e -e
•
Regiuni (regions).
•
•
•
•
(er!"t '# -e'ena0" olo'"n- ca un"tate -e !#'ur# "nc" <'au rac0"un" -e "nc"=, !"l"!etr" 'au or"ce alt# un"tate -e !#'ur#% De a'e!enea% "n-o.' ?@ a'"*ur# 'u(ortul (entru o /tran'or!are real# e>(r"!at# (r"ntr3o !atr"ce >% Acea't# tran'or!are (er!"te -eor!area $" rot"rea o5"ectelor *ra"ce% D"n (#cate, acea't# tran'or!are nu e'te acce(tat# 'u5 "n-o.' ?@% co!en:" 1DI 'tocate +ntr3o or!# 5"nar#% Meta"$"erele 'unt olo'"te (entru tran'erarea re(re:ent#r"lor unor ele!ente *ra"ce 6ector"ale (r"n "nter!e-"ul !e!or"e" te!(orare
O re*"une e'te o 'u(raa0# co!(le># -e or"ce or!#, -e"n"t# ca o co!5"na0"e 5oolean# -e re*"un" !a" '"!(le% n *eneral, re*"un"le 'unt 'tocate "ntern -e 1DI ca o 'er"e -e l"n"" -e 'canare, -"er"te -e co!5"na0"a -e l"n"" olo'"t# "n"0"al (entru -e"n"rea re*"un""% Pute0" '# olo'"0" re*"un"le (entru conturur", (entru u!(lere 'au (entru -ecu(are% C#" (pats). O cale e'te o colec0"e -e l"n"" -re(te $" cur5e 'tocate "ntern -e 1DI% C#"le (ot " olo'"te (entru -e'enare, (entru u!(lere 'au (entru -ecu(are% De a'e!enea, c#"le (ot " tran'or!ate +n re*"un"% !ecupare (clipping). De'enarea (oate " l"!"tat# la o
anu!"t# 'ec0"une a :one" cl"ent, nu!"t# :on# -e -ecu(are, care (oate " -re(tun*7"ular# 'au (oate a6ea o alt# or!#, -e"n"t# (r"ntr3o 'er"e -e l"n""% Gona -e -ecu(are e'te -e"n"t#, +n *eneral, -e o cale 'au -e o re*"une% Palete (palettes). Folo'"rea (aletelor (ro(r"" e'te l"!"tat#, +n *eneral, nu!a" la !on"toarele care (ot re-a &@ -e culor"% "n-o.' re:er6# &8 -"ntre ace'te culor" (entru '"'te!ul -e o(erare% Celelalte & -e culor" (ot " !o-""cate (entru a"$area core'(un:#toare a "!a*"n"lor -"n lu!ea real#, 'tocate ca "!a*"n" 5"t!a(% Tipărire (printing). De$" -"'cu0""le -"n ace't ca("tol 'unt l"!"tate -oar la a"$area (e ecran,
tot ceea ce +n6#0a0" +n ace't ca("tol (oate " a(l"cat $" o(era0""lor -e t"(#r"re%
Contextul de dispozitiv
Atunc" c;n- 6re0" '# -e'ena0" la un -"'(o:"t"6 -e "e$"re *ra"c tulu" -e -"'(o:"t"6 t=% Var"a5"la 7an-le e'te a(o" "nclu'# ca (ara!etru +n a(elul une" unc0"" 1DI, "-ent""c;n- -"'(o:"t"6ul Ia care 6re0" '# -e'ena0"% Conte>tul -e -"'(o:"t"6 con0"ne !a" !ulte atr"5ute curente, care '(ec""c# !o-ul -e lucru al unc0""lor 1DI (entru -"'(o:"t"6ul re'(ect"6% Ace'te atr"5ute (er!"t ca la a(elarea unc0""lor 1DI '# "e '(ec""cate nu!a" coor-onatele -e +nce(ut 'au -"!en'"unea, nu $" toate celelalte "nor!a0"" -e care '"'te!ul -e o(erare are ne6o"e (entru -e'enarea o5"ectelor (e -"'(o:"t"6ul olo'"t% Atunc" c;n- -or"0" '# !o-""ca0" unul -"ntre ace'te atr"5ute ale conte>tulu" -e -"'(o:"t"6, a(ela0" o unc0"e '(ec"al":at#%
Obţinerea variabilei handle a contextului de dispozitiv
S"'te!ul -e o(erare "n-o.' 6# (une la -"'(o:"0"e !a" !ulte !eto-e (entru o50"nerea 6ar"a5"le" 7an-le a conte>tulu" -e -"'(o:"t"6% Dac# o50"ne0" o 6ar"a5"l# 7an-le a conte>tulu" -e -"'(o:"t"6 +n t"!(ul (relucr#r"" unu" !e'a, ar tre5u" '# $ter*e0" acea't# 6ar"a5"l# +na"nte -e "e$"rea -"n (roce-ura -e erea'tr#% Du(# ce e'te $tear'#, 6ar"a5"la 7an-le nu !a" (oate " olo'"t# tulu" -e -"'(o:"t"6 "!(l"c# olo'"rea unc0""lor "egin#aint $" $nd#aint +n t"!(ul (relucr#r"" !e'aulu" MPAINT) 7-c Be*"nPa"nt <7.n-, J('=K %alte linii de program&
En-Pa"nt <7.n-, J('=K Var"a5"la ps e'te o 'tructur# -e t"( PAINTSTRUCT% C;!(ul dc al ace'te" 'tructur" con0"ne 6ar"a5"la 7an-le a conte>tulu" -e -"'(o:"t"6% Folo'"n- 6ar"a5"la 7an-le a conte>tulu" -e -"'(o:"t"6, o50"nut# (r"n a(elarea unc0"e" "egin#aint' nu (ute0" '# -e'ena0" -ec;t +n re*"unea "n6al"-# a ere'tre"% Func0"a "egin#aint 6al"-ea:# re*"unea "n6al"-#% Pro*ra!ele "n-o.' (ot '# o50"n# 6ar"a5"la 7an-le a conte>tulu" -e -"'(o:"t"6 $" +n t"!(ul (relucr#r"" altor !e'ae -ec;t MPAINT) 7-c 1etDC <7.n-=K t -e -"'(o:"t"6 'e a(l"c# :one" cl"ent a ere'tre" care are 6ar"a5"la 7an-le nd. Pr"nc"(ala -"eren0# +ntre a(elul -e !a" 'u' $" !eto-a olo'"r"" unc0""lor "egin#aint $" $nd#aint e'te c# 6ar"a5"la 7an-le returnat# -e unc0"a et!* 6# (er!"te '# -e'ena0" +n toat# :ona cl"ent a ere'tre"% n (lu', unc0""le 1etDC $" Release!* nu 6al"-ea:# e6entualele re*"un" "n6al"-e ale :one" cl"ent%
Un (ro*ra! "n-o.' (oate '# o50"n# $" o 6ar"a5"l# 7an-le a unu" conte>t -e -"'(o:"t"6 care 'e a(l"c# +ntre*"" ere'tre, nu nu!a" :one" cl"ent a ere'tre") 7-c 1et"n-o.DC <7.n-=K %alte linii de program&
Relea'eDC <7.n-, 7-c=K %alte linii de program&
DeleteDC <7-c=K
Obţinerea informaţiilor despre culori
Func0"a et!e+ice*aps 6# (er!"te '# -eter!"na0" !o-ul -e or*an":are a !e!or"e" +n a-a(toarele 6"-eo $" nu!#rul -e culor" care (ot " re(re:entate% A(elul -e !a" o' returnea:# nu!#rul -e (lanur" -e culoare) "Plane' , 1etDe6"ceCa(' <7-c, PLANES=K A(elul ur!#tor returnea:# nu!#rul -e 5"0" -e culoare olo'"0" (entru "ecare (">el) "B"t'P">el 1etDe6"ceCa(' <7-c, BITSPIEL=K Maor"tatea a-a(toarelor 6"-eo care (ot a"$a culor" olo'e'c "e !a" !ulte (lanur" -e culoare, "e !a" !ul0" 5"0" -e culoare (entru "ecare (">el, -ar nu (e a!;n-ou#K cu alte cu6"nte, unul -"ntre cele -ou# a(elur" -e !a" 'u' 6a returna 6aloarea 4% Nu!#rul -e culor" care (ot " re-ate -e o (lac# 6"-eo 'e (oate calcula cu or!ula ur!#toare) "Color' 4<"Plane' "B"t'P">el=K Acea't# 6aloare (oate '# nu "e "-ent"c# cu nu!#rul -e culor" o50"nut (r"n a(elarea unc0"e" et!e+ice*aps cu (ara!etrul NUMCOLORS) "Color' 1etDe6"ceCa(' <7-c, NUMCOLORS=K "n-o.' olo'e$te (entru re(re:entarea culor"lor o 6aloare +ntrea*# #r# 'e!n, (e & -e 5"0"% T"(ul -e -ate olo'"t (entru culor" 'e nu!e$te COLORREF% Ult"!"" tre" octe0" a" nu!#rulu" "!at"6 4 !"l"oane -e culor"=% Valoarea (e & -e 5"0" -e !a" 'u' e nu!"t# -e'eor" /culoare R1B% n "'"erele antet -"n "n-o.' 'unt -e"n"te !a" !ulte !acro"n'truc0"un" (entru lucrul cu 6alor"le R1B% Macro"n'truct"unea R1B acce(t# tre" ar*u!ente, care re(re:"nt# 6alor"le (entru culor"le ro$u, 6er-e $" al5a'tru $" le co!5"n# +ntr3o 6aloarea +ntrea*# (e & -e 5"0", #r# 'e!n% A'tel, 6aloarea R1B <&@@, 8, &@@=
e'te -e a(t 8>88FF88FF, 6aloarea R1B (entru !a*enta% Dac# toate cele tre" ar*u!ente au 6aloarea 8, 'e o50"ne ne*rul, "ar -ac# au 6aloarea &@@, 'e o50"ne al5ul% Macro"n'truc0"un"le 1etRValue, 1et1Value $" et"-alue e>tra* 6alor"le (entru culor"le (r"!are, 'u5 or!a unor octe0" #r# 'e!n, -"n 6aloarea R1B a culor""% Ace'te !acro"n'truct"un" 'unt ut"le atunc" c;n- a(ela0" unc0"" "n-o.' care returnea:# culor" R1B% Sal6area conte>tulu" -e -"'(o:"t"6 n !o- nor!al, "n-o.' creea:# un nou conte>t -e -"'(o:"t"6 cu 6alor" (re'ta5"l"te atunc" c;n- a(ela0" una -"ntre unc0""le et!* 'au "egin#aint. Toate !o-""c#r"le #cute +n atr"5utele conte>tulu" -e -"'(o:"t"6 'e ("er- atunc" c;n- conte>tul -e -"'(o:"t"6 e'te $ter' -"n !e!or"e (r"n a(elarea unc0"e" Release!* 'au a unc0"e" $nd#aint. Dac# (ro*ra!ul tre5u"e '# olo'ea'c# un atr"5ut cu o 6aloarea -"er"t# -e cea (re'ta5"l"t# 6a tre5u" '# "n"0"al":a0" conte>tul -e -"'(o:"t"6 -e "ecare -at# c;n- o50"ne0" o 6ar"a5"l# 7an-le) ca'eMPa"nt) 7-c Be*"nPa"nt <7.n-, J('=K %iniţialieaă atributele contextului de dispoiti+& %deseneaă ona client a ferestrei&
En-Pa"nt <7.n-, J('=K return 8K De$" acea't# a5or-are e'te +n *eneral 'at"'#c#toare, '3ar (utea '# (reera0" '# 'al6a0" !o-""c#r"le #cute a'u(ra conte>tulu" -e -"'(o:"t"6 "a -"'tru*erea ace'tu"a, a'tel +nc;t 6alor"le 'al6ate '# re-e6"n# act"6e la a(elarea unc0""lor et!* 'au "egin#aint.
Raspunsuri la intrebari:
1 !escrieţi principalele primitive ale interfeţei "rafice#
Ele!entele *ra"ce (e care le a"$a0" (e ecran 'au le t"(#r"0" la "!(r"!ant# (ot " +!(#r0"te +n !a" !ulte cate*or"", nu!"te /(r"!"t"6e% Iat# care 'unt ace'te cate*or"") •
Linii şi curbe. L"n""le re(re:"nt# 5a:a or"c#ru" '"'te! -e -e'enare 6ector"al% 1DI (er!"te olo'"rea l"n""lor
-re(te, a -re(tun*7"ur"lor, a el"('elor <"nclu'"6 'u5'etul -e el"('e cuno'cute 'u5 nu!ele -e cercur"=, a arcelor 3 care 'unt cur5e re(re:ent;n- (or0"un" -"n c"rcu!er"n0a une" el"('e 'au a cur5elor Be:"er% De'(re toate ace'te cle!ente 6o! !a" -"'cuta +n ca("tolul -e a0#% Or"ce cur5# !a" co!(le># (oate n -e'enat# ea o l"n"e (ol"*onal#, a-"c# o 'er"e -e l"n"" oarte 'curte care -e"ne'c o cur5#% L"n""le 'unt -e'enate olo'"n (en"0a curent# 'electat# +n conte>tul -e -"'(o:"t"6% •
Suprafeţe pline. Dac# o 'er"e -e l"n"" 'au -e cur5e +nc7"- o 'u(raa0#, acea'ta (oate " /u!(lut# olo'"n-
(en'ula 1DI curent#% Acea't# (en'ul# (oate " o culoare co!(act#, un !o-el <7a$ur" or":ontale, 6ert"cale 'au (e -"a*onal#= 'au o "!a*"ne 5"t!a( re(etat# (e 6ert"cal# 'au (e or":ontal#% •
Imagini bitmap. I!a*"n"le
5"t!a( 'unt !atr"ce -re(tun*7"ulare -e 5"0", care core'(un- (">el"lor unu" -"'(o:"t"6 -e a"$are% I!a*"n"le 5"t!a( 'unt "n'tru!ente -e 5a:# (entru '"'te!ele *ra"ce -e t"( ra'tru% n *eneral, ace'tea 'unt olo'"te (entru a"$area "!a*"n"lor co!(le>e <-e'eor" (reluate -"n lu!ea real#= (e
ecran 'au (entru t"(#r"rea ace'tora la "!(r"!ant#% De a'e!enea, "!a*"n"le 5"t!a( 'unt olo'"te (entru a"$area unor !"c" "!a*"n"
Text %
Te>tul e'te !a" (u0"n /!ate!at"c -ec;t alte a'(ecte ale *ra"c"" (e calculator% Te>tul, a$a cu! +l $t"!, e'te le*at -e 'ute -e an" -e t"(o*ra"a tra-"0"onal#, a(rec"at# a-e'ea ca a-e6#rat# art#% D"n ace't !ot"6, te>tul e'te -e !ulte or" nu -oar cea !a" co!(le># (arte a '"'te!ulu" *ra"c, c" $" cea !a" "!(ortant#% Structur"le create (entru -e"n"rea ontur"lor $" (entru o50"nerea "nor!a0""lor -e'(re ontur" 'unt (r"ntre cele !a" !ar" -"n "n-o.'% nce(;n- cu 6er'"unea "n-o.' %4, "ntera0a 1DI acce(t# ontur"le TrueT(e, 5a:ate (e conturur" u!(lute, care (ot " !an"(ulate -e alte unc0"" 1DI% "n-o.' ?@ acce(t# +n cont"nuare $" ontur"le !a" 6ec7", -e t"( 5"t!a(
$ %numeraţi metodele de obţinere a variabilei handle a dispozitivului de context#
S"'te!ul -e o(erare "n-o.' (une la -"'(o:"0"e !a" !ulte !eto-e (entru o50"nerea 6ar"a5"le" 7an-le a conte>tulu" -e -"'(o:"t"6% Cea !a" cuno'cut# !eto-# -e o50"nere $" -e $ter*ere a 6ar"a5"le" 7an-le a conte>tulu" -e -"'(o:"t"6 "!(l"c# olo'"rea unc0""lor "egin#aint $" $nd#aint +n t"!(ul (relucr#r"" !e'aulu" MPAINT) hdc - BeginPaint (hwnd, &ps); [alte Unii de program] EndPaint (hwnd, &ps);
Var"a5"la ps e'te o 'tructur# -e t"( PAINTSTRUCT% C;!(ul dc al ace'te" 'tructur" con0"ne 6ar"a5"la 7an-le a conte>tulu" -e -"'(o:"t"6% Structura PAINTSTRUCT con0"ne $" o 'tructur# -e t"( RECT nu!"t# rc#aint' care -e"ne$te -re(tun*7"ul ce cu(r"n-e re*"unea "n6al"-# a :one" cl"ent a ere'tre"% Folo'"n- 6ar"a5"la 7an-le a conte>tulu" -e -"'(o:"t"6, o50"nut# (r"n a(elarea unc0"e" "egin#aint' nu (ute0" '# -e'ena0" -ec;t +n re*"unea "n6al"-# a ere'tre"% Func0"a "egin#aint 6al"-ea:# re*"unea "n6al"-#. Pro*ra!ele "n-o.' (ot '# o50"n# 6ar"a5"la 7an-le a conte>tulu" -e -"'(o:"t"6 $" +n t"!(ul (relucr#r"" altor !e'ae -ec;t MPAINT) hdc = GetDC (hwnd); (alte linii de program] ReleaseDC (hwnd, hdc);
Ace't conte>t -e -"'(o:"t"6 'e a(l"c# :one" cl"ent a ere'tre" care are 6ar"a5"la 7an-le nd. Pr"nc"(ala -"eren0# +ntre a(elul -e !a" 'u' $" !eto-a olo'"r"" unc0""lor "egin#aint $" $nd#aint e'te c# 6ar"a5"la 7an-le returnat# -e unc0"a et!* 6# (er!"te '# -e'ena0" +n toat# :ona cl"ent a ere'tre"% n (lu', unc0""le 1etDC $" Release!* nu 6al"-ea:# e6entualele re*"un" "n6al"-e ale :one" cl"ent% Un (ro*ra! "n-o.' (oate '# o50"n# $" o 6ar"a5"l# 7an-le a unu" conte>t -e -"'(o:"t"6 care 'e a(l"c# +ntre*"" ere'tre, nu nu!a" :one" cl"ent a ere'tre") hdc = GetWindowDC (hwnd); [alte linii de program] ReleaseDC (hwnd, hdc);
Conte>tul -e -"'(o:"t"6 "nclu-e, +n aar# -e :ona cl"ent, 5ara -e t"tlu a ere'tre", 5arele -e -erulare $" c7enarul% Func0"a et/indo!* e'te rareor" olo'"t# -e a(l"ca0""% Dac# 6re0" '# e>(er"!enta0" olo'"rea ace'te" unc0"",
tre5u"e '# "nterce(ta0" !e'aele MNCPAINT tulu" -e -"'(o:"t"6 a'oc"at une" anu!"te ere'tre -e (e ecran% O unc0"e !a" *eneral# (entru o50"nerea 6ar"a5"le" 7an-le a unu" conte>t -e -"'(o:"t"6 e'te *reate!*0 hdc = CreateDC (psDri!er, psDe!ice, ps"#tp#t, pData); [alte linii de program] DeleteDC (hdc);
De e>e!(lu, (ute0" '# o50"ne0" 6ar"a5"la 7an-le a conte>tulu" -e -"'(o:"t"6 (entru tot '(a0"ul -e a"$are, cu ur!#torul a(el) hdc = CreateDC ($D%P'$, *+'', *+'', *+'');
Scr"erea +n aara ere'tre" (ro(r"" nu e'te +n *eneral reco!an-at#, -ar (oate " con6ena5"l# (entru unele a(l"ca0"" '(ec"ale% tulu" -e -"'(o:"t"6 (entru +ntre*ul ecran $" (r"n a(elarea unc0"e" et!*' cu (ara!etrul NULL%= n Ca("tolul 4@ 6o! olo'" unc0"a CreateDC (entru a o50"ne o 6ar"a5"l# 7an-le a conte>tulu" -e -"'(o:"t"6 (entru o "!(r"!ant#% Uneor" a6e0" ne6o"e -e unele "nor!a0"" -e'(re un conte>t -e -"'(o:"t"6 #r# '# -e'ena0" n"!"c% n acea't# '"tua0"e (ute0" '# o50"ne0" o 6ar"a5"la 7an-le a conte>tulu" -e "nor!a0"" "nor!at"on conte>t= olo'"nunc0"a *reateI*. Para!etr"" 'unt ace"a$" ca $" (entru unc0"a *reate!* ) hdclno = CreatelC ($D%P'$, *+'', *+'', *+''); [alte linii de program] DeleteDC (hdclno);
Nu (ute0" '# e>ecuta0" o(era0"" -e 'cr"ere la un -"'(o:"t"6 olo'"n- acea't# 6ar"a5"l# 7an-le% Atunc" c;n- lucra0" cu "!a*"n" 5"t!a(, (oate " uneor" ut"l# o50"nerea unu" /conte>t -e -"'(o:"t"6 +n !e!or"e) hdce. = CreateCo.pati/leDC (hdc); [alte linii de program] DeleteDC (hdc0e.)
Ace'ta e'te un conce(t -e'tul -e a5'tract% n e'en0#, (ute0" '# 'electa0" o "!a*"ne 5"t!a( +ntr3un conte>t -e -"'(o:"t"6 +n !e!or"e $" a(o" '# -e'ena0" (e'te olo'"n- unc0""le 1DI% Vo! -"'cuta !a" t;r:"u -e'(re acea't# te7n"c# $" o 6o! olo'" +n (ro*ra!ul 1RAFMENU -"n Ca("tolul 48% A$a cu! a! !en0"onat !a" -e6re!e, un !eta"$"er e'te o colec0"e -e a(elur" 1DI co-""cate +ntr3o or!# 5"nar#% Pute0" '# crea0" un !eta"$"er (r"n o50"nerea unu" conte>t -e -"'(o:"t"6 (entru !eta"$"ere) hdceta = Createeta1ile (ps1ilena.e); [alte linii de program] h. = Closeeta1ile (hdceta);
C;t t"!( ace't conte>t e'te 6al"-, n"c" un a(el 1DI (e care +l ace0" olo'"n- (ara!etrul dcMeta nu a"$ea:# n"!"c (e ecran, c" -e6"ne (arte a !eta"$"erulu"% A(ela0" a(o" unc0"a *loseMeta1ile $" conte>tul -e -"'(o:"t"6 e'te "n6al"-at% Func0"a returnea:# o 6ar"a5"l# 7an-le a !eta"$"erulu" (mf). & Ce sisteme de coordonate ale dispozitivului de context cunoa'teţi(
Un conte>t -e -"'(o:"t"6 'e reer#, -e o5"ce", la un -"'(o:"t"6 ":"c -e "e$"re, cu! ar " un !on"tor 6"-eo 'au o "!(r"!ant#% Dac# a6e0" ne6o"e -e anu!"te "nor!a0"" -e'(re ace't -"'(o:"t"6, cu! ar " -"!en'"un"le ecranulu" <-"!en'"un"le +n (">el" $" cele ":"ce= 'au (o'"5"l"t#0"le -e olo'"re a culor"lor, (ute0" '# le o50"ne0" (r"n a(elarea unc0"e" et!e+ice*aps *et -e6"ce ca(a5"l"t"e'=)
"Value 1etDe6"ceCa(' <7-c, "In-e>= K Para!etrul iIndex e'te unul -"ntre ce" & -e "-ent""cator" -e"n"0" +n "$"erele antet -"n "n-o.'% De e>e!(lu, -ac# iIndex are 6aloarea HORGRES unc0"a et!e+ice*aps returnea:# l#0"!ea -"'(o:"t"6ulu" +n (">el"K VERTRES returnea:# +n#l0"!ea -"'(o:"t"6ulu" +n (">el"% Dac# 7-c e'te o 6ar"a5"l# 7an-le a conte>tulu" -e -"'(o:"t"6 (entru un !on"tor 6"-eo, "nor!a0""le o50"nute 'unt acelea$" cu cele returnate -e unc0"a etS2stemMetrics. Dac# 7-c e'te o 6ar"a5"l# 7an-le a conte>tulu" -e -"'(o:"t"6 (entru o "!(r"!ant#, unc0"a et!e+ice*aps returnea:# +n#l0"!ea $" l#0"!ea :one" (e care "!(r"!ant# o (oate t"(#r"% Pute0" '# olo'"0" unc0"a et!e+ice*aps $" ca '# o50"ne0" "nor!a0"" -e'(re (o'"5"l"t#0"le unu" -"'(o:"t"6 -e (relucrare a anu!"tor t"(ur" -e ele!ente *ra"ce% Acea't# (o'"5"l"tate nu e'te "!(ortant# (entru ecran, -ar (oate " olo'"t# +n ca:ul "!(r"!antelor% De e>e!(lu, !aor"tatea (lotterelor nu (ot t"(#r" "!a*"n" 5"t!a( 3 "ar unc0"a et!e+ice*aps 6# (oate co!un"ca ace't lucru
)istin"ul pro"ramului #include #include #include LRESULT CALLBACK WndPoc!"W$%U&T%WPARAM%LPARAM'( int W&AP& WinMain! "&STACE h&nstance% "&STACE hPe)&nstance% LPSTR l*C+dLine% int nC+dShow' , "W$ hwndMain( MS- +s( W$CLASS wndCls( URE/ERECE$0PARAMETER!l*C+dLine'( wndCls.st1le 2 3( wndCls.l*4nWndPoc 2 !W$PR5C' WndPoc( wndCls.c6ClsE7ta 2 3( wndCls.c6WndE7ta 2 3( wndCls.h&nstance 2 h&nstance( wndCls.h&con 2 Load&con!!"&STACE' ULL% &$&0APPL&CAT&5'( wndCls.hCuso 2 LoadCuso!!"&STACE' ULL% &$C0ARR5W'( wndCls.h6Bac8ound 2 !"BRUS"'-etStoc8569ect!W"&TE0BRUS"'( wndCls.l*s:Menua+e 2 ULL( wndCls.l*s:Classa+e 2 ;WndClass;( i4 !ReisteClass!=wndCls'' etun /ALSE( hwndMain 2 CeateWindow! ;WndClass;% ;La6oatoul n ;% WS05?ERLAPPE$W&$5W% CW0USE$E/AULT%CW0USE$E/AULT%@3%3% !"W$' ULL%!"MEU' ULL%h&nstance%!LP?5&$' ULL'(
i4 !hwndMain' etun /ALSE( ShowWindow!hwndMain% nC+dShow'( U*dateWindow!hwndMain'( while !-etMessae!=+s% !"W$' ULL% 3% 3'' , TanslateMessae!=+s'( $is*atchMessae!=+s'( D etun +s.wPaa+( D LRESULT CALLBACK WndPoc!"W$ hwnd% U&T uMs% WPARAM wPaa+% LPARAM lPaa+' , "$C hdc%hCo+*ati6le$C ( PA&TSTRUCT *s ( RECT ect ( "PE *en%*en%old0*en( "BRUS" 6ush%old06( "A$LE h5ldBit+a*( "A$LE hBit+a*( B&TMAP Bit+a*( cha siF3G( shot luni+e2s*int4!si% ;Lucaea de la6oato n. a studentului T&HF Co6ilas Adian;'( switch!uMs', case WM0PA&TI hdc2BeinPaint!hwnd%=*s'( -etClientRect!hwnd%=ect'( JJHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH JJ$esena+ linii dea*te JJ JJceaea a doua *enite noi *en 2 CeatePen!PS0S5L&$%%R-B!%F33%F33''( *en 2 CeatePen!PS0S5L&$%%R-B!3%3%3''( JJ*astaea *enitei )echi old0*en2!"PE'Select569ect!hdc%*en'( Mo)eToE7!hdc%3%3%ULL'( LineTo!hdc%F3%F3'( Mo)eToE7!hdc%F3%F3%ULL'( LineTo!hdc%3%F3'( JJsteeea *enitei *en $elete569ect!*en'( JJHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH JJ$esena+ o eli*sa i+*luta JJ JJceaea unei noi *ensule
JJ6ush2CeateSolidBush!R-B!3%%''( 6ush2Ceate"atchBush!"S0$&A-CR5SS% R-B!%33%3''( JJ*astaea *ensulei )echi old062!"BRUS"'Select569ect!hdc%6ush'( Select569ect!hdc%*en'( JJRectanle!hdc%33% 3% @% F3'( JJ$e*tunhi Elli*se!hdc%33% 3% @% F3'( JJEli*sa JJsteeea o6iectelo ceate $elete569ect!*en'( $elete569ect!6ush'( JJestauaea o6iectelo anteioae Select569ect!hdc%old0*en'( Select569ect!hdc%old06'( JJHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH JJ&ncaca+ o i+aine B&TMAP JJ hBit+a* 2!"B&TMAP'Load&+ae!ULL%;6it+a*.6+*;%&MA-E0B&TMAP%3%3%LR0L5A$/R5M/&LE'( JJ56tine+ +ai+ea i+ainii 6it+a* -et569ect!hBit+a*%si:eo4!B&TMAP'%=Bit+a*'( JJCea+ o noua )aia6ila handle a conte7tului de dis*o:iti) hCo+*ati6le$C 2 CeateCo+*ati6le$C!hdc'( JJPasta+ i+ainea )eche 6it+a* h5ldBit+a* 2 Select569ect!hCo+*ati6le$C%hBit+a*'( JJCo*ie+ i+ainea 6it+a* si o de*lasa+ StetchBlt!hdc%3%3%F@3%F% hCo+*ati6le$C%3%3%Bit+a*.6+Width% Bit+a*.6+"eiht%SRCC5P'( JJRestaua+ o6iectul anteio Select569ect!hCo+*ati6le$C%h5ldBit+a*'( JJStee+ i+ainea 6it+a* incacata $elete569ect!hBit+a*'( JJStee+ )aia6ila handle a conte7tului de dis*o:iti) $elete$C!hCo+*ati6le$C'( JJHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH JJAsa+ te7t JJ SetTe7tColo!hdc% R-B!3%F33%3''( JJSetB8Colo!hdc% R-B!3%F33%F33''( Te7t5ut!hdc%F3%33%si%luni+e'( JJHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH EndPaint!hwnd%=*s'( etun 3( case WM0CL5SEI PostMessae!hwnd% WM0NU&T% 3L% 3L'( etun 3( de4aultI etun $e4WindowPoc!hwnd% uMs% wPaa+% lPaa+'( D
D
Rezultatul rulării
Concluzii
In ur!a eectuar"" ace'te" lucrar" -e la5orator a! 'tu-"at 5a:ele $" (r"nc"(""le -e unct"onare a unct""lor 1DI%A! "n6atat 'a olo'"! re'ur'ele ace'te" 5"5l"otec" (entru a -e'ena -"er"te "*ur" ut"l":"n- (r"!"t"6ele 1DI% *iblio"rafie
7tt()...%!"6%ro"'"(&88?ISIP&88?La54%(- 7tt()...%"noa(%utclu%ro."nc((ca(8&Ca(&%(-