Вы находитесь на странице: 1из 18

A.

Benabbou
Programmation en VC++ avec les MFC

La MFC (Microsoft Foundation Class) est une bibliothque de classes rutilisables
dveloppes en C++ pour la plate forme Windows (voir figure).
La classe CObject est la classe de base des classes MFC et permet la compatibilit entre ces
diffrentes classes.
Remarques :
MFC contient aussi un sous ensemble de classes qui nhritent pas de CObject
Convention dcriture :
Les classes MFC commencent toutes par la lettre C suivie du nom de la classe
commenant par majuscule
Les mots constituant le nom dune mthode commencent tous par majuscule
Les variables en minuscules
Les constantes sont toutes en majuscules
1. La classe CString
Classe trs utilise par les programmes bass sur les MFC. Elle permet de traiter les chanes
de caractres dynamiques et surcharge les oprateurs =, = =, !=,+ et +=. La conversion dun
objet CString en chane char* se fait laide du casting (const char*).
Quelques mthodes :
int GetLength() Renvoie le nombre de caractres de la chane
bool IsEmpty() Teste si la chane est vide
void Empty() vide la chane
void GetAt(int i) Retourne le caractre la position donne, similaire loprateur []
void SetAt(int i, char x) Mets un caractre la position donne
CString Mid(int pos, int nb)
CString Left(int nb)
CString Right(int nb)
Extrait une sous chane de longueur nb partir dune position ou de
la gauche ou de la droite dune chane
int Find(char x, int pos)
int Find(char *s, int pos)
Cherche la 1
re
occurrence du caractre x ou de la sous chane s
dans la chane en commenant partir de la position pos
void Format(''sp'', v1,v2,) Similaire sprintf, permet dcrire les variables v1, v2, dans la
chane en utilisant les spcificateurs de format donns dans la chane
''sp''.
void MakeUpper()
void MakeLower()
Conversion en majuscule/minuscule de tous les caractres de la
chane

2. La classe CWnd
CWnd offre les fonctions de base pour toutes les classes fentres de la bibliothque MFC, en
par1iculier les contrles ( zone ddition, bouton, etc.) car ils hritent tous de CWnd.
Gnralement on n'a jamais recourt crer une instance directe de la classe CWnd, on utilise
gnralement une classe qui drive de CWnd comme CFrameWnd ou CDialog etc.
Please purchase PDFcamp Printer on http://www.verypdf.com/ to remove this watermark.
A. Benabbou
Quelques mthodes :
void SetWindowText( '' texte'') : permet d'crire du texte dans la fentre.
void GetWindowText( s) : transmet tout le texte de la fentre vers la chane s.
void CenterWindow( ) : permet de centrer la fentre relativement sa fentre mre.
CWnd* SetFocus( ) : positionne le focus sur la fentre et renvoie un pointeur sur l'objet
fentre qui avait le focus sinon elle renvoie NULL.
void MoveWindow( int x, int y, int w, int h) : change la position et la taille de la fentre
BOOL ShowWindow( int sw ) : affiche ou cache la fentre, le paramtre sw spcifie la
manire d'affichage de la fentre:
. SW_SHOW : affiche la fentre.
. SW_HIDE : cache la fentre.
. SW_SHOWMAXIMIZED : Affiche la fentre dans sa taille maximale
. SW_SHOWMINIMIZED : Rduit la fentre en icne
BOOL EnableWindow( bool etat=true ) : rend la fentre active ou non
void SetFont( CFont* pFont ) : spcifies une nouvelle fonte pour la fentre
CFont* GetFont( ) : renvoie un pointeur sur l'objet fonte courante de la fentre
CDC* GetDC( ) : Renvoie un pointeur de type contexte de. priphrique pour la zone
vue de la fentre
CMenu* GetMenu( ) : renvoie un pointeur sur l'objet menu de la fentre.
BOOL SetMenu(CMenu* pMenu) : spcifie l'objet pMenu comme menu de la fentre.
Si pMenu est NULL la fentre n'aura pas de menu.
3. Premier programme Windows
Un programme sous Windows est constitu au moins de deux classes :
Une classe application qui hrite de CWinApp et permettant de lancer lapplication et
dafficher la fentre principale, et
Une classe fentre reprsentant la fentre principale de lapplication. Celle-ci hrite de
gnralement de la classe CFrameWnd ou CDialog ou dune autre classe drive de
CWnd.
Exemple :
Crer un projet vide de type Win32 Application
Demander lutilisation des MFC dans le menu Project->Settings->General en
slectionnant Use MFC in a Shared DLL la place de Not Using MFC
Crer un fichier source vide projet.cpp
Ajouter en haut du programme la directive #include 'afxwin.h'
#include "afxwin.h"
class Fenetre : public CFrameWnd{
public :
Fenetre(){ //constructeur par dfaut
}
};
class Application : public CWinApp{
public :
virtual BOOL InitInstance(){
Fenetre *f=new Fenetre();
f->Create(NULL,"Le titre de ma fentre");
f->ShowWindow(SW_SHOW);
this->m_pMainWnd=f;
return true;
Please purchase PDFcamp Printer on http://www.verypdf.com/ to remove this watermark.
A. Benabbou
}
};
//crer une instance de lapplication
Application *app=new Application();
Le programme ne contient pas un main explicite, il est appel automatqiuement par les
MFC lors de la cration dun objet de la classe CWinApp.
La mthode InitInstance() est automatiquement appele par le constructeur de CWinApp
et permet dinitialiser lapplication et de crer et afficher la fentre principale.
Lattribut m_pMainWnd de CWinApp permet dindiquer le nom de la fentre principale.
Cest la mthode Create() de CFrameWnd qui permet de crer la fentre et de prciser un
titre de celle-ci.

4. Programme utilisant lIDE VC++
On peut utiliser lIDE de VC++ pour crer des applications MFC plus rapidement et en
utilisant lditeur de ressources pour crer les lments de la fentre en mode design.
Il suffit de spcifier que le projet est de type MFC Application et de suivre les tapes de
lassistant. On peut alors choisir entre plusieurs types dapplications : mono document,
multiple documents ou bas sur une bote de dialogue.
Le dernier type est le plus simple car il gnre uniquement deux classes comme dans
lexemple prcdent, la fentre tant ici une classe drive de CDialog et non de
CFrameWnd.
On peut alors ajouter des contrles la bote de dialogue et modifier leurs proprits ou leur
associer un gestionnaire dvnement dans la fentre Proprits de lIDE.
On peut aussi associer aux contrles des noms dobjets des classes correspondantes en
choisissant ajouter une variable dans le menu contextuel du contrle (utiliser le bouton droit
de la souris).



Please purchase PDFcamp Printer on http://www.verypdf.com/ to remove this watermark.
A. Benabbou
5. Les contrles standard de VC++
Tous les contrles de VC++ drivent de la classe CWnd et sont donc considrs comme une
fentre (un conteneur de contrles). Les mthodes et les attributs de la classe CWnd sont donc
automatiquement accessibles par tous ces contrles.
Pour crer nimporte quel contrle de VC++, il faut appeler son constructeur (gnralement le
constructeur par dfaut) et ensuite appeler la mthode Create() qui permet de crer laspect
visuel du contrle et spcifie sa fentre conteneur en paramtre.
En plus, la mthode Create() doit attribuer au contrle un entier unique reprsentant son
identificateur dans le domaine des ressources visuelles de lapplication (le dernier paramtre
de Create).
Exemple :
//cration dun objet bouton de commande
CButton *b=new CButton() ;
//rectangle reprsentant les dimensions du contrle
CRect r(x,y,w,h);
//cration du contrle bouton
b->Create("Caption ", WS_VISIBLE, r, f, ID);
//f est le nom de la fentre
//et ID est un entier identifiant le contrle
//WS_VISIBLE est un style du contrle

5.1 Contrle Bouton
Un bouton est un objet de la classe CButton qui drive de CWnd. Cette classe reprsente la
fois les boutons de commande, les cases cocher et les boutons radios. La diffrence se fait
au niveau du paramtre style du bouton de la mthode Create().
Parmi les styles on peut citer :
BS_PUSHBUTTON : permet de crer un bouton de commande
BS_AUTOCHECKBOX : permet de crer une case cocher
BS_AUTORADIOBUTTON : permet de crer un bouton radio
BS_GROUPBOX : permet de crer un cadre pour grouper dautres boutons
-Les boutons de commande
Un bouton de commande ou bouton poussoir est un contrle utilis spcifiquement pour
lancer les traitements lorsque l'on clique sur celui-ci.
Un bouton de commande ragit lorsque les vnements associs aux messages suivants se
produisent:
ON_BN_CLlCKED : L'utilisateur click sur le bouton
ON_BN_DOUBLECLICKED : l'utilisateur double click sur le bouton

