Upload
ana-andreea
View
3
Download
0
Embed Size (px)
Citation preview
Programare orientată obiect
1
Lucrare laborator 1
MEDIUL DE DEZVOLTARE DEVELOPER STUDIO.
CASETE DE DIALOG
ŞI UTILIZAREA CONTROALELOR DE TIP BUTON
Programarea orientată pe obiecte este o metodă de programare în care programele sunt
organizate ca şi colecţii de obiecte cooperante, fiecare dintre ele reprezentând o instanţă a unei
clase, iar clasele sunt membre ale unei ierarhii de clase, corelate între ele prin relaţii de
moştenire.
Limbajul C++ este unul dintre cele mai utilizate limbaje de programare orientate pe
obiecte; compilatoare, biblioteci şi instrumente de dezvoltare a programelor C++ sunt disponibile
atât pentru calculatoarele personale cât şi pentru cele mai dezvoltate sisteme şi staţii de lucru.
În cadrul laboratorului de POO se va folosi Microsoft Visual C++ 9.0 rulând sub sistemul
de operare Windows XP.
În această lucrare de laborator, veţi începe să învăţaţi câteva dintre conceptele de bază ale
limbajului C++ şi veţi crea un program simplu în mod consolă.
Programele scrise folosind Visual C++ sunt compilate ceea ce înseamnă că un fişier text
denumit fişier sursă este convertit într-un program de sine stătător care poate fi rulat în afara
mediului Visual C++. Aproape toate sistemele de dezvoltare C++ compilează programe
executabile. Unele limbaje de programare, cum ar fi anumite versiuni de BASIC, crează
programe care pot rula numai în mediul de dezvoltare. Alte limbaje, cum ar fi Smalltalk, rulează
în corelaţie cu o bibliotecă de rulare, care asistă programul aflat în execuţie. Dimpotrivă,
programele scrise folosind Visual C++, pot fi scrise şi compilate într-un program executabil.
Acel program poate fi apoi executat pe orice calculator care dispune de un sistem de operare
Windows.
În majoritatea sistemelor de dezvoltare C++, un program C++ parcurge mai multe etape
până la transformarea sa într-un program executabil:
Se crează unul sau mai multe fişiere sursă, care conţin textul unui program C++ (fişiere
cu extensia .cpp).
Se compilează programul folosind un compilator de C++. Această etapă poate consta, de
fapt, din mai multe comenzi de compilare a fişierelor sursă în fişiere intermediare,
cunoscute şi sub numele de fişiere în cod obiect – object code (fişiere cu extensia .obj).
Fişierele în cod obiect sunt legate la un loc folosind un instrument denumit program de
editare a legăturilor – linker.
Acum se poate lansa programul executabil (fişier cu extensia .exe).
Cu ceva timp în urmă, majoritatea sistemelor de dezvoltare pretindeau ca fiecare din aceste
etape să fie executată fie cu produse separate, din linia de comandă, fie cu ajutorul unui
instrument care determină fişierele care necesită actualizarea. Folosind instrumente moderne,
precum Visual C++, alcătuirea unui program este cu mult mai simplă. Mediul Visual C++
permite editarea, compilarea, executarea şi depanarea unui program în interiorul aceluiaşi mediu.
Toate etapele prezentate mai sus sunt supervizate de mediul de dezvoltare Visual C++ (întâlnit şi
sub acronimul IDE – Integrated Development Environment, sau Developer Studio sau Visual
Studio), ceea ce permite utilizatorului să se concentreze asupra scrierii programului, în loc de a
da atenţie unei mulţimi de detalii.
1. Microsoft Visual C++ 9.0
Lansarea mediului Visual C++ se poate face accesând Shortcut-ul de pe Desktop care
este însoţit de icon-ul ce simbolizează semnul infinit în culorile roşu, galben, verde şi albastru
(MSDEV – Microsoft Developer Studio). La lansarea mediului Visual C++ este afişată fereastra
Visual Studio. Visual Studio este numele dat interfeţei cu utilizatorul a lui Visual C++ şi va
reprezenta suprafaţa de lucru.
Programare orientată obiect
2
Visual Studio este numele dat interfeţei cu utilizatorul a lui Visual C++, interfaţă ce arată
conform figurii 1.
Când se foloseşte Visual C++ pentru dezvoltarea unui program, majoritatea activităţii
este privită drept un proiect. Fiecare proiect stochează informaţia necesară creării unui program
în C++. În funcţie de tipul şi de complexitatea programului, proiectul se poate reduce la câteva
fişiere sau poate include sute de fişiere.
Creaţi un proiect astfel:
Selectaţi comanda New a meniului File pentru a crea un nou proiect; caseta de dialog New va
fi afişată.
Specificaţi tipul proiectului pe care îl creaţi din pagina Projects a casetei de dialog New (din
lista proiectelor posibile alegeţi Win32 Console Application).
În caseta Project Name din caseta de dialog New specificaţi numele proiectului (indicaţie:
personalizaţi proiectele pe care le creaţi).
Folosiţi caseta Location pentru a preciza directorul în care vor fi plasate fişierele proiectului
(C:\POO\Studenti\.....). Calea afişată iniţial în caseta Location depinde de opţiunile exprimate
la instalarea mediului Visual C++.Pentru a modifica această locaţie, fie editaţi calea explicit,
fie apăsând butonul aflat în partea dreaptă a casetei Location urmăriţi ierarhia de directoare
până în subdirectorul dorit. Locaţia implicită se bazează pe numele proiectului şi este
C:\Program Files\Microsoft Visual Studio\My Projects\numele proiectului.
După stabilirea opţiunilor din cadrul casetei de dialog New, apăsarea butonului OK iniţiază
generarea proiectului. În cazul unei aplicaţii de tip Win32 Console Application, procesul de
generare a proiectului conţine un singur pas în care trebuie să alegeţi ce tip de aplicaţie în mod
consolă veţi crea. Alegeţi An empty project. La apăsarea butonului Finish este afişată o
casetă de dialog care vă informează despre crearea unui „schelet” de proiect vid, adică nu vor
fi create sau/şi adăugate fişiere suplimentare la proiect. Este precizată de asemenea calea către
directorul proiectului. În acest moment, puteţi vizualiza urmând această cale fişierele create.
Închideţi mediul de dezvoltare.
2. Mediul Developer Studio
Mediul de dezvoltare Developer Studio utilizat de Visual C++ pare destul de complex la
prima vedere (peste 100 de opţiuni de meniu şi aproximativ tot atâtea butoane de pe bara de
instrumente care pot fi selectate). Multe dintre acestea conduc la casete de dialog complexe şi la
pagini de proprietăţi care conţin numeroase opţiuni. Funcţionalitatea atât de bogată oferită de
Developer Studio este justificată de faptul că acest mediu este utilizat pe scară largă pentru a
produce aplicaţii complexe, profesionale. În cadrul acestui laborator, veţi învăţa o parte din
întreaga funcţionalitate.
Lansaţi din nou Visual C++. Deschideţi proiectul creat anterior astfel:
Din meniul File, selectaţi proiectul din cadrul listei Recent Workspaces.
Pentru a deschide un proiect care nu figurează în lista Recent Workspaces, selectaţi
Open Workspace din meniul File. Pe ecran este afişată fereastra Open Workspace în
care accesaţi directorul folosit pentru proiectul creat. Selectaţi din listă fişierul care
poartă numele proiectului şi extensia .dsw şi alegeţi Open.
Indiferent de metoda utilizată , proiectul ar trebui să fie acum deschis, cu titlul său afişat
în bara de titlu a ferestrei Developer Studio. Mediul de lucru a reţinut unde aţi rămas şi afişarea
este identică cu cea de la închiderea mediului de dezvoltare.
Afişarea cuprinde trei ferestre: cea a spaţiului de lucru al proiectului, cea pentru editare şi
cea de ieşire.
Fereastra spaţiului de lucru al proiectului – în partea stângă, este o fereastră andocabilă.
Există mai multe astfel de ferestre (fereastra Output – în partea de jos este una dintre ele), unele
apărând în modul depanare. Pentru a comuta între modul liber şi modul andocabil pentru o
fereastră, efectuaţi un dublu click pe bara de titlu a ferestrei respective. Fereastra spaţiului de
Programare orientată obiect
3
lucru al proiectului poate fi închisă prin efectuarea unui click pe butonul de închidere, aflat în
colţul dreapta sus. Redeschiderea ferestrei se realizează prin selectarea comenzii Workspace din
meniul View. Toate ferestrele andocabile au comportamente similare. Fereastra spaţiului de
lucru al proiectului permite vizualizarea acestuia din mai multe perspective. După ce aţi deschis
proiectul, in partea inferioară a spaţiului de lucru, sunt disponibile două pagini: ClassView şi
FileView. Paginile din partea inferioară a ferestrei împart proiectul în componente logice.
Efectuaţi click pe o pagină pentru a vizualiza reprezentarea corespunzătoare. Fiecare
reprezentare afişează o structură arborescentă de elemente care reprezintă componente ale
proiectului. Puteţi să expandaţi sau să condensaţi elementele arborelui efectuând click pe
simbolul plus (+) sau minus (-) alăturat în partea stângă a acestora. Pentru că aţi creat o aplicaţie
în mod consolă ca un proiect gol nici un fişier nu există în acest moment în proiect şi nu poate fi
vizualizat.
Elementele de bază ale unui proiect în C++
Programul creat are multe în comun cu programe C++ de dimensiuni mult mai mari:
Prima linie din program este un mesaj către compilator de a include şi un alt fişier
la compilarea fişierului creat. Instrucţiunea #include cere compilatorului să caute
fişierul iostream.h şi să-l introducă în fişierul sursă.
Următoarea linie reprezintă începutul funcţiei principale (main). Toate
programele în C++ constau dintr-una sau din mai multe funcţii. Funcţia denumită
main este locul în care începe execiţia programului, motiv pentru care toate
programele în C++ trebuie să aibă o funcţie denumită main. Funcţia returnează
(return) o valoare întreagă (int) sistemului de operare la încheierea executării.
Funcţia nu acceptă parametrii. Sistemul de operare foloseşte valoarea returnată de
funcţia main pentru a afla dacă programul a fost executat cu succes. Este posibilă
returnarea către sistemul de operare a unor valori care indică reuşită sau eşec.
3. Casete de dialog
Caseta de Dialog este una dintre cele mai redutabile arme din arsenalul oricărui
dezvoltator sub Windows datorită utilităţii sale într-o multitudine de situaţii. Casetele de Dialog
pot fi utilizate pentru simpla afişare de mesaje către utilizator, dar forma cea mai uzuală în care
se folosesc casetele de Dialog este cea prin care utilizatorii au posibilitatea să introducă
informaţii pentru aplicaţie. În mod normal, utilizatorul poate să confirme sau să anuleze datele
introduse. Anularea închide pur şi simplu caseta de Dialog, ca şi cum aceasta nu ar fi fost
deschisă; confirmarea duce la efectuarea unei acţiuni care implică datele introduse, după care, de
multe ori, însă nu întotdeauna, închide caseta de Dialog.
Crearea casetelor de Dialog folosite în aplicaţiile Visual C++ se realizează în două etape.
Prima etapă este faza de proiectare, care presupune crearea machetei pentru caseta de Dialog şi
adăugarea controalelor necesare. Cea de a doua etapă este faza de programare, care presupune
stabilirea de legături între caseta de Dialog şi controalele sale, pe de o parte, şi clasele şi funcţiile
din codul C++, pe de altă parte. Prima fază (faza de proiectare) poate fi parcursă fără a scrie nici
o linie de cod. Pentru a realiza o aplicaţie, trebuie mai întâi creat un proiect, care va fi folosit
pentru administrarea tuturor elementelor care compun un program Visual C++ şi care au ca
rezultat o aplicaţie Windows.
Deşi este posibilă crearea şi proiectarea de casete de Dialog în Visual Studio fără a crea
în prealabil un proiect, se obişnuieşte mai degrabă adăugarea şi editarea casetelor de Dialog în
cadrul unui proiect existent. Mai întâi se va folosi AppWizard pentru a crea un nou proiect
corespunzător unei aplicaţii de tip Dialog.
AppWizard este un instrument puternic al cărui scop este generarea unui nou proiect
funcţional. AppWizard permite precizarea mai multor caracteristici personalizabile pe care le
Programare orientată obiect
4
implementează apoi în fişierele sursă pe care le creează. Proiectele generate cu AppWizard sunt
complet funcţionale, ele putând fi asamblate şi rulate fără a fi nevoie de cod adiţional.
Crearea unui nou proiect pentru o aplicaţie de tip Dialog, presupune parcurgerea
următorilor paşi:
Se efectuează clic pe meniul File şi se selectează New;
Se selectează pagina Projects, (în cazul în care această pagină nu este deja
selectată) şi este afişată o listă cu toate tipurile de proiecte care se pot crea, de
exemplu la selectarea opţiunii MFC AppWizard (exe), se va avea ca rezultat un
program executabil Windows standard. Visual C++ este însoţit de biblioteca de clase
de bază Microsoft (Foundation Classes). Biblioteca MFC reprezintă o mulţime de
clase C++ predefinite. AppWizard generează un schelet de aplicaţie prin crearea unor
clase derivate din clasele aflate în biblioteca MFC.
Orice proiect are nevoie de un nume, care se va specifica prin execuţia unui clic pe
caseta Project Name şi se introduce numele proiectului;
Caseta Location este folosită pentru precizarea directorului în care vor fi plasate fişierele
proiectului. Calea afişată iniţial în caseta Location depinde de opţiunile exprimate la instalarea
lui Visual C++, pentru modificarea ei, fie se va edita calea explicit, fie se va efectua un clic pe
butonul aflat în partea dreaptă a casetei.
După stabilirea opţiunilor din cadrul
casetei de Dialog New, se va da clic pe
OK, apărând caseta de Dialog MFC
AppWizard Step1 care va genera tipul
de program dorit.
Această casetă de Dialog oferă trei opţiuni
pentru tipul de interfaţă a aplicaţiei:
Single document (SDI), un program
care controlează un singur
document la un moment dat;
Multiple documents (MDI), un
program care poate controla în
acelaşi timp mai multe documente
diferite;
Dialog Based, un program care are drept
fereastră principală de afişare o casetă de
Dialog.
După selectarea unuia dintre aceste tipuri de
aplicaţie, utilizatorului i se solicită mai multe informaţii
despre noul program, putându-se de asemenea selecta
limba care va fi folosită pentru resurse.
Se va selecta butonul de opţiune Dialog
Programare orientată obiect
5
Based;
Se va efectua clic pe Next pentru a avansa la caseta de Dialog MFC AppWizard-Step
2.
În acest pas există posibilitatea personalizării a anumitor elemente ale aplicaţiei chiar înainte ca
aceasta să fie creată. Efectul selectării şi deselectării diferitelor caracteristici vizuale poate fi
văzut în diagramele aflate în partea stângă. Se poate totodată să se modifice titlul casetei de
Dialog principale. Alte opţiuni privesc activarea suportului pentru facilităţi mai avansate.
Se va efectua un clic pe Next, pentru a trece la caseta de Dialog MFC AppWizard-
Step3.
Se poate solicita ca AppWizard să includă
comentarii în cadrul fişierelor sursă, care pot ajuta la
înţelegerea codului generat şi arată unde trebuie plasat
codul adiţional.
În această etapă apare întrebarea dacă se doreşte ca
AppWizard să adauge comentarii la codul pe care îl
generează. Comentariile sunt de natură explicativă şi ajută
la înţelegerea locului unde trebuie adăugat propriul cod. Se
selectează Yes, Please pentru a include comentarii.
În mod implicit, AppWizard creează un program
care foloseşte o versiune DLL (dynamic link library - bibliotecă cu legare dinamică) a MFC.
Acest lucru este avantajos deoarece fişierul executabil (.exe) rezultat din proiect va fi mai mic,
pentru că toate funcţiile MFC necesare vor fi căutate în
alte fişiere de pe disc.
Se va efectua un clic pe Next pentru a trece la
caseta de Dialog MFC AppWizard-Step 4.
În această ultimă etapă se poate vedea numele
claselor şi fişierelor care vor fi generate de AppWizard.
Dacă aceste nume nu satisfac, se pot modifica prin
intermediul casetelor de editare din partea inferioară a
casetei de Dialog.
Se va efectua clic pe Finish.
Se dă clic pe OK din caseta de
Dialog New Project Information,
iar AppWizard va crea noul
proiect şi fişierele sursă ale
acestuia.
În acest moment, deşi nu s-a văzut
nici măcar o linie de cod sursă C++, există o
aplicaţie Windows completă şi perfect
funcţională.
Secţiunea afişată de către Visual
Studio în partea stângă se numeşte secţiunea
spaţiului de lucru. Fereastra spaţiului de
lucru al proiectului este o fereastră
andocabilă. Există mai multe astfel de ferestre (fereastra Output este una dintre ele), unele
apărând în modul depanare. Pentru a comuta între modul liber şi modul andocabil pentru o
fereastră, efectuaţi un dublu clic pe bara de titlu a respectivei ferestre. Fereastra spaţiului de lucru
al proiectului poate fi închisă prin efectuarea unui clic pe micul buton de închidere aflat în colţul
dreapta sus. Redeschiderea ferestrei se realizează prin selectarea comenzii Workspace din meniul
View. Toate ferestrele andocabile au comportamente similare.
Programare orientată obiect
6
Fereastra spaţiului de lucru al proiectului permite vizualizarea proiectului din mai multe
perspective. Când este deschis un proiect, în partea inferioară a ferestrei spaţiului de lucru sunt
disponibile paginile: ClassView, ResourceView şi FileView. În cazul proiectelor dezvoltate
pentru aplicaţii de baze de date este posibil să apară în plus o pagină DataView. Aceste pagini
permit accesarea oricărei componente a proiectului, se poate modifica dimensiunea secţiunii
spaţiului de lucru şi a altor secţiuni care apar în Visual Studio prin efectuarea unui clic pe
marginea secţiunii şi
deplasarea mouse-ului în timp
ce se ţine butonul apăsat.
Paginile din partea
inferioară a ferestrei împart
proiectul în componente
logice. Fiecare reprezentare
afişează o structură
arborescentă de elemente care
reprezintă componente ale
proiectului. Se poate expanda
sau condensa elementele
arborelui efectuând clic pe
simbolul plus (+) sau minus (-)
alăturat în partea stângă a acestora.
Efectuând un clic pe eticheta de pagină ClassView, va fi afişată reprezentarea claselor.
Această reprezentare afişează toate clasele folosite în cadrul
proiectului. AppWizard a creat aceste clase odată cu crearea iniţială a
proiectului. Fiecare element aflat la nivelul secundar (mai puţin
elementul Global) reprezintă o clasă şi afişează numele respectivei
clase. La expandarea unei clase, fiecare element subordonat reprezintă
fie o funcţie membru, fie o variabilă membru a clasei. Pictogramele
alăturate fiecărui element oferă informaţii suplimentare.
Cea mai mare parte a programării în cadrul unui proiect Visual
C++ este legată de clase. Acesta este motivul pentru care pagina
ClassView se dovedeşte de multe ori a fi cea mai utilizată, aici
putându-se accesa orice clasă, orice funcţie membru sau orice variabilă
din proiect. Efectuarea unui dublu clic asupra unui element va deschide
fişierul cu cod sursă corespunzător în fereastra editorului, având
cursorul plasat pe linia corespunzătoare elementului în cauză.
Efectuarea unui dublu clic pe numele unei clase accesează
definiţia clasei. Efectuarea unui dublu clic pe o variabilă membru
accesează începutul definiţiei funcţiei din cadrul fişierului care implementează clasa.
Numele fişierului deschis în fereastra de editor activă este
afişat în bara de titlu a ferestrei Developer Studio.
Pe lângă posibilitatea de a naviga printre clasele din
proiect, secţiunea ClassView oferă multe alte facilităţi prin
intermediul meniurilor contextuale.
Un meniu contextual, este afişat pe ecran lângă cursorul
mouse-ului la efectuarea unui clic cu butonul drept asupra unui
element. Pentru a afişa meniul contextual pentru un element din
arborele de clase, se va selecta respectivul element cu butonul
drept al mouse-ului, elementul în cauză va fi evidenţiat şi alături
de el va fi afişat meniul de context. Meniul contextual afişat
depinde de tipul elementului selectat.
Meniul contextual permite efectuarea de diverse operaţii
asupra clasei selectate. Selectarea opţiunii Go to Definition, are acelaşi efect cu efectuarea unui
Programare orientată obiect
7
dublu clic pe numele clasei, şi anume accesarea fişierului sursă care conţine definiţia clasei.
Patru dintre opţiunile meniului sunt folosite pentru adăugarea de funcţii sau variabile în cadrul
clasei.
La execuţia unui clic pe
opţiunea References pe ecran va
apărea mesajul:
Se va efectua un clic pe Yes
pentru a genera fişierul de navigare.
Proiectul va fi asamblat automat.
Odată încheiat procesul, se va închide
fereastra Output prin efectuarea unui
clic pe cruciuliţa aflată în colţul din stânga
sus.
Informaţiile de navigare aduc
facilităţi suplimentare de navigare,
disponibile prin intermediul meniului
contextual din ClassView.
Opţiunea References are ca efect
afişarea tuturor locaţiilor din proiect care
fac referire la elementul selectat. Pentru fiecare referinţă sunt afişate numele fişierului sursă şi
numărul liniei, fiind oferită astfel, posibilitatea de a accesa direct oricare dintre linii.
Opţiunea Derived Classes afişează detalii privind clasa selectată şi clasele derivate din
acestea.
Opţiunea Base Classes afişează,
detalii privind clasa selectată şi toate clasele
sale de bază, inclusiv clasele din biblioteca
MFC.
Opţiunea Group By Access
din meniul contextual este folosită
pentru a ordona membrii clasei.
Aceştia sunt afişaţi în ordine
alfabetică în cazul în care opţiunea
Group By Access nu este bifată; în caz contrar,
membrii sunt afişaţi în ordinea tipului de
acces-privat, protejat şi apoi public.
Pentru a adăuga o variabilă va fi apelat
meniul contextual, din care se va selecta Add
Member Variable, fiind afişată caseta de
Dialog Add Member Variable, care este
folosită, trebuind să se specifice tipul, numele şi modul de
acces pentru noua variabilă.
Casetele de Dialog Add Member Variabile şi Add
Member Function, adaugă automat liniile de cod necesare
în fişierele antet şi de implementare corespunzătoare clasei
selectate.
Pentru a adăuga o funcţie membru într-o clasă se
Programare orientată obiect
8
va apela din meniul contextual al clasei, opţiunea Add Member Function, trebuind să se
stabilească tipul funcţiei şi să i se dea un nume. Dacă noua funcţie necesită parametrii, aceştia
vor fi introduşi în caseta Function Declaration.
Noua funcţie va apărea în secţiunea Class View ca şi element subordonat clasei în care s-
a creat, iar corpul acestei funcţii este vizibil în fereastra editorului.
Când se adaugă membrii claselor prin intermediul casetelor de Dialog Add Member, nu
are loc nici un fel de validare.
Pentru a se afişa resursele, se va efectua clic pe eticheta de
pagină Resource View din fereastra spaţiului de lucru, după care se va
expanda elementele efectuând clic pe semnele plus (+) alăturat în partea
lor stângă.
Se va observa, că, AppWizard a creat două machete pentru
casete de Dialog. Macheta IDD_EXEMPLU_DIALOG reprezintă
caseta de Dialog principală a aplicaţiei, pe care AppWizard a creat-o
din cauză că s-a optat pentru o aplicaţie de tip Dialog. Macheta
IDD_ABOUTBOX este caseta de Dialog apelată prin intermediul
opţiunii de meniu Help About şi afişează pictograma aplicaţiei şi
numărul de versiune.
Această reprezentare afişează toate resursele folosite în proiect. Noţiunea de resursă
cuprinde elementele vizuale ale unui proiect. De pildă, casetele de Dialog sunt resurse, la fel ca
şi meniurile sau pictogramele.
Motivul pentru care resurse de genul meniurilor, al casetelor de Dialog şi al tabelelor de
şiruri sunt separate de codul sursă este acela că se doreşte posibilitatea de modificare a acestora
independent de acesta. Astfel se înlesneşte foarte mult dezvoltarea de aplicaţii internaţionale.
Spre exemplu, toate şirurile dintr-o tabelă de şiruri pot fi traduse într-o a doua limbă, fără a fi
necesară modificarea codului sursă.
Asemeni reprezentării claselor, reprezentarea
resurselor afişează un meniul contextual la efectuarea unui
clic cu butonul drept asupra unui element. În condiţiile în
care se va selecta Insert din meniul contextual Personal
Resources, pe ecran va apărea caseta de Dialog Insert
Resource, în care se pot vedea diferitele tipuri de resurse
care pot fi inserate într-un proiect Visual C++.
O tabelă de acceleratori reprezintă o listă de asocieri
între combinaţii de taste şi comenzi din program. O
denumire uzuală pentru accelerator este cea de combinaţie
de taste. O combinaţie de taste reprezintă o modalitate mai
rapidă de a executa o comandă decât selectarea acesteia
dintr-un meniu. De exemplu o soluţie convenabilă pentru executarea comenzii Cut din meniul
Edit, este Ctrl+X.
O resursă de tip bitmap este o imagine de o dimensiune oarecare compusă din puncte.
Fiecare punct poate avea o culoare distinctă. Bitmap-urile sunt utilizate pentru afişarea
imaginilor care se văd pe barele de instrumente, iar ceea ce se vede pe ecranul introductiv afişat
la lansarea Visual C++ este o imagine bitmap mai mare.
Un cursor este o resursă de tip imagine. Cursoarele sunt folosite în principal ca
reprezentări ale indicatorului mouse-ului (cursorul standard din Windows este o săgeată).
Trăsătura distinctivă a unui cursor este prezenţa unui punct senzitiv, care este folosit pentru a
urmări poziţia acestuia pe ecran.
O pictogramă este, de asemenea, o resursă de tip imagine.
O resursă de tip Dialog este o machetă de fereastră care poate conţine celelalte tipuri de
resurse, aşa cum sunt meniurile şi butoanele.
O resursă de tip meniu conţine exact ceea ce sugerează numele său, şi anume un meniu.
De regulă, o aplicaţie include un meniu în partea superioară a ferestrei sale principale (aşa cum
Programare orientată obiect
9
este şi cazul cu Developer Studio), însă pot exista mai multe meniuri. De exemplu, este posibilă
adăugarea într-un proiect a unei resurse de tip meniu şi utilizarea acesteia ca şi meniu de context.
O resursă de tip tabelă de şiruri ar trebui să conţină toate şirurile de caractere folosite
într-o aplicaţie. Fiecare element are asociat un identificator unic, utilizat pentru a referi şirul
respectiv în cadrul codului sursă.
Motivul pentru care toate şirurile sunt introduse într-o tabelă de şiruri şi nu direct în
fişierele sursă este înlesnirea traducerii în alte limbi. Dacă toate textele utilizate într-o aplicaţie se
află într-o tabelă de şiruri, este posibilă crearea unei a doua tabele într-o altă limbă. După
lansarea aplicaţiei este utilizată tabela de şiruri corespunzătoare.
O resursă de tip bară cu instrumente conţine o mulţime de butoane. De regulă fiecare
buton reprezintă o comandă de meniu. Pe suprafaţa butoanelor pot fi desenate imagini sub formă
de bitmap-uri şi fiecare buton poate avea asociată o explicaţie care va fi afişată atunci când
mouse-ul se deplasează deasupra butonului.
O resursă de tip versiune conţine informaţii despre aplicaţii, ca de exemplu, firma
producătoare, numele produsului, un număr de versiune etc., informaţii ce se află într-un format
standard care permite accesarea lor din alte aplicaţii.
Lucrul cu macheta pentru caseta de dialog
Editarea unei machete pentru caseta de dialog principală IDD_EXEMPLU_DLG, va
presupune parcurgerea următorilor paşi:
1. Se va efectua clic pe textul TODO: Place Your Controls
Here, apoi se apasă Delete, pentru ca textul respectiv, să fie
înlăturat.
2. Pentru înlăturarea butonului Cancel, se va efectua clic pe el,
apoi se va apăsa tasta Delete.
3. Se execută clic pe OK.
4. Se apasă pe butonul din dreapta al mouse-ului, pentru a
apela meniul contextual.
5. Se va selecta din meniul contextual opţiunea Properties, şi va
fi afişată caseta Push Button Properties.
6. S
e
selectează pagina General, apoi se va
înlocui cuvântul OK din caseta Caption cu Exit.
În acest moment s-a modificat eticheta unui control fără a afecta modul în care controlul
operează în cadrul programului. Programele identifică resursele prin ID. În cazul de faţă ID-ul
folosit la adăugarea codului care răspunde la mesajele corespunzătoare controlului este un ID de
control predefinit de către MFC care determină apelarea funcţiei CDialog:OnOK(), aceasta
conţinând codul necesar pentru închiderea casetei de
Dialog.
7. Se va închide caseta de dialog Push Button
Properties.
S-au realizat modificări minore unei casete de
Dialog existente, prin AppWizard. Să vedem însă ce se
întâmplă la crearea unei casete de Dialog complet noi.
Crearea sau inserarea unei noi machete pentru o casetă de
Dialog, se va desfăşura în următoarea succesiune:
se va selecta pagina Resource View a ferestrei spaţiului de
lucru al proiectului;
Programare orientată obiect
10
se va efectua clic cu butonul drept pe catalogul Dialog, şi va fi afişat un meniu
contextual;
se selectează Insert Dialog, şi va fi creată o nouă machetă de casetă de Dialog,
aceasta fiind deschisă în fereastra editorului de resurse. Noua casetă de Dialog este
generată cu butoanele implicite OK şi Cancel.
La inserarea unei noi machete pentru o casetă de Dialog, editorul de resurse asigură
atribuirea unui ID unic. Acest ID generat va fi IDD_DIALOG urmat de un număr şi va figura în
catalogul Dialog din secţiunea Resource View.
Primul lucru care trebuie realizat, după crearea unei casete de Dialog este înlocuirea ID-
ului generat, cu ceva mai sugestiv. De exemplu, în cazul în care caseta de Dialog va fi utilizată
pentru a înregistra informaţiile privind prezenţa la serviciu a salariaţilor, un ID posibil ar fi
IDD_PONTAJ.
Se va efectua clic cu butonul drept pe suprafaţa machetei Dialogului, în afara oricărui
control, va fi afişat un meniu contextual. Trebuie să nu fie nici un control selectat la
apelarea meniului de context, în acest moment
putând să se acceseze proprietăţile însăşi
casetei de Dialog.
Se va selecta Properties din meniul contextual,
fiind afişată caseta de Dialog Properties.
Se selectează pagina General;
În cadrul casetei ID, se înlocuieşte
IDD_DIALOG1 tastând IDD_PONTAJ.
Se obişnuieşte prefixarea ID-ului unei casete de Dialog cu IDD_ pentru a face distincţia
faţă de celelalte tipuri de resurse.
Modificarea proprietăţilor este una dintre cele mai uzuale operaţii din cadrul proiectării
casetelor de Dialog, de aceea, se recomandă păstrarea deschisă a casetei de Dialog Properties,
utilizând pioneza din colţul stânga sus al acesteia când se efectuează un clic în altă parte.
Developer Studio include şi alte casete de Dialog cu pioneze.
Tipul resursei selectate determină paginile şi opţiunile conţinute în caseta de Dialog
Property. Prin intermediul opţiunilor casetei de Dialog Property se pot modifica caracteristicile
întregii casete de Dialog şi ale fiecărui control conţinut. Cea de-a doua proprietate pe care este
foarte probabil se va modifica la crearea unei casete de Dialog este titlul acesteia, care este
textul ce apare pe bara de titlu.
Pentru exemplul nostru, se va modifica
titlul, tastând Pontaj Dialog în interiorul casetei
Caption. Noul titlu va apărea pe macheta
Dialogului din editorul de resurse pe măsură ce se
tastează.
Printre alte opţiuni disponibile în pagina
General se află modificarea fontului utilizat de
către caseta de Dialog. Dacă se selectează o
dimensiune mai mare de 8, întreaga casetă de
Dialog va deveni mai mare. Dimensiunea casetei
de Dialog este calculată pe baza înălţimii şi lăţimii
medii ale fontului utilizat. Fontul implicit este MS Sans Serif de dimensiune 8 şi nu se
obişnuieşte folosirea altor fonturi în casetele de Dialog.
O unitate de tip Dialog este numele dat unităţii de măsură folosită în casetele de Dialog şi
bazată pe fontul asociat Dialogului. Este posibil să se mai întâlnească şi prescurtarea DLU, care
vine de la Dialog-Unit - (unitatate de tip Dialog).
Xpos şi Ypos specifică poziţia în care va apărea iniţial caseta de Dialog, aceasta este
relativă la fereastra părinte a casetei de Dialog. Valori nule pentru aceste coordonate vor
determina afişarea casetei de Dialog în centrul ferestrei sale părinte.
În mod sintetic, se poate spune că proprietăţile unei casete de dialog sunt:
Programare orientată obiect
11
Dialog ID, în mod normal este stabilită la o valoare, dar este bine să se dea nume cât
mai sugestive;
Dialog Caption (legendă), în mod normal stabilită la Dialog (şi aceasta de regulă se
schimbă);
Menu (meniu) în mod normal liberă, întrucât foarte puţine casete de dialog folosesc
meniuri;
Position (poziţie), în mod normal liberă.
În caseta de Dialog Properties se află trei pagini
care privesc stilurile. Dacă se selectează eticheta Styles, se
selectează prima pagină.
Unele opţiuni de stil, pot influenţa alte opţiuni. Dacă
se va deselecta stilul Title Bar, aceasta nu va înlătura doar
bara de titlu, ci va dezactiva, totodată , opţiunile meniului de
sistem şi va elimina titlul. Dacă se va valida apoi, Title Bar, va trebui să se introducă din nou
titlul. O problemă similară poate apărea la modificarea marginii Dialogului.
Stabilirea unor stiluri de Dialog determină automat invalidarea altor opţiuni, fiind
posibilă stabilirea proprietăţilor unui Dialog, astfel încât acesta să devină inutilizabil.
O casetă de Dialog poate fi făcută destul de uşor inutilă sau chiar complet invizibilă prin
stabilirea unor opţiuni de stil, problemă care poate fi delicat de rezolvat. Cea mai uşoară metodă
de verificare (în cazul suspectării unei astfel de situaţii), este compararea opţiunilor de stil cu
cele ale unei casete de Dialog care funcţionează corect. În marea majoritate a cazurilor, sunt
recomandate opţiunile de stil implicite.
Valorile prestabilite sunt:
Style (stil) de obicei stabilit la Popup (derulant) pentru majoritatea casetelor de dialog. În
cazul şabloanelor speciale folosite în Form Views sau Dialog Bars (bare de dialog), stilul
este stabilit La Child (descendent);
Border (margine), stabilit la Dialog Frame (marginea casetei de dialog) pentru
majoritatea casetelor de dialog;
Minimize box (casetă de minimizare), creează o casetă de minimizare pentru caseta de
dialog, aceasta este de obicei liberă;
Maximize box (casetă de maximizare), creează o casetă de maximizare pentru caseta de
dialog, aceasta este de obicei liberă;
Titlebar (bara de titlu), creează o bară de titlu pentru caseta de dialog, fiind aproape
întotdeauna activată, deoarece majoritatea casetelor de dialog au o bară de titlu;
System Menu (meniu sistem) utilizat pentru a indica dacă respectiva casetă de dialog
este dotată cu un meniu sistem, în mod normal această casetă este activată;
Horizontal scroll (derulare pe orizontală), utilizat pentru a crea o bară de derulare pentru
caseta de dialog. Această casetă de validare este aproape întotdeauna liberă, deoarece
casetele de dialog folosesc rareori o bară de derulare;
Vertical Scroll (derulare pe verticală), utilizat pentru crearea unei bare de derulare
verticală pentru caseta de dialog, fiind rar folosit;
Clip Siblings, folosit numai pentru ferestrele descendent, în mod normal este liberă;
Clip Children, folosită pentru ferestrele părinţi, în majoritatea cazurilor această casetă
este dezactivată.
Eticheta marcată More Styles (alte stiluri) conţine
proprietăţi adiţionale pentru caseta de dialog, între care
amintim:
System Modal, care creează o casetă de dialog
sistem-modal, dacă această opţiune este activată,
utilizatorul nu poate comuta la un alt program;
Absolute align (aliniere absolută), este utilizat pentru a indica modul de poziţionare a
casetei de dialog la afişarea iniţială a acesteia. Dacă această casetă este validată,
caseta de dialog este aliniată la ecran, în loc de fereastra părinte;
Programare orientată obiect
12
No idle msg, previne transmiterea unui anumit mesaj de fereastră, WM_ENDEIDLE,
atunci când coada de aşteptare a mesajelor din caseta dialog este liberă, normal,
această casetă de validare este inactivă;
Local edit, utilizată pentru a specifica modul de alocare a memoriei unui control de
editare, această casetă de validare în mod normal este inactivă, ceea ce presupune
folosirea de către controalele de editare a memoriei situate în afara segmentului de
date alocat programului;
Visible, utilizat pentru a arăta că o casetă de dialog trebuie să fie vizibilă când este
afişată pentru prima dată, normal această casetă este activă. În cazul unor vizualizări
formular (Form Views), caseta este inactivă;
Disabled (inactiv), arată că o casetă de dialog, trebuie să fie inactivă la prima afişare.
În mod normal, această casetă de validare este inactivă;
3D-look, oferă casetei de dialog un aspect tridimensional, normal, este inactivă;
Set foreground, forţează caseta de dialog să fie plasată în prim plan, normal este
inactivă;
No fail create, cere sistemului Windows să creeze caseta de dialog, chiar dacă
survine o eroare, normal, este inactivă;
Control, creează o resursă casetă de dialog care poate fi folosită drept control
descendent (child control), normal, este inactivă;
Center, determină centrarea casetei de dialog la afişarea iniţială, normal, este
inactivă;
Center mouse, plasează cursorul mouse-ului în centrul casetei de dialog, normal este
inactivă.
Mai există câteva stiluri avansate, localizate în fereastra corespunzătoare etichetei
Extended Styles (stiluri extinse), care sunt rareori folosite.
Casetele de Dialog, însă nu au nici o valoare fără controale.
Tipuri de instrumente utilizate
De fiecare dată când se deschide o machetă a unei casete de Dialog în cadrul editorului
de resurse, în Developer Studio apare un meniu Layout. De asemenea vor fi afişate două noi
bare de instrumente, bara cu instrumente Dialog (ce ajută la poziţionarea controalelor), şi cea cu
instrumente Controls.
Unde:
1. Testare 8. Spaţiere orizontală
2. Aliniere la stânga 9. Spaţiere verticală
3. Aliniere la dreapta 10. Egalarea lăţimilor
4. Aliniere în sus 11. Egalarea înălţimilor
5. Aliniere în jos 12. Egalarea dimensiunilor
6. Centrare verticală 13. Comutator pentru grilă
7. Centrare orizontală 14. Comutator pentru linii de ghidare
Bara cu instrumente Controls, permite adăugarea de controale în cadrul unei casete de
Dialog.
Unde:
1. Selectare 14. Control imagine
1
2
3
4
5
6
7
8
9
10
14
11
12
13
Programare orientată obiect
13
2. Etichetă statică 15. Control de editare
3. Etichetă de grup 16. Control buton
4. Casetă de validare 17. Buton de opţiune
5. Casetă combinată 18. Casetă cu listă
6. Bară de derulare orizontală 19. Bară de derulare verticală
7. Control de modificare incrementală 20. Control indicator de evoluţie
8. Control glisor 21. Tastă de acces
9. Control listă 22. Control arbore
10. Control de paginare 23. Control animaţie
11. Control casetă de editare formatată 24. Control de selecţie a datei/orei
12. Control calendar 25. Control adresă IP
13. Control propriu 26. Casetă combinată extinsă
Dacă vreuna din barele cu instrumente Dialog sau Controls nu este vizibilă, afişarea ei
se face prin una din următorii paşi:
se selectează Customize din meniul Tools, şi va apare caseta de Dialog Customize;
se selectează pagina Toolbars;
se selectează din pagina Toolbars, Dialog/Controls;
se efectuează clic pe Close.
Fiecare imagine de pe bara de instrumente Controls reprezintă un tip distinct de control.
Dacă se plasează cursorul mouse-ului deasupra unei astfel de imagini, este afişată o casetă mică
ce descrie tipul controlului. Selectarea tipului de control care va fi adăugat la caseta de Dialog se
face prin efectuarea unui clic pe imaginea corespunzătoare. Odată ce a fost selectat un control,
imaginea sa este afişată în adâncime. Imaginea săgeată din partea stângă sus a barei cu
instrumente deselectează controlul şi aduce mouse-ul înapoi la comportamentul său obişnuit.
Adăugarea unui control într-o casetă de Dialog se face selectând mai întâi imaginea
corespunzătoare şi efectuând apoi clic pe macheta casetei de Dialog.
Înainte de a adăuga controale în noua casetă de Dialog, se măreşte dimensiunea acesteia,
pentru a avea la dispoziţie un spaţiu mai mare.
Pentru a modifica mărimea casetei de Dialog, se realizează un clic pe marginea machetei
casetei de Dialog, în jurul machetei apare un dreptunghi cu puncte de dimensionare, iar prin
1 14
2 15
3 16
4 17
5 18
6 19
7 20
8 21
9
10 11
22
23 24
23 12
13 26
Programare orientată obiect
14
selecţionarea punctelor adecvate se poate mări, micşora atât în lăţime cât şi în înălţime. Pe
măsură ce tragem cu cursorul într-una din părţi apare caseta cu dimensiunea modificată.
4. Adăugarea de butoane de opţiune
Există numeroase situaţii în care logica presupune alegerea unei singure opţiuni dintre
două sau mai multe. Butoanele de opţiune sunt create tocmai în această idee, şi sunt capabile să
efectueze automat deselectarea. Butoanele de opţiune sunt plasate aproape întotdeauna în casete
de grupare, ceea ce face posibil ca o casetă de dialog să aibă mai multe grupuri de butoane de
opţiune care să funcţioneze independent.
Deoarece selectarea şi deselectarea butoanelor dintr-un grup, se petrece în mod automat,
singurul lucru pe care trebuie să-l facă programul, este să afle care dintre opţiunile ce se exclud
mutual este selectată. În acest scop butoanele de opţiune sunt asociate cu o variabilă. Toate
acestea se realizează relativ simplu, aşa cum se va demonstra pe parcursul unui exemplu.
Cel mai important lucru care trebuie urmărit la crearea butoanelor de opţiune, este
asigurarea corectitudinii proprietăţilor şi a opţiunilor de stil care se specifică în cadrul
editorului de resurse. La efectuarea unui clic pe un buton de opţiune care are stilul Auto, butonul
respectiv este selectat şi toate celelalte butoane de opţiune din grupul său şi care au acelaşi stil
sunt în mod automat deselectate.
Pentru fiecare control buton de opţiune dintr-o casetă de grupare trebuie validată
opţiunea Auto Style pentru a beneficia de deselectare automată. Această opţiune este stabilită
implicit la crearea butoanelor de opţiune.
Gruparea controalelor se va face prin intermediul proprietăţii Group. Un control care are
proprietatea Group validată este considerat primul control din grup; fiecare control care urmează
(în raport cu ordinea de selectare) şi are proprietatea Group invalidată se află în acelaşi grup.
Grupul se încheie la următorul control care are proprietatea Group validată. Deplasarea între
controalele unui grup se face cu ajutorul tastelor săgeată.
În exemplul luat în considerare se presupune că pentru absolvenţii de liceu, din anul
2007, li se dă un chestionar, în care ei trebuie să selecteze între 5 Centre Universitare, iar mai
apoi să aleagă un profil.
Pentru aceasta se va realiza un proiect Absolvenţi (parcurgându-se etapele de creare a
unui proiect prezentate în capitolul anterior), care va utiliza două grupuri de butoane de opţiune,
primul dintre ele selectează un oraş de renume cu centru universitar, iar celălalt selectează
domeniul dorit.
1) În proiectul Absolvenţi se va realiza caseta de dialog cu
acelaşi nume IDD_ABSOLVENTI_DIALOG, care se va
deschide în cadrul editorului de resurse;
2) Se selectează butonul Group Box de pe bara de
instrumente Controls, apoi se adaugă o casetă de grupare
în partea stângă a casetei de dialog;
3) Caseta de grupare fiind selectată, se va efectua clic pe butonul din dreapta la mouse-
ului, apărând meniul contextual, din care
se va alege opţiunea Properties, ce
conduce la deschiderea casetei de dialog
Group Box Properties;
4) se va introduce în caseta Caption Oraş, şi
se validează opţiunea Tab Stop;
5 ) se selectează butonul Radio Button de pe
bara de instrumente Controls şi se adaugă cinci
butoane de opţiune în interiorul casetei de
grupare, Oraşe.
Programare orientată obiect
15
6) Se selectează primul buton, se introduce IDC_BUCURESTI pentru ID, şi Bucuresti
pentru Caption, după care se validează opţiunea Group;
7) Se selectează apoi următoarele butoane, şi analog cum s-a procedat la pasul 6, se vor
trece numele următoarelor centre universitare: Timişoara, Iaşi, Cluj şi Craiova, dar nu
se va mai valida opţiunea Group.
8) Se selectează butonul Group Box de pe bara de instrumente Controls, apoi se creează
o casetă de grupare în partea dreaptă a grupului Oraşe;
9) Se introduce Profil în caseta Caption, şi se validează opţiunea Tab Stop;
10) Se adaugă trei butoane de opţiune în interiorul cadrului Profil;
11) Se selectează toate cele trei butoane de opţiune care tocmai au fost adăugate
efectuând clic pe fiecare în timp ce se
ţine apăsată tasta Ctrl;
12) Se execută clic pe pagina Styles a
casetei de dialog Properties, şi se
validează opţiunea Push-like;
13) Se selectează butonul superior, se
introduce IDC_TEHNIC pentru ID, şi
Tehnic pentru Caption, după care se va
valida opţiunea Group;
14) Se selectează în mod analog, celelalte
două butoane, unde se completează
profilul economic şi umanist.
Ordinea de selectare este importantă pentru
funcţ
ionar
ea
corectă a butoanelor de opţiune, deoarece, pe ea se
bazează identificarea următorului control din grup.
Pentru a inspecta ordinea de selectare, se va alege
Tab Order din meniul Layout; pentru a verifica
faptul că grupurile de butoane de opţiune au fost
configurate corect, se apasă Ctrl+T sau se
selectează Test din meniul Layout. Ar trebui să se
poată selecta exact unul dintre oraşe şi unul dintre
profile. Pentru a încheia testarea se apasă Esc.
5. Asocierea de variabile pentru butoanele de opţiune
Scopul unui grup de butoane de opţiune este să permită alegerea unui element din mai
multe. La un moment dat, programul trebuie să identifice butonul selectat şi să acţioneze în
consecinţă. În acest scop, unui grup de butoane de opţiune i se asociază o variabilă. Variabila
Programare orientată obiect
16
este asociată de fapt primului buton de opţiune din grup (cel care are validată opţiunea Group).
În exemplul prezentat, aceste butoane sunt cele care au IDC_BUCURESTI şi IDC_TEHNIC.
Adăugarea unor variabile, şi asocierea lor cu butoanele de opţiune adecvate se face prin
intermediul instrumentului ClassWizard, în cazul exemplului nostru, va fi necesară câte o
variabilă pentru fiecare grup.
Asocierea variabilelor cu butoanele de opţiune prin intermediul ClassWizard, se
realizează în următorii paşi:
se selectează ClassWizard;
se alege pagina Member Variables;
se selectează din caseta combinată
Class Name: clasa asociată dialogului,
(CAbsolventiDlg);
se selectează din caseta cu listă
Control Ids: ID-ul controlului, pentru
exemplul nostru se va selecta
(IDC_BUCURESTI);
se execută clic pe butonul Add
Variable ( aflat în dreapta casetei de
mai sus) sau se va executa dublu clic
pe ID-ul contorului, şi se va afişa
caseta de dialog Add Member Variable;
se introduce numele variabilei în caseta Member
Variable Name; pentru exemplu, se va introduce
m_nOrase, la Category ( categoria de variabile)
se lasă valoarea implicită value, iar la tipul
variabilei se lasă int (integer) apoi se efectuează
clic pe OK, pentru a reveni în pagina Member
Variables din ClassWizard.
În mod analog, se selectează IDC_PROFIL din
caseta cu listă Control IDs, şi se introduce
m_nProfil în caseta Member Variable
Name, apoi se efectuează clic pe OK pentru
a fi adăugată noua variabilă membru;
Se execută OK, pentru a închide caseta de
dialog ClassWizard.
În acest moment, variabilele au fost adăugate,
aşa că trebuie iniţializate. ClassWizard a generat în
cadrul programului codul care iniţializează valorile cu
-1, ceea ce înseamnă, că dacă, se asamblează şi rulează
programul în acest moment, la afişarea casetei de
dialog nu va fi selectat nici unul dintre butoanele de
opţiune.
Va trebui să se editeze codul de iniţializare
generat de ClassWizard în constructorul clasei CAbsolventiDlg. Pentru aceasta, se va selecta
pagina ClassView, se expandează clasa CAbsolventiDlg, şi se efectuează dublu clic pe primul
element expandat, având ca rezultat apariţia ferestrei de editare unde este afişată funcţia
constructor. Vor trebui înlocuite valorile celor două variabile adăugate (-1) pentru iniţializarea
lor, cu zero:
m_nOrase = 0;
m_nProfil = 0;
Singurul lucru care rămâne de făcut, este ataşarea de cod care să identifice butoanele de
opţiune selectate în cadrul fiecărui grup. Aceasta se face prin adăugarea unei funcţii de tratare
pentru butonul OK şi afişarea unui mesaj Succes!.
Programare orientată obiect
17
Se va adăuga o funcţie
de tratare a mesajului
BN_CLICKED corespunzător
butonului IDOK. Ataşarea
funcţiei se va face prin apelarea
vrăjitorului ClassWizard fie prin
dublu clic pe butonul OK, fie
prin Ctrl+W şi va apare caseta
de dialog corespunzătoare din
care vom selecta opţiunea
Message Maps.
Se poziţionează cursorul
în cadrul casetei Object Ids pe
IDOK, alegem din caseta de mesaje BN_CLICKED după care
alegem opţiunea de Add Function, pe ecran apărând mesajul:
Se va efectua un clic pe butonul OK, şi în acest moment există o
funcţie membru cu numele OnOK (), iar pentru ca această
funcţie să pregătească şi să afişeze un mesaj care să ţină cont de
butoanele de opţiune selectate, se va adăuga următorul cod, prin
selectarea opţiunii Edit code:
void CAbsolventiDlg::OnOK()
{
// TODO: Add your control notification handler code here
CString strMessage;
CString strProfil;
CString strOrase;
//** Preluam in variabile informatiile despre controale
UpdateData();
//** Extragem eticheta fiecaruia dintre butoanele de optiune selecatte
GetDlgItem (IDC_TEHNIC + m_nProfil)->GetWindowText (strProfil);
GetDlgItem (IDC_BUCURESTI + m_nOras)->GetWindowText (strOrase);
//** Formatam si afisam mesajul
strMessage = "Succes! to a " + strProfil + " profil in: " + strOrase ;
MessageBox (strMessage);
void CAbsolventiDlg::OnOK()
În acest moment se va asambla şi rula
programul.
La selectarea unei anumite opţiuni din ambele
grupuri, de exemplu Timişoara la oraş, şi economic la
profil, pe ecran va apare mesajul: