Documente Academic
Documente Profesional
Documente Cultură
Lucrarea de laborator 5.
Visual C++6.0 – MFC Desenarea şi afişarea imaginilor
Aplicaţia pe care o veţi dezvolta va afişa un teanc de monede. Opţiunile de meniu vor permite
adăugarea sau înlăturarea unei monede din teanc. Datele, care reprezintă de fapt numărul de monede,
sunt reţinute în clasa document, fiind accesate de clasa vizualizare în scopul afişării teancului sau de
clasa cadru pentru actualizare. Deşi este un exemplu simplu, el oferă o imagine asupra scopului
fundamental al arhitecturii Document/View, şi anume încapsularea datelor. Prin încapsulare, datele
sunt stocate exclusiv în clasa document, fiind oferite funcţii de acces care să permită clasei vizualizare
sau clasei cadru să prezinte informaţiile către utilizator, respectiv să permită actualizarea acestor
informaţii.
Pentru ca reprezentarea să poată extrage date ale documentului, ea trebuie să fie mai întâi
capabilă să acceseze obiectul document. Infrastructura MFC se ocupă automat de acest aspect,
adăugând în clasa reprezentare a aplicaţiei metoda GetDocument.
Clasa derivată din CView este responsabilă de afişarea teancului de monede. Codul care se
ocupă efectiv de desenarea monedelor se află în funcţia OnDraw()a clasei respective. AppWizard
creează un schelet al acestei funcţii, care trebuie apoi completat:
void CSDIView::OnDraw(){
//Obtinerea pointerului la document
CSDIDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
//Salvarea pensulei curente
CBrush* pOldBrush=pDC->GetCurrentBrush();
//Crearea unei noi pensule de culoare galbena
CBrush br;
br.CreateSolidBrush(RGB(255,255,0));
//Selectarea pensulei galbene in contextul dispozitiv
pDC->SelectObject(&br);
//Obtinerea numarului de monede de la document si
//reprezentarea fiecarei monede prin doua elipse
for(int i=0;i<pDoc->GetNr();i++){
int y=200-30*i;
pDC->Ellipse(40,y,100,y-30);
pDC->Ellipse(40,y-5,100,y-35);
}
//Restaurarea vechii pensule
pDC->SelectObject(pOldBrush);
}
Exerciţiu 2. Adăugaţi două opţiuni de meniu Add şi Rem pentru adăugarea şi eliminarea unei
monede. Trataţi aceste resurse de meniu în clasa CMainFrame:
void CMainFrame::OnAdd() {
//Obţinerea pointerului spre document
CSDIDoc* pDoc=(CSDIDoc*)GetActiveDocument();
pDoc->add();
//Actualizarea vizualizării documentului
pDoc->UpdateAllViews(NULL);
}
void CMainFrame::OnRem() {
//Obţinerea pointerului spre document
CSDIDoc* pDoc=(CSDIDoc*)GetActiveDocument();
pDoc->rem();
PROGRAMAREA ORIENTATĂ PE OBIECTE - Laborator