Exemple :
//cration dun objet case cocher
CButton *b=new CButton() ;
//rectangle reprsentant les dimensions du contrle
Crect r(x,y,w,h);
//cration du contrle case cocher
b->Create("Caption ", WS_VISIBLE | BS_AUTOCHECKBOX ,r,f,ID);




Please purchase PDFcamp Printer on http://www.verypdf.com/ to remove this watermark.
A. Benabbou
-Cases cocher
Une case cocher est un contrle qui affiche une cche ou un croisillon lorsquon clique avec
la souris. Les cases cocher reprsentent des options conjonctives cd quil est possible de
cocher plusieurs cases ou aucune, parmi un groupe de cases cocher.
En gnral un programme ne ragit pas directement un click de la case cocher. Il se
contente de connatre ou de modifier l'tat de la case un moment prcis.
On peut ensuite utiliser les mthodes suivantes pour la variable associe une case cocher :
int GetCheck( ) : permet de retourner l'tat de la case cocher ou du bouton radio (1 si le
bouton est slectionn et 0 sinon)
void SetCheck( int etat ) : permet de spcifier l'tat de la case cocher ou du bouton
radio (1 si le bouton est slectionn et 0 sinon)
-Boutons radio
Cest un contrle qui affiche une marque lorsquon clique avec la souris. Les boutons radio
reprsentent des options strictement disjonctives cd quil nest possible de marquer quun
seul bouton parmi un groupe de boutons radio.
La programmation des boutons radio ressemble au bouton de commande cd programmer
lvnement click sur chaque option. En plus on ajoute une variable entire (ou dun autre
type) la classe qui permet de prendre le numro de loption choisie lorsquon clique sur cette
option.
void ClasseDlg ::OnClickedRadioX()
{
variable=numOptionX;
}

Remarque :
On peut associer aux contrles des variables (de catgorie control ) laide de
ClassWizard. Mais on peut aussi obtenir un pointeur sur nimporte quel contrle dune fentre
en utilisant la mthode membre GetDlgItem( ) qui prend comme paramtre lidentificateur du
contrle concern :
CWnd* GetDlgItem( int ID) ;
Exemple : si on a un bouton radio dont lidentificateur est IDC_RADIO1 on peut rcuprer
le contrle correspondant par :
CButton *br = (CButton*) GetDlgItem(IDC_RADIO1);

5.2 Contrle ListeBox
Un contrle zone de liste est un objet de la classe CListBox. Comme les autres classes
associes des contrles, CListBox drive de la classe CWnd.
Ajout dun item une liste
Il existe deux mthodes pour ajouter des lments un contrle zone de liste:
A l'aide de la fonction membre AddString(item) o item spcifie la chane ajouter
Exemple : m_List.AddString ("Ali");
A l'aide de la fonction membre InsertString(indice, item) en spcifiant l'indice de
litem insrer, le premier lment tant l'indice 0.
Exemple: m_List.InsertString(0, "Mohamed");
Les chanes ajoutes une zone de liste dont la proprit Sort est active sont
automatiquement tries lorsqu'elles sont ajoutes. Dans le cas contraire, elles sont simplement
ajoutes la fin de la liste.
Nombre d'lments d'une liste
La fonction membre GetCount() retourne le nombre d'lments dune zone de liste.
Exemple : int nbElements=m_List.GetCount();
Please purchase PDFcamp Printer on http://www.verypdf.com/ to remove this watermark.
A. Benabbou
Suppression d'lments d'une liste
La fonction membre DeleteString(indice) supprime litem lindice donn en paramtre de
la liste.
Exemple : m_List.DeleteString(0);
Vider une liste
Pour vider entirement une zone de liste, on utilise la fonction membre ResetContent().
Exemple : m_List.ResetContent() ;
Slectionner un lment
La fonction SetCurSel(indice) permet de slectionner un lment donn par son indice.
Exemple : m_List.SetCurSel(0) ;
Indice de l'lment slectionn
La fonction GetCurSel() renvoie l'indice de l'lment actuellement slectionn. Si aucun
lment n'est slectionner elle retourne la valeur -1.
Exemple : int indice=m_List.GetCurSel() ;
Texte dun item
La fonction GetText(indice, s ) renvoie dans la chane s litem dont lindice est donn comme
1
er
paramtre.
On peut utiliser cette fonction avec GetCurSel() pour retrouver litem qui vient dtre
slectionn dans la liste.
Exemple :
int indice = _m_List.GetCurSel() ;
If(indice !=-1)
{
CString item;
m_List.GetText(indice, item) ;
MessageBox(item,''lment slectionn'');
}
Recherche d'un item
La fonction FindString(i, s) recherche partir de lindice i, une entre de la liste qui
commence par une chane s et retourne lindice trouv.
La fonction FindStringExact(i, s) recherche partir de lindice i, une entre de la liste
correspondant exactement une chane s et retourne lindice trouv.
Evnement
En gnral, on programme lvnement LBN_SELCHANGE correspondant un
changement de slection dun item dans la liste.

