Corso di Visual C++

Le classi finestra, GDI, file e database

 

Completiamo in questa puntata la descrizione della gerarchia delle classi MFC; si rimanda alla parte 5 del corso per la discussione delle classi CObject, CCmdTarget e CDocument e per il grafico della gerarchia delle classi.

La classe che offre il supporto delle finestre è CWnd e ne incapsula la maggioranza delle proprietà (barra del titolo, bordi, scroll-bars ...) e contiene molte funzioni membro che permettono di personalizzare il comportamento degli oggetti CWnd. Tale classe non viene quasi mai usata direttamente, ma vengono utilizzate sue derivate come CFrameWnd, CView e CDialog.

CFrameWnd specifica il comportamento della finestra principale di livello superiore (barre del titolo, dei menu, degli strumenti, di stato ecc.), CView è la base per le classi di vista di livello inferiore mentre CDialog incapsula il comportamento delle finestre di dialogo.

A partire dalla versione 4 della MFC ci sono anche dei 'wrapper' per alcuni nuovi tipi di controllo; ad esempio CListView è un wrapper per il controllo CListBox.

I wrapper sono, in modo molto semplicistico, dei contenitori ( ing. to wrap = avvolgere) per delle funzioni di altre classi e che in tal modo possono essere utilizzate in modo più semplice senza riscrivere molto codice.

Tra le classi finestra che utilizzeremo più di frequente ci sono quelle di vista; tutte quante sono derivate da CView e per tal motivo è bene approfondire un pò l'argomento.

E' possibile utilizzare anche direttamente CView, ma in alcuni casi è bene essere a conoscenza delle sue classi derivate per evitare di scrivere codice che troviamo già nella MFC. Ad esempio una classe derivata da CView è CScrollView che ci permette di utilizzare le barre di scorrimento orizzontali e verticali in modo molto semplice, c'è poi la classe CCtrlView che è la classe madre per CEditView, CListView, CRichEditView e CTreeView che sono i wrapper per i controlli di cui abbiamo parlato sopra.

La classe CFormView implementa una classe con una vista di tipo controllo di dialogo, mentre ad esempio CRecordView è utilizzabile per implementare un database.

Infine una classe nuova è CHtmlView che implementa le funzioni per un browser Internet come Internet Explorer.

Una classe importantissima è la classe CDC (Class Device Context) che implementa le funzionalità del contesto di dispositivo di Windows.

Tale Device Context è la GDI (Graphic Device Interface) che è responsabile dell'output della nostra applicazione su stampante, video e altri dispositivi di uscita.

Quasi tutte le funzioni di CDC si comportano allo stesso modo sia che l'output sia rivolto allo schermo che alla stampante e ciò permette una enorme flessibilità nello scrivere il codice del nostro programma.

Le classi più importanti derivate da CDC sono CWindowDC, CPaintDC, CClientDC e CMetaFileDC. Queste classi semplificano l'utilizzo delle funzioni di disegno e ad esempio richiamano automaticamente le funzioni BeginPaint e EndPaint di CDC in risposta ai messaggi WM_PAINT.

Quando si disegna qualcosa si utilizzano gli oggetti grafici della GDI come quelli derivati da CGdiObject. Tale classe deriva varie altre classi per ogni strumento di disegno come CBrush per i pennelli, CPen per le penne e CBitmap per le bitmap.

Quando si utilizza uno strumento di disegno, lo si deve prima selezionare nel contesto di dispositivo con la funzione SelectObject, quindi dopo l'uso si deve ripristinare lo stato precedente del CDC; questa operazione è apparentemente noiosa, ma è necessaria perchè la GDI è una risorsa globale di Windows.

Un'altra classe che può risultare utile è CFile ed implementa varie funzioni di gestione dei file: dalla loro creazione alla successiva modifica e lettura. Dispone anche di funzioni per estrarre il path dal nome del file e per ricavarne gli attributi.

Inoltre questa è la classe base per CSocketFile che permette di trattare con i sockect e CInternetFile che ci permette l'accesso e la modifica dei file su web.

MFC ci mette perfino a disposizione delle classi per la gestione dei database ODBC (Open Database Connectivity) e alcune per i database DAO (Data Access Object). Tali classi ci permettono di accedere ai record delle basi di dati registrate nel sistema (tramite DSN). Dopo l'accesso al database è possibile aggiungere o eliminare record o semplicemente esplorare il database con tutte le funzionalità di ricerca e selezione a cui siamo abituati.

Le classi per i database ODBC sono CDataBase e CRecordSet, mente quelle per accedere ai database DAO sono CDaoWorkspace e CDaoDatabase.

 

Torna all'indice Generale del corso di Corso di Visual C++ di Software Planet