Documente Academic
Documente Profesional
Documente Cultură
Programarea n C i C++
2.
13
4.
Programarea n C i C++
Avnd pagina de proprieti selectat apelai programul asistent Class
Wizard utiliznd simultan tastele CTRL i W. Va fi afiat caseta de dialog
Adding a Class. Apsnd butonul OK se va deschide caseta de dialog New
Class:
6.
7.
8.
Programarea n C i C++
9.
14
#include "NumePrenume.h"
#include "Varsta.h"
11.
CNumePrenume m_NumePrenume;
CVarsta m_Varsta;
15
12.
Programarea n C i C++
Pentru a aduga paginile de proprieti la clasa foii de proprieti se
apeleaz n constructorul foii funcia AddPage() :
#include PropertySheet1.h
14.
void CP10View::OnPs1() {
// TODO: Add your command handler code here
CPropertySheet1 obj("PropertySheet1");
int r = obj.DoModal(); }
Parametrul transmis constructorului este denumirea ce apare pe bara de
titlu a foii de proprieti.
Programarea n C i C++
16
17
Programarea n C i C++
Programarea n C i C++
Funcia
OnSetActive()
18
definete
un
pointer
spre
obiectul
PSWIZB_FINISH
activeaz
butonul
Finish,
19
Programarea n C i C++
Programarea n C i C++
20
obj_progBar.SetRange(1, 100);
obj_progBar.SetStep(10);
obj_progBar.SetPos( 0 ) ;
n continuare trebuie incrementat controlul folosind funcia StepIt() pentru a
indica evoluia operaiei.
obj_ progBar.StepIt();
Funcia StepIt() incrementeaz controlul cu mrimea pasului stabilit de funcia
SetStep().
21
Programarea n C i C++
void CP2View::Onbe()
{
// TODO: Add your command handler code here
obj_progBar.Create(WS_CHILD | WS_BORDER | WS_VISIBLE,
CRect(20, 40, 300, 60), this, IDC_PROGBAR);
obj_progBar.SetRange(1, 100);
obj_progBar.SetStep(10);
obj_progBar.SetPos(25);
}
Figura 32.1 prezint o bar de evoluie care indic faptul c 25% din
operaie este realizat. Aceasta are domeniul de la 1 la 100, mrimea pasului de 10
i ncepe de la poziia 25. Cnd se execut click n fereastra aplicaiei, Windows
trimite mesajul
WM_LBUTTONDOWN,
WM_TIMER,
MFC
Programarea n C i C++
22
23
Programarea n C i C++
Pentru a obine un buton glisant, trebuie instaniat un obiect al clasei
CSliderCtrl i apelat funcia membru Create (), care creeaz butonul glisant
propriu-zis i l asociaz obiectului CSliderCtrl:
CSliderCtrl obj_slider;
Prototipul funciei Create () indic urmtoarele argumente: dwStyle indicatoarele de stil ale butonului glisant; rect - un obiect rect sau CRect care
specific mrimea i poziia butonului glisant; pParentWnd - un pointer spre
fereastra printe a butonului glisant i nID - elementul de identificare al
butonului glisant.
BOOL
Create(DWORD
dwStyle,
const
RECT&
rect,
CWnd*
WS_VISIBLE
WS_BORDER
Programarea n C i C++
24
obj_slider.SetPageSize(10);
}
Funcia Onbg() creeaz o scal orizontal cu buton glisant i gradaii
deasupra i sub canalul de glisare i iniializeaz butonul din aplicaie
Butonul glisant are stiluri proprii, n afara stilurilor standard ale
ferestrei. Pentru stilurile ferestrei vor trebui utilizate cel puin stilurile
WS_CHILD i WS_VISIBLE. Butonul glisant prezentat utilizeaz stilul
WS_BORDER pentru ca marginile lui s ias n eviden fa de fundalul alb al
ferestrei. Prezentm n continuare toate aceste stiluri: TBS_AUTOTICKS - d
butonului posibilitatea de a desena indicatoare de gradare; TBS_BOTH afieaz gradaiile pe ambele pri ale canalului de glisare; TBS_BOTTOM afieaz gradaiile n partea de jos a canalului de glisare a butonului;
TBS_ENABLESELRANGE - permite butonului s afieze domenii de selecie;
TBS_HORZ - creeaz o scal orizontal cu buton glisant; TBS_LEFT plaseaz gradaiile pe partea stng a unui canal de glisare vertical;
TBS_NOTICKS - creeaz un canal de glisare cu buton fr gradaii;
TBS_RIGHT - plaseaz gradaiile pe partea dreapt a canalului de glisare
vertical; TBS_TOP - plaseaz gradaiile pe partea superioar a canalului de
glisare orizontal i TBS_VERT - creeaz un canal de glisare vertical cu buton
glisant.
Pentru a stabili domeniul butonului glisant ntre 0 i 100, funcia Onbg()
apeleaz SetRange() (obj_slider variabil membr de tip CSliderCtrl a clasei
CP2View). Apelarea funciei SetTicFreq() stabilete frecvena apariiilor
gradaiilor pe canalul de glisare a butonului glisant. Funciile SetLineSize() i
SetPageSize () determin distana pe care se deplaseaz butonul glisant cnd
utilizatorul apas o tast sau execut click cu mouse-ul. Lungimea liniei
25
Programarea n C i C++
Programarea n C i C++
26
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
pDC->TextOut(350,135, pos);
}
32.3. Controlul de incrementare
Cea de-a treia metod pentru transmiterea ctre aplicaie a unei valori,
ntr-un domeniu determinat, o reprezint folosirea controlului de incrementare.
Utilizatorul va executa click cu mouse-ul pe sgei pentru a mri/reduce
valoarea afiat.
27
Programarea n C i C++
CSpinButtonCtrl obj_spin;
Dup care trebuie apelat funcia Create(), care creeaz controlul de
incrementare propriu-zis i l asociaz obiectului CSpinButtonCtrl. Prototipul
funciei Create() indic urmtoarele argumente: dwStyle - indicatoarele de stil
ale butonului de incrementare; rect - un obiect RECT sau CRect care specific
mrimea i poziia butonului de incrementare; pParentWnd - un pointer spre
fereastra printe a butonului de incrementare i nID - elementul de identificare
al butonului de incrementare.
BOOL Create (DWORLD dwStyle, const RECT & rect, CWnd*
pParentWnd, UINT nID);
Aplicaia P2 creeaz controlul de incrementare (nti controlul nsoitor
obj_spinEdit al controlului de incrementare, apoi controlul de incrementare
obj_spin) n funcia mesaj-rspuns Onci() corespunztoare atributului controlul
de incrementare. Ambele obiecte obj_spinEdit (de tip CEdit) i obj_spin (de tip
CSpinButtonCtrl) sunt variabile membru ale clasei View.
void CP2View::Onci()
{
// TODO: Add your command handler code here
obj_spinEdit.Create(WS_CHILD | WS_VISIBLE | WS_BORDER,
CRect(20, 200, 120, 240), this, IDC_SPINNER);
Programarea n C i C++
obj_spin.Create(WS_CHILD
UDS_SETBUDDYINT
28
| WS_VISIBLE | WS_BORDER |
UDS_ALIGNRIGHT
UDS_ARROWKEYS,
butonul
de
incrementare
stnga
controlului
nsoitor;
29
Programarea n C i C++
Programarea n C i C++
30
Prin serializare structurile de date sunt convertite ntr-un flux liniar de bii,
iar refacerea structurii de date din fluxul de bii se numete deserializare.
Serializarea este folosit pentru stocarea unei structuri de date ntr-o memorie
persistent sau transferul structurii de date prin conexiunile unei reele. Clasa
care suport serializarea, de obicei este derivat din clasa CObject a bibliotecii
de clase MFC. Aceast clas COject conine o funcie virtual Serialize() care
are urmtorul prototip:
virtual void Serialize(CArchive& ar);
Scrierea i citirea de date ntr-un i dintr-un fiier se realizeaz printr-un
obiect care poart numele de arhiv i care este o instan a clasei CArchive.
Fiecare arhiv conine o referin ctre un fiier i pe msur ce datele sunt
incluse n ea, va ataa coninutului fiierului irul de bii corespunztor. ntr-o
aplicaie construit pe baza arhitecturii document/view, clasa document C...Doc
va conine funcia Serialize() care va fi apelat ori de cte ori este necesar
salvarea sau ncrcarea dintr-un fiier (ca rspuns la comenzile Save sau
Open din meniul File). Scrierea codului acestei funcii pentru a realiza
salvarea i ncrcarea datelor coninute n clasa C...Doc depinde doar de
programator, care va trebui s respecte urmtorii pai:
1. Utilizarea AppWizard-ului pentru crearea unui schelet de aplicaie MFC
Single Document;
2. Adugarea variabilelor necesare pentru nregistrarea datelor n clasa C...Doc;
3. Scrierea codului funciei OnNewDocument() a clasei C...Doc pentru
iniializarea unui document nou;
4. Scrierea codului funciei Serialize() a clasei C...Doc pentru a salva i ncrca
datele documentului;
31
Programarea n C i C++
Fig. 33.1
Funcia OnNewDocument() a clasei C...doc se apeleaz cnd este creat
un nou document. n aplicaia P3 funcia OnNewDocument() va iniializa irul
de caractere cu denumirea "new string".
BOOL CP3Doc::OnNewDocument() {
Programarea n C i C++
32
if (!CDocument::OnNewDocument())
return FALSE;
// TODO: add reinitialization code here
// (SDI documents will reuse this document)
stringinout="new string";
UpdateAllViews(NULL);
return TRUE;
}
Apelul funciei UpdateAllViews() permite actualizarea imaginii afiate.
Funcia Serialize() primete ca parametru un obiect CArchive, care
poate serializa mai multe tipuri de date, inclusiv clase de genul CString. Pentru
salvarea datelor se utilizeaz operatorul << iar pentru a ncrca date se folosete
operatorul >>. Cei doi operatori sunt suprancrcai n clasa CArchive astfel
nct s poat salva i ncrca mai multe tipuri de date.
Apelul funciei UpdateAllViews() dup ncrcarea documentului,
permite actualizarea imaginii afiate.
void CP3Doc :: Serialize(CArchive& ar) {
if (ar.IsStoring()) {
// TODO: add storing code here
ar<<stringinout;
}
else {
// TODO: add loading code here
ar>>stringinout;
UpdateAllViews(NULL);
}
33
Programarea n C i C++
Fig. 33.2
Funcia OnDraw() din clasa C...View afieaz coninutul documentului
curent n cadrul ferestrei aplicaiei. n aplicaia P3, imaginea afiat este
coninutul irului de caractere stringinout.
void CP3View::OnDraw(CDC* pDC) {
CP3Doc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
pDC->TextOut(30, 30, pDoc->stringinout); }
Codul pentru editarea datelor documentului
Modificarea irului de caractere se face prin intermediul unei casete de
dialog. Se adaug aplicaiei o nou resurs de tip CDialog, descris de o clas
cu numele CDialogstring, care are o variabil membru m_string de tip CString.
Programarea n C i C++
34
Fig. 33.3
35
Programarea n C i C++
Bibliografie
[1]
[2]
[3]
[4]
[5]
[6]
[7]
[8]
[9]
Programarea n C i C++
[14]
36
Oradea, 2009
[16]