5.3 Contrle Combo
Un combo comprend des fonctionnalits dun contrle zone ddition et zone de liste. Un
combo est un objet de la classe CComboBox qui drive elle aussi de la classe CWnd.
Type du combo
On peut prciser un parmi les trois types de combo suivants en utilisant la proprit Type :
o Simple : combo droul initialement et la zone ddition est active
o Dropdown : combo modifiable, la zone ddition est active
o DropList : combo non modifiable, la zone ddition est inactive
Traitement sur les items
La classe CComboBox offre les mmes fonctions que celles quon a prsent pour la classe
ClistBox sauf la fonction GetText( ) qui est prend ici le nom GetLBText(indice, s ).
Rcuprer le texte saisie dans le combo
Pour rcuprer le texte saisie par l'utilisateur dans la zone ddition, on utilise la fonction
GetWindowText(s) comme pour les zones de texte.
Please purchase PDFcamp Printer on http://www.verypdf.com/ to remove this watermark.
A. Benabbou
Evnement
En gnral, on programme lvnement CBN_SELCHANGE correspondant un
changement de slection dun item dans la liste du combo.

Remarque : Si on ajoute ce contrle laide de lIDE :
o Il faut prendre le soin de lagrandir suffisamment avant de le lcher dans la
fentre.
o Il est possible d'ajouter des donnes en mode cration au combo. Pour cela
dans l'onglet Data de la fentre de proprits du contrle saisissez vos donnes
et appuyer sur Ctrl+Entre aprs chaque item.

5.4 Contrle Static
Il est reprsent par la classe CStatic. Un controle Static peut afficher du texte, un cadre, un
rectangle, une icon, un curseur ou un bitmap.
Ce type de contrle ne gnre gnralement pas dvnements mais on peut le programmer
pour lvnement BN_CLICK en modifiant son ID qui est par dfaut IDC_STATIC et en
modifiant sa proprit NOTIFY qui lui permettra de dlguer le traitement des vnements
sa fentre mre.
Si on veut programmer dautres vnements alors il faut crer une classe spcialise pour ce
contrle en hritant de la classe CStatic.

5.5 Contrle Picture
Il permet gnralement dafficher des images Bitmap ou des icnes. Cest aussi un contrle
Static reprsent par la mme classe CStatic et peut tre contrl de la mme manire.
Please purchase PDFcamp Printer on http://www.verypdf.com/ to remove this watermark.
A. Benabbou
5.6 Contrles ActiveX
Les contrles ActiveX (ou OCX) permettent de raliser des logiciels bass sur des
composants. Un ActiveX est un composant qui peut tre ralis dans nimporte quel langage
et qui communique avec son conteneur via une interface respectant le modle COM
(Component Object Model).
Il existe plusieurs types dActiveX quon peut inclure dans une fentre il suffit dutiliser
insrer un contrle ActiveX dans le menu contextuel du bouton droit.
Exemple de contrles ActiveX :
MSFlexGrid et MSHFlexGrid : Permettent de reprsenter une grille de donnes.
Mthodes les plus utilises (avec des petites diffrences entre MSFlexGrid et
MSHFlexGrid):
get_ColumnCount()/put_ColumnCount() : Renvoie ou dfinit le nombre total
de colonnes d'un contrle MSFlexGrid.
get_Cols()/put_Cols() : Renvoie ou dfinit le nombre total de colonnes d'un
contrle MSHFlexGrid.
De mme : get_FixedCols()/put_FixedCols() ou bien
getFixedColumnCount()/put_FixedColumnCount() : pour les colonnes fixes
get_RowCount()/put_RowCount() : Renvoie ou dfinit le nombre total de lignes
d'un contrle MSFlexGrid.
get_Rows()/put_Rows() : Renvoie ou dfinit le nombre total de lignes d'un
contrle MSHFlexGrid.
De mme : get_FixedRows()/put_FixedRows() ou bien
get_FixedRowCount()/put_FixedRowCount): pour les lignes fixes
get_TextMatrix()/ put_TextMatrix() : Renvoie ou dfinit le contenu de texte
d'une cellule dsigne par sa ligne et sa colonne.
Exemple :
flex.put_ColumnCount(4);
flex.put_TextMatrix(0,0,"user1");
flex.put_TextMatrix(0,1,"Ali");
flex.put_TextMatrix(0,2,"12/2/2000");

