17
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.

lab1b

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: