Documente Academic
Documente Profesional
Documente Cultură
Clasa butoanelor.
Clasa butoanelor este o clas predefinit ce permite crearea controalelor de
tip ferestre descendent sub form de butoane. Existena clasei ntr-unul dintre
fiierele Windows permite crearea butoanelor direct prin apelarea funciei
CreateWindow, nefiind necesar inregistrarea clasei de fereastr.
Clasa butoanelor are o procedur de fereastr (aflat ntr-una dintre
bibliotecile cu legturi dinamice ale sistemului de operare) care prelucreaz
mesajele trimise ctre ferestrele butoanelor, ceea ce determin ca toate
butoanele s reacioneze ntr-un mod similar la anumite aciuni ale
utilizatorului(de ex: schimbarea culorii n cazul apasrii). Procedura ferestrei
buton din Windows execut ntreinerea acestor butoane i toate operaiile
de redesenare.
Stsitemul de operare este responsabil de interpretarea click-urilor de
mouse, redesenarea butonului sau de modul n care butonul se mic atunci
cnd este apsat. Sarcina programatorului este s intercepteze mesajul
WM_COMMAND - acesta este modul n care butonul informeaz procedura
ferestrei despre declanarea unui eveniment.
15.Coduri virtuale de taste. Starea tastelor de modificare. Utilizarea mesajelor
de acionare a tastelor.
Fiecare tast este identificat de un numr numit cod virtual. Acest cod
virtual este coninut n parametrul wParam al mesajelor WM_KEYUP,
WM_KEYDOWN, WM_SYSKEYUP, WM_SYSKEYDOWN. Cel mai des utiizate
coduri virtuale sunt definite n fiierele antet din windows, avnd un nume
sepcific precedat de prefixul VK- virtual key. De exemplu: VK_SHIFT,
VK_CONTROL i VK_RETURN sunt codurile virtuale corespunztoare tastelor
Shift, Ctrl i Enter ale tastaturii.
Starea tastelor de modificare (Shift, Alt, Ctrl) poate fi obinut cu
ajutorul funciei GetKeyState. De exemplu:
GetKeyState (VK_SHIFT)
returneaz o valoare negativ (adic un numr n care primul bit are valoarea
1) dac tasta Shift este apsat. Valoarea returnat de apelul: GetKeyState
(VK_CAPITAL) are un 1 n bitul cel mai puin semnificativ dac tasta Caps Lock
este activ. Funcia GetKeyState nu verific starea tastaturii n timp real, ci
starea tastaturii pn n momentul mesajului curent. Pentru a obine starea
curent a unei taste, se folosete funcia GetAsyncKeyState.
Utilizarea mesajelor de acionare a tastelor:
n principiu, este necesar ca n scrierea unui program windows s se in
cont numai de mesajele WM_KEYDOWN i WM_KEYUP, ntruct mesajele
WM_SYSKEYUP, WM_SYSKEYDOWN sunt folosite pentru funcii de sistem (deci
nu este necesar interceptarea lor). Mai mult, dac sunt prelucrate mesajele
WM_KEYDOWN, pot fi ignorate mesajele WM_KEYUP.
Programele pentru Windows folosesc mesajele WM_KEYDOWN pentru
tastele care nu genereaz caractere. Folosirea mesajelor pentru acionri de
taste n combinaie cu informaiile despre tastele de modificare (furnizate de
funcia GetKeyState) cu scopul de a le transforma n mesaje pentru caractere,
poate genera probleme din cauza diferenelor ntre tastaturile internaionale.
Mesajele WM_KEYDOWN sunt utile pentru tastele de deplasare, tastele
funcionale i tastele speciale, precum Insert, Delete. Uneori tastele Insert,
Delete si tastele funcionale sunt folosite ca acceleratori pentru comenzi de
meniu. Deoarece Windows transform acceleratorii n comenzi de meniu, nu
este nevoie s prelucrai n program mesajele pentru acionarea tastelor de
return 0 ;
Aceste funcii au nevoie de variabila handle a ferestrei (transmis
procedurii de fereastr ca parametru) i de adresa unei variabile de tipul
PAINTSTRUCT. n timpul prelucrrii mesajului WM_PAINT, procedura de
fereastr apeleaz mai nti funcia BeginPaint ca s completeze cmpurile
structurii ps. Valoarea returnat de funcia BeginPaint este variabila handle a
contextului de dispozitiv. n general, aceasta este salvat ntr-o variabil
numit hdc de tipul HDC. Tipul de date HDC este definit ca un ntreg fr
semn, pe 32 de bii. Apelul funciei EndPaint elibereaz variabila handle a
contextului de dispozitiv.
O alt metod de obinere a variabilei handle a contextului de dispozitiv,
utlizat in afara prelucrarii mesajelor WM_PAINT este apelul la funcia GetDC.
Funcia ReleaseDC elibereaz variabila atunci cnd nu mai este necesar:
hdc = GetDC(hwnd) ;
[apelarea unor funcii GDI]
ReleaseDC(hwnd, hdc) ;
La fel ca funciile BeginPaint i EndPaint, i funciile GetDC i ReleaseDC ar
trebui apelate n pereche, n timpul prelucrrii aceluiai mesaj. Diferena
dintre cele dou metode de obinere a variabilei hdc este c variabila handle
returnat de funcia GetDC se refer la un dreptunghi cu ntreaga zon client
a ferestrei, i nu doar la un dreptunghi invalid. Spre deosebire de funcia
BeginPaint, GetDC nu valideaz nici o regiune invalid.
Un program Windows poate s obin i o variabil handle a unui context
de dispozitiv care se aplic ntregii ferestre, nu numai zonei client a ferestrei:
hdc = GetWindowDC (hwnd);
[alte linii de program]
ReleaseDC (hwnd, hdc);
Contextul de dispozitiv include, n afar de zona client, bara de titlu a
ferestrei, barele de derulare i chenarul
Funciile BeginPaint, GetDC i GetWindowDC obin variabila handle a
contextului de dispozitiv asociat unei anumite ferestre de pe ecran. O funcie
mai general pentru obinerea variabilei handle a unui context de dispozitiv
este CreateDC:
hdc = CreateDC (pszDriver, pszDevice, pszOutput, pData);
[alte linii de program]
DeleteDC (hdc);
Pentru a obine o variabila handle a contextului de dispozitiv pentru tot
spaiul de afiare, se utilizeaz urmtorul apel:
hdc = CreateDC ("DISPLAY", NULL, NULL, NULL);
18. Curbe Bezier. Funcia PolyBezierTo.
Curbele Bezier i datoreaz numele inginerului Pierre Bezier, angajat al
companiei de automobile Renault, care a elaborat un set de formule necesare
proiectrii la calculator a caroseriilor. De atunci, datorit formei
bidimensionale, curba Bezier s-a dovedit a fi cea mai util curb pentru
grafica pe calculator.
O curb Bezier este definit prin patru puncte - dou capete i dou puncte
de control. Capetele curbei sunt ancorate n cele dou puncte finale. Punctele
Rectangle
Ellipse
RoundRect
Chord
limea, respectiv nlimea zonei client. Zona client nu include spaiul ocupat
de barele de derulare. Limea unei bare de derulare verticale i nlimea
uneia orizontale sunt constante pentru un driver de afiare dat..
Windows se ocup de modul de utilizare a mouse-ului pentru barele de
derulare, dar barele de derulare ale ferestrelor nu au o interfa automatizat
cu tastatura.
Domeniul i poziia unei bare de derulare
Fiecare bar de derulare are asociate un domeniu" (definit printr-o
pereche de numere ntregi care reprezint valorile maxim i minim) i o
poziie" (punctul n care se afl caseta de derulare n domeniul asociat barei
de derulare). Atunci cnd caseta de derulare se afl la captul de sus (sau la
captul din partea stng) al barei de derulare, poziia corespunde valorii
minime. Captul de jos (sau captul din partea dreapt) al barei de derulare
reprezint valoarea maxim.
n mod prestabilit, domeniul unei bare de derulare este de la 0 (sus sau n
stnga) la 100 (jos sau n dreapta) dar poate fi uor modificat astfel nct s
aib o form mai convenabil pentru program:
SetScrollRange (hwnd, iBar, iMin, iMax, bRedraw) ;
Parametrul iBar poate avea una dintre valorile SB_VERT i SB_HORZ, iar
iMin i iMax sunt poziiile minim i maxim din domeniu, n timp ce bRedraw
trebuie s aib valoarea TRUE pentru ca Windows s redeseneze bara de
derulare pe baza noului domeniu stabilit.
Poziia casetei de derulare este reprezentat ntotdeauna printr-o valoare
ntreag. De exemplu, o bar de derulare cu domeniul cuprins ntre 0 i 4 are
cinci poziii ale casetei de derulare.
Pentru a stabili o nou poziie a casetei de derulare pe bara de derulare se
utilizeaz funcia SetScrollPos :
SetScrollPos (hwnd, iBar, iPos, bRedraw) ;
Parametrul iPos reprezint noua poziie, care trebuie s fie cuprins n
domeniul delimitat de iMin i iMax. Windows conine funcii asemntoare
(GetScrollRange i GefScrollPos) pentru obinerea domeniului i a poziiei unei
bare de derulare.
23. Elemente de baz despre mouse. Funcia GetSystemMetrics
(SM_MOUSEPRESENT); cButtons = GetSystemMetrics
(SM_CMOUSEBUTTONS). Parametrul SM_SWAPBUTTON. Zona senzitiv a
indicatorului.
Windows 95 permite folosirea mouse-ului cu un buton, cu dou butoane sau
cu trei butoane, precum i folosirea unui joystick sau a unui creion optic,
pentru simularea unui mouse cu un buton. Totui, cel mai utlizat este mouseul cu trei butoane, devenit un standard de facto. Al doilea buton al mouse-ului
este recomandat pentru apelarea meniurilor de context" - meniuri care apar
n fereastr n afara barei de meniu - sau pentru operaii speciale de tragere.
Pentru a determina dac mouse-ul este prezent se folosete funcia
GetSystemMetrics avnd drept parametru identificatorul SM_MOUSEPRESENT:
fMouse = GetSystemMetrics (SM_MOUSEPRESENT) ;
Variabila fMouse va avea valoarea TRUE (diferit de zero) dac mouse-ul
este instalat. Pentru determinarea numrului de butoane ale mouse-ului
instalat, folosii tot funcia GetSystemMetrics:
cButtons = GetSystemMetrics (SM_CMOUSEBUTTONS) ;
Mesajul WM_CTLCOLORBTN
Dac butonul este apsat, unul dintre biii cmpului UemState din structura
DRAWITEMSTRUCT are valoarea 1. Acest bit poate fi testat folosind constanta
ODS_SELECTED. Dac butonul deine cursorul de intrare, atunci bitul
ODS_FOCUS din cmpul UemState are valoarea 1.
n cazul folosirii buroanelor desneate de proprietar, Windows obine contextul de
dispozitiv i l include n structura DRAWITEMSTRUCT. Este necesar ca la sfrit
contextul de dispozitiv s fie n aceeai stare ca la nceput, deci orice obiect GDI selectat n
contextul de dispozitiv trebuie s fie deselectat.
26. Ferestre child. Butoane i input focus.
Butoanele de apsare, butoanele radio i butoanele desenate de proprietar
primesc cursorul de intrare atunci cnd se execut clic pe acestea. Controlul
indic faptul c deine cursorul de intrare printr-o linie punctat care
nconjoar textul. Atunci cnd o fereastr descendent primete cursorul de
intrare, fereastra printe l pierde; toate intrrile de la tastatur sunt
direcionate ctre control, nu ctre fereastra printe. Totui, controalele de tip
fereastr descendent rspund numai la apsarea barei de spaiu, care
funcioneaz n acest caz ca i butonul mouse-ului. Cu alte cuvinte,
programul a pierdut controlul asupra tastaturii.
Atunci cnd sistemul de operare Windows mut cursorul de intrare de la o
fereastr (cum ar fi fereastra printe) la o alt fereastr (cum ar fi controlul de
tip fereastr descendent), trimite mai nti un mesaj WM_KILLFOCUS ctre
fereastra care pierde cursorul de intrare. Parametrul wParam al mesajului
este variabila handle a ferestrei care primete cursorul de intrare. Windows
trimite apoi un mesaj WM_SETFOCUS ctre fereastra care primete cursorul
de intrare. Parametrul wParam al mesajului este variabila de manipulare a
ferestrei care pierde cursorul de intrare. (n ambele cazuri, wParam poate avea
valoarea NULL, ceea ce arat c nici o fereastr nu primete sau nu pierde
cursorul de intrare.)
O fereastr printe poate mpiedica un control de tip fereastr
descendent s primeasc cursorul de intrare prelucrnd mesajul
WM_KILLFOCUS. S presupunem c matricea hwndCmd conine variabilele
handle ale tuturor ferestrelor descendent. (Aceste variabile au fost salvate n
matrice n timpul apelrii funciei CreateWindow pentru crearea ferestrelor
descendent.) NUM este numrul ferestrelor descendent.
case WM_KILLFOCUS :
for (i = 0 ; i < NUM ; 1++)
if (hwndChild[i] == (HWND) wParam
SetFocus (hwnd) ;
break ;
return 0 ;
n aceast secven de cod, atunci cnd fereastra printe este avertizat c
urmeaz s piard cursorul de intrare n favoarea uneia dintre ferestrele
descendent, apeleaz funcia SetFocus ca s rectige cursorul de intrare.
ns aceast prelucrare mpiedic butoanele s rspund la apsarea barei
de spaiu, deoarece butoanele nu obin niciodat cursorul de intrare. O soluie
mai bun ar fi permiterea butoanelor s obin cursorul de intrare, i, n
Operatorii relationali
Semnificatie
negatie logica
&&
SI logic
||
SAU logic
Operatorul de atribuire
Operatorul de atribuire = se foloseste intr-o constructie de
forma variabila = expresie. Dupa evaluarea expresiei, rezultatul va fi atribuit
variabilei. Pentru atribuire se mai folosesc si operatorii +=, =, *=, /=, %=.
Operatorul conditional
Este de forma : expresie1? expresie2: expresie3 .
Daca expresie1 este adevarata, atunci va fi returnata valoarea
lui expresie2. Dacaexpresie1 este falsa, atunci va fi returnata valoarea
lui expresie3.
{
//in this block exception may get thrown
}
catch
{
//handle exception
}
finally
{
//cleanup code, optionally
}
Cuvantul cheie try nu poate aparea fara a fi completat de cuvantul
cheie catch sau de finally si nici invers. Finally este optional.
Pot exista mai multe instructiuni catch asociate unui try. Instructiunea care se
va executa se va stabili in functie de tipul exceptiei, celelalte sunt ignorate.
Throw
Pentru a lansa manual o exceptie se foloseste throw.
if (numbers == null)
throw new ArgumentNullException("Array is null");
Tipul obiectului trebuie sa fie o clasa derivata din Exception.
85.Evoluia tehnicilor de programare. Tipuri de date obiectuale.
ncapsulare.Suprancrcare.
1.1. Evoluia tehnicilor de programare
Programarea nestructurat(un program simplu, ce utilizeaz numai
variabile globale);complicaiile apar cnd prelucrarea devine mai ampl, iar
datele se multiplic i se diversific.
Programarea procedural(program principal deservit de subprograme cu
parametric formali, variabile locale i apeluri cu parametri efectivi); se obin
avantaje privind depanarea i reutilizarea codului i se aplic noi tehnici
privind transferul parametrilor i vizibilitateavariabilelor; complicaiile apar
atunci cnd la program sunt asignai doi sau mai muliprogramatori care nu
pot lucra simultan pe un acelai fiier ce conine codul surs.
Programarea modular(gruparea subprogramelor cu funcionaliti similare
n module, implementate i depanateseparat); se obin avantaje privind
independena i ncapsularea (prin separarea zonei de implementare,
pstrnd vizibilitatea numai asupra zonei de interfa amodulului) i se aplic
tehnici de asociere a procedurilor cu datele pe care le manevreaz, stabilind i
diferite reguli de acces la date i la subprograme.Se observ c modulele sunt
centrate pe proceduri,acestea gestionnd i setul de date pe care le
prelucreaz.
pentru celelalte obiecte care specific modul cum acele obiecte pot
interaciona cu el.
Polimorfismul Este abilitatea de a procesa obiectele n mod diferit, n funcie
de tipul sau de clasa lor. Mai exact, este abilitatea de a redefini metode pentru
clasele derivate. De exemplu pentru o clas Figura putem defini o metod arie.
Dac Cerc, Dreptunghi, etc. ce vor extinde clasa Figura, acestea pot redefini
metoda arie.
Motenirea Organizeaz i faciliteaz polimorfismul i ncapsularea,
permind definirea i crearea unor clase specializate plecnd de la clase
(generale) deja definite - acestea pot mprti (i extinde) comportamentul
lor, fr a fi nevoie de a-l redefini. Aceasta se face de obicei prin gruparea
obiectelor n clase i prin definirea de clase ca extinderi ale unor clase
existente. Conceptul de motenire permite construirea unor clase noi, care
pstreaz caracteristicile i comportarea, deci datele i funciile membru, de la
una sau mai multe clase definite anterior, numite clase de baz, fiind posibil
redefinirea sau adugarea unor date i funcii noi. Se utilizeaz ideea:
Anumite obiecte sunt similare, dar n acelai timp diferite. O clas
motenitoare a uneia sau mai multor clase de baz se numete clas derivat.
Esena motenirii const n posibilitatea refolosirii lucrurilor care funcioneaz.