MSChart : permet laffichage de donnes sous forme de courbes de diffrents types.
Mthodes les plus utilises :
get_ChartType()/put_ChartType() : Renvoie ou dfinit le type de graphique
utilis (un entier entre 1 et 14).
get_RowCount()/put_RowCount() : Renvoie ou dfinit le nombre de ligne de
laxe des abscisses (reprsente le nombre de subdivisions de laxe des abscisses).
get_ColCount()/put_ColCount() : Renvoie ou dfinit le nombre de colonnes
dans chaque ligne de laxe des abscisses (reprsente le nombre de courbes).
get_Row()/put_Row() : Renvoie ou slectionne la ligne courante.
get_RowLabel()/put_RowLabel() : Renvoie ou dfinit le label de la ligne
courante.
get_Col()/put_Col() : Renvoie ou slectionne la courbe courante dans la lgende.
get_ColLabel()/put_ColLabel() : Renvoie ou dfinit le label de la courbe
courante dans la lgende.
get_Data()/put_Data() : Renvoie ou dfinit la donne pour la courbe courante et
pour la ligne courante.
Exemple :
chart.put_RowCount(2);
chart.put_Row(1);
chart.put_RowLabel("Janvier");
chart.put_Row(2);
Please purchase PDFcamp Printer on http://www.verypdf.com/ to remove this watermark.
A. Benabbou
chart.put_RowLabel("Fevrier");

chart.put_ColumnCount(2);
chart.put_Column(1);
chart.put_ColumnLabel("crdit");
chart.put_Column(2);
chart.put_ColumnLabel("debit");
chart.put_Row(1);
chart.put_Column(1);
chart.put_Data("125");

5.7 Contrles CListCtrl et CImageList
Un contrle CListCtrl permet dafficher une suite quelconque d'icnes avec des tiquettes,
comme dans l'Explorateur Windows, ou des listes en colonnes de texte avec ou sans icnes.
Un item d'un contrle CListCtrl se compose d'une icne et d'une tiquette (ventuellement
aussi d'autres informations).
Les icnes des items sont contenues dans des listes d'images de type CImageList. La fonction
membre Create permet de crer la liste dimages en prcisant la taille des images (cx et cy),
leur nombre initial n, ainsi que le nombre dimages k quon peut ventuellement ajouter
cette liste.
CImageList *pmyImageList=new CImageList();
pmyImageList->Create(cx, cy, 0, n, k);

Les images peuvent tre ralises sous forme de Bitmap dans les ressources du programme
puis charges laide de la fonction LoadBitmap dans des objets de type CBitmap.
CBitmap bm1;
bm1.LoadBitmap(IDB_BITMAP1);

Ces images seront alors ajoutes la liste laide de la fonction Add en spcifiant aussi le
masque de limage comme couleur RGB :
pmyImageList->Add(&bm1, RGB(0, 0, 0));

La liste des images est associe au contrle CListCtrl par la fonction setImageList :
listCtrl.SetImageList(pmyImageList,LVSIL_NORMAL );

Les items du contrle CListCtrl peuvent tre visualiss sous 4 formes possibles quon peut
intgrer dans un contrle CListCtrl : icnes, petites icnes, liste et rapport. Le paramtre
LVSIL_NORMAL permet dindiquer laspect normal des icnes, on peut aussi utiliser
LVSIL_SMALL (icnes miniatures) ou LVSIL_STATE (tat).

Finalement on ajoute les items au contrle en appelant la fonction InsertItem. Qui indique la
position i, le label de litem et le numro j de licne associe dans la liste des images.
listCtrl.InsertItem(i,"Label",j);

Exemple:
CImageList *pmyImageList=new CImageList();
pmyImageList->Create(32, 32, 0, 2, 0);

CBitmap bm1,bm2;
bm1.LoadBitmap(IDB_BITMAP1);
bm2.LoadBitmap(IDB_BITMAP2);

pmyImageList->Add(&bm1, RGB(0, 0, 0));
pmyImageList->Add(&bm2, RGB(0, 0, 0));

listCtrl.SetImageList(pmyImageList,LVSIL_NORMAL );
Please purchase PDFcamp Printer on http://www.verypdf.com/ to remove this watermark.
A. Benabbou

listCtrl.InsertItem(0,"Courbe 2D",0);
listCtrl.InsertItem(1,"Histogramme 2D",1);

On peut programmer divers vnements associs au contrle CListCtrl, particulirement
lvnement NM_CLICK pour rcuprer litem slectionn. Il suffit alors dappeler les
fonctions GetSelectionMark() qui retourne lindice de llment slectionn
et GetItemText(i,0) qui retourne le label de litem numro i.
Please purchase PDFcamp Printer on http://www.verypdf.com/ to remove this watermark.
A. Benabbou

Please purchase PDFcamp Printer on http://www.verypdf.com/ to remove this watermark.
A. Benabbou
6. Bases de donnes DAO (Data Access Object) (<afxdao.h>)
Les classes MFC qui permettent de grer les bases de donnes DAO appartiennent la
bibliothque afxdao.h , parmi elles :
la classe CDaoDatabase : permet de grer la base de donnes (cration,
ouverture, la femeture, etc.)
la classe CDaoTableDef : permet de grer les tables de la base (cration de la
table, la cration des champs, ajout de la table la base, etc.)
la classe CDaoRecordset : permet de grer le contenu cd les tuples de la table
(ajout, modification, suppression, recherche, etc.)
la classe CDaoQueryDef : permet de crer des requtes SQL les sauvegarder
ou les excuter
I. Cration dune base de donnes
Les tapes de cration sont:
1- Crer la base :
//creation de la base de donnes
CDaoDatabase db;
db.Create("nomBaseDonnes");
2- Crer une table et ses champs :
CDaoTableDef table(&db);
table.Create("nomTable");
table.CreateField("nomChamp", typeChamp,tailleChamp);

Type
taille
(octets)
Description
dbBoolean 1 byte BOOL
dbByte 1 BYTE
dbInteger 2 Int
dbLong 4 Long
dbCurrency 8 Currency (COleCurrency)
dbSingle 4 Float
dbDouble 8 Double
dbDate 8 Date/Time (COleDateTime)
dbText 1 255 Text (CString)
dbLongBinary 0
Long Binary (OLE Object),
CLongBinary or CByteArray
Please purchase PDFcamp Printer on http://www.verypdf.com/ to remove this watermark.
A. Benabbou
dbMemo 0 Memo (CString)

Exemple :
CDaoDatabase db;
db.Create("DBUsers");
CDaoTableDef table(&db);
table.Create("Users");
table.CreateField("login",dbText,20);
table.CreateField("pwd",dbText,10);
table.CreateField("dateNaissance",dbDate,0);
table.CreateField("sexe",dbBoolean,0);

Remarque :
On peut utiliser un 4
me
paramtre dans CreateField qui peut prendre les valeurs
suivantes (on peut aussi les combiner laide de loprateur |) :

Valeur Description
dbFixedField La taille du champ est fixe
dbVariableField La taille du champ est variable (uniquement pour le texte)
dbAutoIncrField
Le champ contiendra une valeur entire incrmentale
automatiquement
dbUpdatableField Le champ peut tre modifi
dbDescending Le champ est tri par ordre dcroissant

La fonction DeleteField(nomChamp) permet de supprimer un champ existant dans la
table.
3- Ajouter la table la base :
table.Append();
table.Close();
db.Close();
II. Utilisation dune base de donnes existante
On peut :
utiliser les contrles ActiveX : DAO Data et DataGrid
utiliser la classe CDaoRecordset en suivant les tapes suivantes :
1- Ouvrir la base de donnes :
CDaoDatabase db;
db.Open("nomBaseDonnes");
Please purchase PDFcamp Printer on http://www.verypdf.com/ to remove this watermark.
A. Benabbou
2- Ouvrir un recordset associ une table ou une requte SQL :
CDaoRecordset rs(&db);
rs.Open (dbOpenTable, "nomTable");
ou bien:
rs.Open (dbOpenDynaset, "requeteSQL");
Remarque:
Si une opration ne se termine pas correctement, elle gnre une exception de type
CDaoException quon peut capturer laide dun try-catch:
Exemple:
try{
CDaoDatabase db;
db.Open("nomBaseDonnes");
}
catch(CDaoException *e){
MessageBox(erreur douverture de la base de donnes);
}
3- Accder la valeur dun champ:
VARIANT v;
v=rs.GetFieldValue(nomChamp);
ou bien :
v=rs.GetFieldValue(numChamp);
La structure VARIANT contient un attribut pour chaque type de donnes :
intVal (entier), fltVal (rel), bstrVal (chaine), etc.
Exemple :
CDaoDatabase db;
db.Open("DBUsers");
CDaoRecordset rs(&db);
rs.Open (dbOpenTable, "Users");
VARIANT v=rs.GetFieldValue(login);
MessageBox((const char*) v.bstrVal);
4- Ajout dun tuple la table :
//ajouter un tuple vide
rs.AddNew() ;
//remplir le tuple :
rs.SetFieldValue(nomChamp, valeur) ;
...
//mettre jour la table :
rs.Update() ;
Remarque: La fonction SetFieldValue possde 4 surcharges:
Please purchase PDFcamp Printer on http://www.verypdf.com/ to remove this watermark.
A. Benabbou
rs.SetFieldValue(nomChamp, valeur);
ou bien:
rs.SetFieldValue(numChamp,valeur);
ou bien:
rs.SetFieldValue(nomChamp,valeur);
ou bien:
rs.SetFieldValue(numChamp,valeur);
5- Mise jour dun champ :
//chercher le tuple modifier :
...
// ouvrir le tuple courant en mode dition :
rs.Edit() ;
//modifier le tuple :
rs.SetFieldValue(nomChamp valeur) ;
...
//mettre jour la table :
rs.Update() ;
6- Suppression dun tuple :
//chercher le tuple supprimer :
...
// Supprimer le tuple courant:
rs.Delete() ;
//passer au tuple suivant pour valider la suppression :
rs.MoveNext() ;
7- Recherche et navigation dans un recordset
La fonction IsBOF() : retourne true si on est avant le premier tuple de la table
La fonction IsEOF() : retourne true si on est aprs le dernier tuple de la table
La fonction MoveNext() : avancer au tuple suivant
La fonction MovePrev() : reculer au tuple prcdent
La fonction Move(n) : sauter n tuples vers lavant (ou vers larrire si n est <0)
La fonction FindFirst(critre) : cherche le premier tuple qui respecte le
critre spcifi (agit comme la clause where)
La fonction FindNext(critre) : cherche le tuple suivant qui respecte le
critre spcifi partir du tuple courant
La fonction FindLast(critre) : cherche le dernier tuple qui respecte le
critre spcifi
La fonction FindPrev(critre) : cherche le tuple prcdent qui respecte le
critre spcifi partir du tuple courant
III. Utilisation des requtes stockes (CDaoQueryDef)
Please purchase PDFcamp Printer on http://www.verypdf.com/ to remove this watermark.
A. Benabbou
Crer une requte SQL :
CDaoQueryDef q ;
q.Create(nomRequete, reqSQL) ;
nomRequete est une chane reprsentant le nom de la requete si on veut la
stocker dans la base de donnes sinon on met la valeur NULL.
Excuter la requte :
q.Execute() ;
Remarque : on peut aussi excuter une requte SQL directement avec la mthode
Execute de la classe CDaoDatabase.

7. Bases de donnes ODBC (<afxdb.h>)
ODBC (Open DataBase Connectivity), il s'agit d'un format dfini par Microsoft permettant la
communication entre des clients bases de donnes fonctionnant sous Windows et les SGBD
du march.
ODBC est le moyen standard daccder nimporte quelle base de donnes. On peut utiliser
une base de donnes avec ODBC seulement si on a la DLL du pilote compatible avec le
format de cette base de donnes. En gnral, il existe un pilote ODBC pour la majorit des
moteurs de base de donnes, dont Access, SQL Server, mySQL, Oracle, etc.
1. Enregistrement dans la base des registres
Avant de pouvoir utiliser une base de donnes via ODBC, vous devez l'inscrire dans la base
de registres :
cliquer sur le panneaux de configuration, slectionner Outils d'administration et enfin
Source de donnes ODBC.
slectionner l'onglet DSN utilisateur ( Source de donnes utilisateur : seul lutilisateur
en cours y aura accs) ou DSN systme (accs par tous les utilisateurs de lordinateur)
Cliquez sur Ajouter pour ajouter une source de donnes
Cliquez sur Terminer
Une autre boite s'affiche, tapez le nom de votre source de donnes, ce nom sera utilis
par tous les programmes ayant besoin daccder la base de donnes.
Cliquez sur le bouton Slectionner pour accder la dernire bote de dialogue o
vous pouvez slectionner le fichier qui reprsente votre base de donne.
2. Connexion la source de donnes
Crer un objet de la classe CDatabase
Appeler la mthode Open
Exemple :
CDatabase db ;
db.Open("NomSourceDonnees") ;
ou bien :
db.Open("ODBC;DSN= NomSourceDonnees;UID=NomUtilisteur ;PWD=MotPasse") ;

3. Cration dun jeu denregistrements
Crer un objet de la classe CRecordset
Appeler la mthode Open
Exemple :
CRecordset rs(&db) ;
rs.Open(option, "requetteSQL") ;
Please purchase PDFcamp Printer on http://www.verypdf.com/ to remove this watermark.
A. Benabbou
Si la table est en lecture seule alors il faut choisir l'option CRecordset::snapshot, sinon il
faut choisir l'option CRecordset::dynaset.
Le reste des oprations est le mme que ce que nous avons vu pour les bases de donnes
DAO.





8. Srialisation dobjets
La srialisation d'une classe se droule en 2 tapes
Drivation d'une classe de CObject :
La fonctionnalit et le protocole de srialisation de base sont dfinis dans la classe CObject.
En drivant une classe de CObject (ou d'une classe drive de CObject) vous avez accs la
fonctionnalit et au protocole de srialisation de la classe CObject.
Surcharge de la fonction virtuelle Serialize :
La fonction membre Serialize, dfinie dans la classe CObject, est la fonction qui srialise les
donnes ncessaires pour capturer l'tat actuel d'un objet. Elle comporte un argument
CArchive qui sert lire et crire les donnes se rapportant l'objet. L'objet CArchive
comporte une fonction membre, IsStoring(), qui dtermine si la fonction Serialize stocke les
donnes (criture) ou charge ces dernires (lecture). partir des rsultats retourns par
IsStoring(), on peut insrer les donnes de l'objet dans l'objet CArchive l'aide de l'oprateur
d'insertion (<<) ou les extraire de l'objet l'aide de l'oprateur d'extraction (>>).
Pour le mode binaire, on peut lire et crire les donnes laide des fonctions membres
CArchive::Read et CArchive::Write au lieu des oprateurs >> et <<.
Exemple :
class Employe : public CObject
{
private:
int code;
CString nom;
float salaire;
public:
Employe Serialize(CArchive &ar)
{
if(ar.IsStoring())
{
ar<<code;
ar<<nom;
ar<<salaire;
}
else
{
ar>>code;
ar>>nom;
ar>>salaire;
}
return *this ;
}
};
On peut maintenant utiliser la srialisation des objets de la classe Employe comme suit:
//Srialisation
CFile f;
Please purchase PDFcamp Printer on http://www.verypdf.com/ to remove this watermark.
A. Benabbou
If(f.Open("test.dat",CFile ::modeCreate | CFile::modeWrite))
{
CArchive ar1(&f,CArchive::store);
Employe y(100,"Ali",98777);
y.Serialize(ar1);
}
//Desrialisation
CFile g;
If(g.Open("test.dat",CFile::modeRead))
{
CArchive ar2(&g,CArchive::load);
Employe x;
x.Serialize(ar2);
x.print();
}


Please purchase PDFcamp Printer on http://www.verypdf.com/ to remove this watermark.

Вам также может понравиться