SlideShare une entreprise Scribd logo
1  sur  90
Télécharger pour lire hors ligne
Cours C++ (2002)
semaine 2
jour 3
Cours semaine 2 jour 3 Cours C++ 2
Plan du jour
 Approfondissement sur les templates
 MFC, STL et ATL
Cours semaine 2 jour 3 Cours C++ 3
MFC
 Les MFC offrent deux types de classes
 Les classes Windows, que nous avons vu
brièvement hier
 Elles permettent de greffer une application dans le
framework Windows qui gère les fenêtres et les
évènements qui leurs seront envoyés
 Les classes de soutien, qui correspondent à une
collection de types à connotation beaucoup plus
algorithmique
Cours semaine 2 jour 3 Cours C++ 4
MFC (2)
 Nous avons vu un programme minimaliste
hier
 Création d’une application utilisant les MFC
 Création d’une fenêtre où rien n’est possible car
il n’y a pas de message handlers
 Nous allons aujourd’hui créer un
programme possédant des message handlers
 La fenêtre réagira enfin
Cours semaine 2 jour 3 Cours C++ 5
MFC (3)
Cours semaine 2 jour 3 Cours C++ 6
MFC (4)
Cours semaine 2 jour 3 Cours C++ 7
MFC (5)
Cours semaine 2 jour 3 Cours C++ 8
MFC (6)
Cours semaine 2 jour 3 Cours C++ 9
MFC (7)
Cours semaine 2 jour 3 Cours C++ 10
MFC (8)
Cours semaine 2 jour 3 Cours C++ 11
MFC (9)
Cours semaine 2 jour 3 Cours C++ 12
Supprimez !
Cours semaine 2 jour 3 Cours C++ 13
MFC (11)
Cours semaine 2 jour 3 Cours C++ 14
En commentaires
Cours semaine 2 jour 3 Cours C++ 15
Rajout
Cours semaine 2 jour 3 Cours C++ 16
Rajout
Cours semaine 2 jour 3 Cours C++ 17
En commentaires
Cours semaine 2 jour 3 Cours C++ 18
En commentaires
Cours semaine 2 jour 3 Cours C++ 19
En commentaires
Cours semaine 2 jour 3 Cours C++ 20
En commentaires
plus modif
Cours semaine 2 jour 3 Cours C++ 21
En commentaires
Cours semaine 2 jour 3 Cours C++ 22
Rajout
Cours semaine 2 jour 3 Cours C++ 23
MFC (21)
 Arrivé à ce stade, vous avez une application
fonctionnelle
 Vous pouvez compiler
 Si vous l’osez, vous pouvez même lancer
une exécution
Cours semaine 2 jour 3 Cours C++ 24
MFC (22)
Cours semaine 2 jour 3 Cours C++ 25
Cours semaine 2 jour 3 Cours C++ 26
Cours semaine 2 jour 3 Cours C++ 27
Cours semaine 2 jour 3 Cours C++ 28
Ctrl-w
Cours semaine 2 jour 3 Cours C++ 29
MFC (27)
Cours semaine 2 jour 3 Cours C++ 30
MFC (28)
Double clic 1
Double clic 2
Cours semaine 2 jour 3 Cours C++ 31
Cours semaine 2 jour 3 Cours C++ 32
Cours semaine 2 jour 3 Cours C++ 33
MFC (31)
 Il est à nouveau possible de compiler
 Essayez aussi d’exécuter le programme…
Cours semaine 2 jour 3 Cours C++ 34
MFC (32)
Double clic
Cours semaine 2 jour 3 Cours C++ 35
MFC (33)
OK
Cours semaine 2 jour 3 Cours C++ 36
MFC (34)
Double clic
Cours semaine 2 jour 3 Cours C++ 37
Rajout
Cours semaine 2 jour 3 Cours C++ 38
MFC (36)
 Compilez
 Exécutez
 Quittez sans le Task Manager…
Cours semaine 2 jour 3 Cours C++ 39
MFC (37)
 Nous venons de créer un message handler
permettant de quittez le programme losrque
le bouton droit de la souris est relaché
 Le message est envoyé à la fin du clic souris
 Relancer le programme et gardez le doigt
appuyé sur le bouton droit pour vérifier !
Cours semaine 2 jour 3 Cours C++ 40
MFC de soutien
 Les classes MFC pour la gestion des
fenêtres sont très nombreuses
 Elles sont accessibles par l’intermédiaire
des assistants qui automatisent également
beaucoup la création des handlers par
rapport à ces fenêtres
Cours semaine 2 jour 3 Cours C++ 41
MFC de soutien (2)
 Les classes de soutien MFC sont constituées
de plusieurs éléments
 Les classes de collection, qui permettent de
gérer des collections d’objets
 Tableaux (Array), listes (List) et tables (Map)
 Les classes de gestion de coordonnées
 Les classes de gestion du temps
 La classe de manipulation de chaînes de
caractères
Cours semaine 2 jour 3 Cours C++ 42
MFC de soutien (3)
 Les classes de gestion des tableaux
(collection) sont typées
 Elles n’utilisent pas la programmation
générique
 Bien que nous soyons en C++, il y a encore
quelques réminiscences de C…
 Cependant, comme nous sommes tout de
même en C++, il y a la possibilité d’utiliser
des fonctions exotiques
Cours semaine 2 jour 3 Cours C++ 43
MFC de soutien (4)
CByteArray BYTE – valeurs entières non signées 8 bits
CWordArray WORD – valeurs entières non signées 16 bits
CUIntArray UINT – valeurs entières non signées 32 bits
CDWordArray DWORD – valeurs entières non signées 32 bits
CStringArray CString – chaînes de carcatères
CObArray CObject – tout dérivé de CObject
Cours semaine 2 jour 3 Cours C++ 44
MFC de soutien (5)
CStringArray tableauDeChaine;
tableauDeChaine.add( "titi" );
tableauDeChaine.add( "toto" );
tableauDeChaine.add( "tata" );
CWordArray tableauDeMots;
tableauDeMots.SetSize( 20 );
tableauDeMots.SetAt( 0, 2000 );
tableauDeMots[ 5 ] = 2002;
TRACE( "une valeur dans tableauDeMots %d", tableauDeMots.GetAt( 5 ) );
Cours semaine 2 jour 3 Cours C++ 45
MFC de soutien (6)
 Les classes de gestion de listes (collection)
suivent le même principe que les classes de
gestion des tableaux
 Une classe par type de base supporté
 Il existe également des objets annexes qui
permettent de conserver certaines
informations
 Classe POSITION
Cours semaine 2 jour 3 Cours C++ 46
MFC de soutien (7)
CObList CObject – tout dérivé de CObject
CStringList CString – chaînes de carcatères
CPtrList void* - pointeurs indéfinis
Cours semaine 2 jour 3 Cours C++ 47
MFC de soutien (8)
CStringList ListeDeChaines;
CString str;
POSITION pos;
pos = listeDeChaines.AddHead( "tete" );
listeDeChaines.AddTail( "pied" );
listeDeChaines.InsertBefore( pos, "cheveux" );
listeDeChaines.AddTail( "ongles" );
pos = listeDeChaines.GetHeadPosition();
pos = listeDeChaines. GetTailPosition();
str = listeDeChaines.GetNext( pos );
str = listeDeChaines.GetPrev( pos );
POSITION posCourante = listeDeChaines.GetHeadPosition();
while( posCourante )
TRACE( "%s", listeDeChaines.GetNext( posCourante );
Cours semaine 2 jour 3 Cours C++ 48
MFC de soutien (9)
 Les classes de gestion des tables
(collection) suivent également les principes
des tableaux et des listes
 Classes typées
 Ici aussi, il existe des classes d’aide
 POSITION
Cours semaine 2 jour 3 Cours C++ 49
MFC de soutien (10)
CMapWordToOb clé WORD – élément CObject
CMapWordToPtr clé WORD – élément void*
CMapPtrToPtr clé void* – élément void*
CMapPtrToWord clé void* – élément WORD
CMapStringToOb clé CString – élément CObject
CMapStringToPtr clé CString – élément void*
CMapStringToString clé CString – élément CString
Cours semaine 2 jour 3 Cours C++ 50
MFC de soutien (11)
CMapStringToOb tableDetailsPlanetes;
tableDetailsPlanetes.setAt( "Mercure", CDetailsPlanete( 4878, 0.054 ) );
tableDetailsPlanetes.setAt( "Venus", CDetailsPlanete( 12100, 0.815 ) );
tableDetailsPlanetes[ "Terre" ] = CDetailsPlanete( 6762, 0.107 ) );
POSITION pos = tableDetailsPlanetes.GetStartPosition();
while( pos != NULL )
{
CString strPlanete;
CDetailsPlanete pMaPlanete;
if(tableDetailsPlanetes.GetNextAssoc( pos,
strPlanete,
(Cobject*&) pMaPlanete ) )
TRACE( "%f", pMaPlanete->champs2 );
}
Cours semaine 2 jour 3 Cours C++ 51
MFC de soutien (12)
 Tous ces types sont prédéfinis et prétypés
 Cela apporte normalement plus de rapidité
 Cela apporte aussi moins de flexibilité
 Il est cependant possible de définir des
classes de collection à partir de ses propres
objets
 Au bout d’un certains temps, Microsoft a quand
même permis d’utiliser les templates…
Cours semaine 2 jour 3 Cours C++ 52
MFC de soutien (13)
 CArray, CList et CMap sont des templates
permettant de définir des classes de
collection à partir de classes définies par
l’utilisateur
 Les « modèles » sont fournis dans afxtempl.h
 Les templates permettent en fait d’obtenir
des possibilités qui n’existent pas avec les
classes de base
Cours semaine 2 jour 3 Cours C++ 53
MFC de soutien (14)
 CArray< CClassPerso1*, CClassPerso2* >
 CClassPerso1 : type de pointeur d’objet
retourné par le tableau, lors de GetAt() par
exemple
 CClassPerso2 : type qui doit être utilisé pour les
arguments en entrée, lors de SetAt() ou Add()
 Il s’agit bien d’un template !
 Idem pour CList
Cours semaine 2 jour 3 Cours C++ 54
MFC de soutien (15)
 CMap< MonType, MonTypeArg,
CClassPerso, CClassPersoArg >
 MonType donne le format de la clé en interne :
int, WORD, DWORD, double, float ou CString
 MonTypeArg : type de l’argument à fournir
pour la clé
 CClassPerso indique la classe de stockage
interne des éléments
 CClassPersoArg indique le type des arguments
qui seront fournis comme éléments
Cours semaine 2 jour 3 Cours C++ 55
MFC de soutien (16)
CMap< CString, LPCSTR, CDetailsPlanete*, CDetailsPlanete* > tabPlanete;
// LPCSTR permet la comparaison sur les valeurs de chaînes,
// pas sur les valeurs des pointeurs ;-)
// c’est un tableau de caractères
// la suite comme tout à l’heure sauf pour le « Lookup »
tabPlanete.setAt( "Mercure", CDetailsPlanete( 4878, 0.054 ) );
tabPlanete.setAt( "Venus", CDetailsPlanete( 12100, 0.815 ) );
tabPlanete[ "Terre" ] = CDetailsPlanete( 6762, 0.107 ) );
POSITION pos = tableDetailsPlanete.GetStartPosition();
CDetailsPlanete* pPlanete = NULL;
if( tabPlanete.Lookup( "Terre", pPlanete ) )
TRACE( "%f", pPlanete->champs2 );
Cours semaine 2 jour 3 Cours C++ 56
MFC de soutien (17)
 Les classes de gestion de coordonnées sont
importantes pour la gestion de
l’environnement fenêtré
 Classes CPoint, CRect et CSize
 Elles ont une correspondance certaines avec les
types internes de Windows
Cours semaine 2 jour 3 Cours C++ 57
MFC de soutien (18)
CPoint()
CPoint( POINT pInit )
Copie à partir d’une structure
POINT ou d’un objet CPoint
CPoint( int x, int y )
CPoint( DWORD dwInit ) 16 bits de poids faible pour x
CPoint( SIZE sizeInit )
Copie à partir d’une structure
SIZE ou d’un objet CSize
Cours semaine 2 jour 3 Cours C++ 58
MFC de soutien (19)
CRect()
CRect( RECT& rcInit ) structure RECT ou objet CRect
CRect( LPCRECT lprcInit ) pointeur sur RECT ou CRect
CRect( int g, int s, int d, int i )
CRect( POINT point, SIZE size )
structure POINT ou objet CPoint et
structure SIZE ou objet CSize
CRect( POINT ptSG, POINT ptID ) structure POINT ou objet CPoint
Cours semaine 2 jour 3 Cours C++ 59
MFC de soutien (20)
CSize()
CSize( SIZE sizeInit ) structure SIZE ou objet CSize
CSize( int initCX, int initCy )
CSize( POINT ptInit ) structure POINT ou objet CPoint
CSize( DWORD dwSize ) 16 bits de poids faible pour cx
Cours semaine 2 jour 3 Cours C++ 60
MFC de soutien (21)
 Il est aisé de remarquer dans les slides
précédents la présence de types définis en
majuscules à côté des types à l’allure un peu
plus C++
 Il s’agit des types internes de Windows
 MFC ne fournit donc qu’une interface à ces
types internes
Cours semaine 2 jour 3 Cours C++ 61
MFC de soutien (22)
Type Windows Type C++ (MFC)
POINT CPoint
SIZE CSize
RECT CRect
HWND CWnd
HDLG CDialog
HMENU CMenu
HWND CEdit
HWND CListBox
HSZ CString
Cours semaine 2 jour 3 Cours C++ 62
MFC de soutien (23)
 Il existe deux classes de gestion du temps
dans MFC
 COleDateTime
 Représente une date et une heure valide
 De nombreux constructeurs car la classe est reliée à
OLE qui possède de nombreuses représentations
 COleDateTimeSpan
 Représente un écart entre deux DateTime, en jours
et heures
Cours semaine 2 jour 3 Cours C++ 63
MFC de soutien (24)
 MFC fournit également une classe
permettant de traiter des chaînes de
caractères, la classe CString
 Cette classe possède également un ensemble
de méthodes permettant :
 La manipulation ( Left(), Mid(), Right() )
 la recherche ( Find(), FindOneOf() )
 Le formatage de l’affichage ( Format() )
Cours semaine 2 jour 3 Cours C++ 64
MFC de soutien (25)
CString()
CString( CString strSrc )
CString( LPCSTR lpsz ) tableau de caractères
CString( unsigned char* psz )
CString(LPCSTR lpch, int nLength )
CString( TCHAR ch, int nRepeat )
CString( LPCWSTR lpsz ) tableau de caractères UNICODE
Cours semaine 2 jour 3 Cours C++ 65
MFC de soutien (26)
 La fonction Format de la classe CString
permet d’utiliser des notations pour les
emplacements d’éléments
 Cette notation est celle utilisée dès le départ
en C sur Unix
Cours semaine 2 jour 3 Cours C++ 66
MFC de soutien (27)
%c int un caractère
%d int un entier signé
%u int un entier non signé
%o int un entier non signé, format octal
%x int un entier non signé, format hexadécimal minuscule
%X int un entier non signé, format hexadécimal majuscule
%f double un nombre à virgule flottante
%s string une chaîne de caractères (char*)
%% - le signe %
Cours semaine 2 jour 3 Cours C++ 67
STL
 Microsoft a défini ses MFC assez
rapidement pendant que d’autres
constructeurs se regroupaient pour définir
une librairie standard
 STL, Standard Template Library, est un
standard reconnu par tous les compilateurs
qui implémentent l’ANSI C++
 Cela garantit une certaine portabilité du code
source (mais pas de l’exécutable !)
Cours semaine 2 jour 3 Cours C++ 68
STL (2)
 La STL est supportée par Microsoft Visual
C++ et le code source d’autres plate-formes
pourrait ainsi être recompilé
 À condition bien sûr que ce code ne comporte
pas d’appel à des classes d’interface graphique
comme X-Windows ou Athena sur Unix
 L’opération est envisageable pour des sources à
caractère purement algorithmique ou
scientifique
Cours semaine 2 jour 3 Cours C++ 69
STL (3)
 La STL regroupe un ensemble de classes
d’utilité générale
 En fait, comme le nom l’indique fort bien, il
s’agit en partie de templates
 La STL offre principalement des classes
d’algorithmique générale
Cours semaine 2 jour 3 Cours C++ 70
STL (4)
 La STL contient, entre autre
 Une classe string
 Un template vector
 Des templates list et deque
 Des templates set, multiset, map et multimap
 Un algorithme de tri, sort
 Un algorithme de recherche, find
 Des classes d’itérateurs dans les collections, iterator,
pour input, ouput, forward, random, bidirectional
Cours semaine 2 jour 3 Cours C++ 71
STL (5)
#include <algorithm>
#include <iostream>
#include <iterator>
#include <string>
#include <vector>
using namespace std;
void main() {
vector<string> v;
string tmp;
for( int i = 0; i < 10 ; i++ ) {
cout << "un mot : ";
getline( cin, tmp );
v.push_back( tmp );
}
sort( v.begin(), v.end() );
copy( v.begin(), v.end(), ostream_iterator<string>( cout, "n" ) );
}
Cours semaine 2 jour 3 Cours C++ 72
STL (6)
 STL contient des éléments qui sont classés
différemment de ceux de Windows
 Le point de vue utilisé ici est un peu plus
académique, pour ne pas dire scientifique
 La STL a été développé dans des laboratoires
de recherche, dont celui de HP qui est le
détenteur officiel de la version officielle de la
STL
Cours semaine 2 jour 3 Cours C++ 73
STL (7)
 Containers
 Containers de séquences
 vector : vecteur
 deque : file à double entrée, possibilité d’insérer en
début et en fin
 List : liste
 Containers associatifs
 set et multiset : gestion d’un ensemble d’éléments,
possibilité de dupliquer des éléments (multi)
 Map et multimap : gestion des tables d’association,
possibilité de dupliquer des éléments (multi)
Cours semaine 2 jour 3 Cours C++ 74
STL (8)
 Algorithmes
 find : algorithme générique de recherche
 merge : algorithme générique de fusion, marche
pour les listes, les vecteurs, les tableaux, les
types pouvant être mélangés et le résultat
récupéré dans un type différent !
 sort : algorithme de tri générique
 etc
Cours semaine 2 jour 3 Cours C++ 75
STL (9)
 Itérateurs
 Permettent le parcours des ensembles (au sens
très général du terme)
 Efficaces et puissants
 Objets fonction
 Avec STL, certains objets sont des fonctions :
ce sont des versions abstraites des algorithmes
Cours semaine 2 jour 3 Cours C++ 76
STL (10)
 Adaptateurs
 Composants qui permettent de modifier
l’interface d’autres composants
 Permettent par exemple de modifier un deque
en liste LIFO (i.e. du bon usage des langages
OO pour faire des ADT)
 Allocateurs
 En charge de l’allocation de la mémoire
Cours semaine 2 jour 3 Cours C++ 77
STL (11)
 STL est une très bonne librairie objet
 Parfois difficile à apprendre mais le jeu en
vaut la chandelle
 Devrait être privilégiée autant que faire se
peut par rapport aux MFC
Cours semaine 2 jour 3 Cours C++ 78
ATL
 ATL est l’acronyme d’Active Template
Library
 Cette librarie est propre au monde
Microsoft
 Il ne s’agit pas d’un complément des MFC
 Il s’agit d’un remplaçant !
Cours semaine 2 jour 3 Cours C++ 79
ATL (2)
 Problèmes des MFC
 Très gros, très lourd
 Oblige à travailler avec l’ « Application
Framework Architecture »
 Utilise des notions de document et document
template qui disparaîtront peut être bientôt tels
qu’ils existent aujourd’hui
 Et la compatibilité ne sera peut être pas parfaitement
assurée…
Cours semaine 2 jour 3 Cours C++ 80
ATL (3)
 Avantages de l’ATL
 Travaille avec le modèle COM de Microsoft,
Component Object Model
 COM est l’ancêtre de DCOM, qui est l’ancêtre
d’ActiveX
 Active Template Library…
 ATL est beaucoup plus petit que MFC
 L’apprentissage en est donc facilité
 ATL est plus petit et donc plus rapide !
 C’est une petite usine à gaz !
Cours semaine 2 jour 3 Cours C++ 81
ATL (4)
 ATL est fait pour supporter COM, qui n’est
pas spécifiquement graphique
 Mais des objets COM ou des ActiveX peuvent
avoir des fenêtres
 ATL possède cependant des classes
permettant d’ouvrir et de gérer des fenêtres
 ATL en offre plusieurs types, utilisables en
fonction des contextes
Cours semaine 2 jour 3 Cours C++ 82
ATL (5)
 CWindow est un wrapper (sorte d’adaptateur) qui
permet de disposer d’un objet fenêtre qui peut être
fourni à n’importe quelle fonction en ayant besoin
 CWindowImpl permet de créer une fenêtre à partir
de la définition d’une autre classe
 CContainedWindow est une fenêtre qui effectue le
routage des messages aux autres classes. Le
traitement des messages peut ainsi être centralisé
en une seule classe de l’application
Cours semaine 2 jour 3 Cours C++ 83
ATL (6)
 CAxWindow est une fenêtre qui peut
« embarquer » un contrôle ActiveX
 CSimpleDialog permet de créer un dialogue
modal simple
 CDialogImpl permet de créer des fenêtres
de dialogue modal ou non modal
 CAxDialogImpl est un CDialogImpl qui
supporte les contrôles ActiveX
Cours semaine 2 jour 3 Cours C++ 84
ATL (7)
 CWndClassInfo gère les informations
relatives aux objets fenêtre
 CWinTraits gère les informations d’aspect
des fenêtres
Cours semaine 2 jour 3 Cours C++ 85
ATL (8)
 Pour gérer les messages dans un CWindowImpl, il
existe un CMessageMap qui fait le lien entre les
message et les message handlers
 Il existe trois groupes de messages handlers
 Les messages handlers pour « tous » les messages
 Les command handlers pour les messages
WM_COMMAND
 Les notification handlers pour les messages
WM_NOTIFY
Cours semaine 2 jour 3 Cours C++ 86
ATL (9)
 Une message map ressemble à ceci :
BEGIN_MSG_MAP( CMyDialog )
MESSAGE_HANDLER( WM_INITDIALOG, OnInitDialog )
COMMAND_HANDLER( IDC_EDIT1,
EN_CHANGE,
OnChangeEdit1)
COMMAND_ID_HANDLER( IDOK, OnOK )
COMMAND_CODE_HANDLER( EN_ERRSPACE, OnErrEdits )
NOTIFY_HANDLER( IDC_LIST1, NM_CLICK, OnClickList1 )
NOTIFY_ID_HANDLER( IDC_LIST2, OnSomethingList2 )
NOTIFY_CODE_HANDLER( NM_DBLCLK, OnDblClkLists )
END_MSG_MAP()
Cours semaine 2 jour 3 Cours C++ 87
WTL
 Il existe enfin, de manière assez
périphérique, une WTL, Windows Template
Library, actuellement en version 3.1
 Cette librairie est une extension de la
librairie ATL
 Elle est livrée avec un assistant permettant
la création assistée de fenêtres…
Cours semaine 2 jour 3 Cours C++ 88
WTL (2)
 La WTL permet d’avoir des classes prédéfinies
pour :
 Les message loops
 Les contrôles,
 Les fenêtres de dialogue,
 Les frame windows,
 Les objets DC et GDI (le contexte graphique de
l’application et l’interface du périphérique graphique)
 Les portages ATL de CPoint, CRect, CSize, CString et
d’autres type MFC de soutien
Cours semaine 2 jour 3 Cours C++ 89
WTL (3)
 Problèmes avec la WTL
 Elle n’est pas officiellement supportée par
Microsoft, juste livrée telle quelle
 Si Microsoft décide de tout changer demain, les
applications pourraient être impossibles à porter
et il faudrait revenir aux MFC !
Cours semaine 2 jour 3 Cours C++ 90
Questions / Remarques

Contenu connexe

Tendances

Tp1 design patternappliques
Tp1 design patternappliquesTp1 design patternappliques
Tp1 design patternappliquesMariem ZAOUALI
 
TP3 Atelier C++/ GL2 INSAT / Tunisie
TP3 Atelier C++/ GL2 INSAT / TunisieTP3 Atelier C++/ GL2 INSAT / Tunisie
TP3 Atelier C++/ GL2 INSAT / TunisieMariem ZAOUALI
 
Manuel des TP : Atelier Web 2
Manuel des TP : Atelier Web 2Manuel des TP : Atelier Web 2
Manuel des TP : Atelier Web 2Faycel Chaoua
 
concour ministre de santé
concour ministre de santéconcour ministre de santé
concour ministre de santéfast xp
 
L’environnement de programmation fonctionnelle DrRacket
L’environnement de programmation fonctionnelle DrRacketL’environnement de programmation fonctionnelle DrRacket
L’environnement de programmation fonctionnelle DrRacketStéphane Legrand
 
Chapitre3TableauxEnCppV2019
Chapitre3TableauxEnCppV2019Chapitre3TableauxEnCppV2019
Chapitre3TableauxEnCppV2019Aziz Darouichi
 
Cours de C++, en français, 2002 - Cours 2.5
Cours de C++, en français, 2002 - Cours 2.5Cours de C++, en français, 2002 - Cours 2.5
Cours de C++, en français, 2002 - Cours 2.5Laurent BUNIET
 
Développer en natif avec C++11
Développer en natif avec C++11Développer en natif avec C++11
Développer en natif avec C++11Microsoft
 

Tendances (9)

Tp1 design patternappliques
Tp1 design patternappliquesTp1 design patternappliques
Tp1 design patternappliques
 
TP3 Atelier C++/ GL2 INSAT / Tunisie
TP3 Atelier C++/ GL2 INSAT / TunisieTP3 Atelier C++/ GL2 INSAT / Tunisie
TP3 Atelier C++/ GL2 INSAT / Tunisie
 
Manuel des TP : Atelier Web 2
Manuel des TP : Atelier Web 2Manuel des TP : Atelier Web 2
Manuel des TP : Atelier Web 2
 
concour ministre de santé
concour ministre de santéconcour ministre de santé
concour ministre de santé
 
L’environnement de programmation fonctionnelle DrRacket
L’environnement de programmation fonctionnelle DrRacketL’environnement de programmation fonctionnelle DrRacket
L’environnement de programmation fonctionnelle DrRacket
 
Chapitre3TableauxEnCppV2019
Chapitre3TableauxEnCppV2019Chapitre3TableauxEnCppV2019
Chapitre3TableauxEnCppV2019
 
Cours de C++, en français, 2002 - Cours 2.5
Cours de C++, en français, 2002 - Cours 2.5Cours de C++, en français, 2002 - Cours 2.5
Cours de C++, en français, 2002 - Cours 2.5
 
Développer en natif avec C++11
Développer en natif avec C++11Développer en natif avec C++11
Développer en natif avec C++11
 
Mathématiques et Python
Mathématiques et PythonMathématiques et Python
Mathématiques et Python
 

Similaire à Cours de C++, en français, 2002 - Cours 2.3

Mat lab1
Mat lab1Mat lab1
Mat lab1fouadDD
 
Cours de C++, en français, 2002 - Cours 1.4
Cours de C++, en français, 2002 - Cours 1.4Cours de C++, en français, 2002 - Cours 1.4
Cours de C++, en français, 2002 - Cours 1.4Laurent BUNIET
 
Cours de C++, en français, 2002 - Cours 2.1
Cours de C++, en français, 2002 - Cours 2.1Cours de C++, en français, 2002 - Cours 2.1
Cours de C++, en français, 2002 - Cours 2.1Laurent BUNIET
 
Support matlab st
Support matlab stSupport matlab st
Support matlab stN NASRI
 
Cours de C++, en français, 2002 - Cours 2.4
Cours de C++, en français, 2002 - Cours 2.4Cours de C++, en français, 2002 - Cours 2.4
Cours de C++, en français, 2002 - Cours 2.4Laurent BUNIET
 
Cours de C++, en français, 2002 - Cours 3.2
Cours de C++, en français, 2002 - Cours 3.2Cours de C++, en français, 2002 - Cours 3.2
Cours de C++, en français, 2002 - Cours 3.2Laurent BUNIET
 
Environnement de développement de bases de données
Environnement de développement de bases de donnéesEnvironnement de développement de bases de données
Environnement de développement de bases de donnéesISIG
 
Les nouveautés de C++11 : Ecrire du C++ Moderne
Les nouveautés de C++11 : Ecrire du C++ ModerneLes nouveautés de C++11 : Ecrire du C++ Moderne
Les nouveautés de C++11 : Ecrire du C++ ModerneMicrosoft
 
Fork / Join, Parallel Arrays, Lambdas : la programmation parallèle (trop ?) f...
Fork / Join, Parallel Arrays, Lambdas : la programmation parallèle (trop ?) f...Fork / Join, Parallel Arrays, Lambdas : la programmation parallèle (trop ?) f...
Fork / Join, Parallel Arrays, Lambdas : la programmation parallèle (trop ?) f...Normandy JUG
 
mis
mismis
misISIG
 
Memojava 100604104941-phpapp02
Memojava 100604104941-phpapp02Memojava 100604104941-phpapp02
Memojava 100604104941-phpapp02Rahma Boufalgha
 
Visual studio
Visual studioVisual studio
Visual studioISIG
 
Slides ceplex
Slides ceplexSlides ceplex
Slides ceplexTECOS
 
Cours de C++, en français, 2002 - Cours 1.5
Cours de C++, en français, 2002 - Cours 1.5Cours de C++, en français, 2002 - Cours 1.5
Cours de C++, en français, 2002 - Cours 1.5Laurent BUNIET
 
201303 - Java8
201303 - Java8201303 - Java8
201303 - Java8lyonjug
 
C++ Metaprogramming : multidimensional typelist
C++ Metaprogramming : multidimensional typelistC++ Metaprogramming : multidimensional typelist
C++ Metaprogramming : multidimensional typelistVincent Agnus
 

Similaire à Cours de C++, en français, 2002 - Cours 2.3 (20)

Cours de Matlab
Cours de MatlabCours de Matlab
Cours de Matlab
 
Mat lab1
Mat lab1Mat lab1
Mat lab1
 
Cours de C++, en français, 2002 - Cours 1.4
Cours de C++, en français, 2002 - Cours 1.4Cours de C++, en français, 2002 - Cours 1.4
Cours de C++, en français, 2002 - Cours 1.4
 
Cours de C++, en français, 2002 - Cours 2.1
Cours de C++, en français, 2002 - Cours 2.1Cours de C++, en français, 2002 - Cours 2.1
Cours de C++, en français, 2002 - Cours 2.1
 
Support matlab st
Support matlab stSupport matlab st
Support matlab st
 
Cours de C++, en français, 2002 - Cours 2.4
Cours de C++, en français, 2002 - Cours 2.4Cours de C++, en français, 2002 - Cours 2.4
Cours de C++, en français, 2002 - Cours 2.4
 
Cours de C++, en français, 2002 - Cours 3.2
Cours de C++, en français, 2002 - Cours 3.2Cours de C++, en français, 2002 - Cours 3.2
Cours de C++, en français, 2002 - Cours 3.2
 
Environnement de développement de bases de données
Environnement de développement de bases de donnéesEnvironnement de développement de bases de données
Environnement de développement de bases de données
 
Initiation r
Initiation rInitiation r
Initiation r
 
Les nouveautés de C++11 : Ecrire du C++ Moderne
Les nouveautés de C++11 : Ecrire du C++ ModerneLes nouveautés de C++11 : Ecrire du C++ Moderne
Les nouveautés de C++11 : Ecrire du C++ Moderne
 
Fork / Join, Parallel Arrays, Lambdas : la programmation parallèle (trop ?) f...
Fork / Join, Parallel Arrays, Lambdas : la programmation parallèle (trop ?) f...Fork / Join, Parallel Arrays, Lambdas : la programmation parallèle (trop ?) f...
Fork / Join, Parallel Arrays, Lambdas : la programmation parallèle (trop ?) f...
 
De Java à .NET
De Java à .NETDe Java à .NET
De Java à .NET
 
mis
mismis
mis
 
Memojava 100604104941-phpapp02
Memojava 100604104941-phpapp02Memojava 100604104941-phpapp02
Memojava 100604104941-phpapp02
 
Visual studio
Visual studioVisual studio
Visual studio
 
Slides ceplex
Slides ceplexSlides ceplex
Slides ceplex
 
Cours de C++, en français, 2002 - Cours 1.5
Cours de C++, en français, 2002 - Cours 1.5Cours de C++, en français, 2002 - Cours 1.5
Cours de C++, en français, 2002 - Cours 1.5
 
Apple : iOS
Apple : iOSApple : iOS
Apple : iOS
 
201303 - Java8
201303 - Java8201303 - Java8
201303 - Java8
 
C++ Metaprogramming : multidimensional typelist
C++ Metaprogramming : multidimensional typelistC++ Metaprogramming : multidimensional typelist
C++ Metaprogramming : multidimensional typelist
 

Plus de Laurent BUNIET

Cours de C++, en français, 2002 - Cours 3.4
Cours de C++, en français, 2002 - Cours 3.4Cours de C++, en français, 2002 - Cours 3.4
Cours de C++, en français, 2002 - Cours 3.4Laurent BUNIET
 
Cours de C++, en français, 2002 - Cours 3.3
Cours de C++, en français, 2002 - Cours 3.3Cours de C++, en français, 2002 - Cours 3.3
Cours de C++, en français, 2002 - Cours 3.3Laurent BUNIET
 
Cours de C++, en français, 2002 - Cours 3.1
Cours de C++, en français, 2002 - Cours 3.1Cours de C++, en français, 2002 - Cours 3.1
Cours de C++, en français, 2002 - Cours 3.1Laurent BUNIET
 
Cours de C++, en français, 2002 - Cours 1.3
Cours de C++, en français, 2002 - Cours 1.3Cours de C++, en français, 2002 - Cours 1.3
Cours de C++, en français, 2002 - Cours 1.3Laurent BUNIET
 
Cours de C++, en français, 2002 - Cours 1.2
Cours de C++, en français, 2002 - Cours 1.2Cours de C++, en français, 2002 - Cours 1.2
Cours de C++, en français, 2002 - Cours 1.2Laurent BUNIET
 
Cours de C++, en français, 2002 - Cours 1.1
Cours de C++, en français, 2002 - Cours 1.1Cours de C++, en français, 2002 - Cours 1.1
Cours de C++, en français, 2002 - Cours 1.1Laurent BUNIET
 
Cours de C++, en français, 2002 - Plan
Cours de C++, en français, 2002 - PlanCours de C++, en français, 2002 - Plan
Cours de C++, en français, 2002 - PlanLaurent BUNIET
 

Plus de Laurent BUNIET (7)

Cours de C++, en français, 2002 - Cours 3.4
Cours de C++, en français, 2002 - Cours 3.4Cours de C++, en français, 2002 - Cours 3.4
Cours de C++, en français, 2002 - Cours 3.4
 
Cours de C++, en français, 2002 - Cours 3.3
Cours de C++, en français, 2002 - Cours 3.3Cours de C++, en français, 2002 - Cours 3.3
Cours de C++, en français, 2002 - Cours 3.3
 
Cours de C++, en français, 2002 - Cours 3.1
Cours de C++, en français, 2002 - Cours 3.1Cours de C++, en français, 2002 - Cours 3.1
Cours de C++, en français, 2002 - Cours 3.1
 
Cours de C++, en français, 2002 - Cours 1.3
Cours de C++, en français, 2002 - Cours 1.3Cours de C++, en français, 2002 - Cours 1.3
Cours de C++, en français, 2002 - Cours 1.3
 
Cours de C++, en français, 2002 - Cours 1.2
Cours de C++, en français, 2002 - Cours 1.2Cours de C++, en français, 2002 - Cours 1.2
Cours de C++, en français, 2002 - Cours 1.2
 
Cours de C++, en français, 2002 - Cours 1.1
Cours de C++, en français, 2002 - Cours 1.1Cours de C++, en français, 2002 - Cours 1.1
Cours de C++, en français, 2002 - Cours 1.1
 
Cours de C++, en français, 2002 - Plan
Cours de C++, en français, 2002 - PlanCours de C++, en français, 2002 - Plan
Cours de C++, en français, 2002 - Plan
 

Cours de C++, en français, 2002 - Cours 2.3

  • 2. Cours semaine 2 jour 3 Cours C++ 2 Plan du jour  Approfondissement sur les templates  MFC, STL et ATL
  • 3. Cours semaine 2 jour 3 Cours C++ 3 MFC  Les MFC offrent deux types de classes  Les classes Windows, que nous avons vu brièvement hier  Elles permettent de greffer une application dans le framework Windows qui gère les fenêtres et les évènements qui leurs seront envoyés  Les classes de soutien, qui correspondent à une collection de types à connotation beaucoup plus algorithmique
  • 4. Cours semaine 2 jour 3 Cours C++ 4 MFC (2)  Nous avons vu un programme minimaliste hier  Création d’une application utilisant les MFC  Création d’une fenêtre où rien n’est possible car il n’y a pas de message handlers  Nous allons aujourd’hui créer un programme possédant des message handlers  La fenêtre réagira enfin
  • 5. Cours semaine 2 jour 3 Cours C++ 5 MFC (3)
  • 6. Cours semaine 2 jour 3 Cours C++ 6 MFC (4)
  • 7. Cours semaine 2 jour 3 Cours C++ 7 MFC (5)
  • 8. Cours semaine 2 jour 3 Cours C++ 8 MFC (6)
  • 9. Cours semaine 2 jour 3 Cours C++ 9 MFC (7)
  • 10. Cours semaine 2 jour 3 Cours C++ 10 MFC (8)
  • 11. Cours semaine 2 jour 3 Cours C++ 11 MFC (9)
  • 12. Cours semaine 2 jour 3 Cours C++ 12 Supprimez !
  • 13. Cours semaine 2 jour 3 Cours C++ 13 MFC (11)
  • 14. Cours semaine 2 jour 3 Cours C++ 14 En commentaires
  • 15. Cours semaine 2 jour 3 Cours C++ 15 Rajout
  • 16. Cours semaine 2 jour 3 Cours C++ 16 Rajout
  • 17. Cours semaine 2 jour 3 Cours C++ 17 En commentaires
  • 18. Cours semaine 2 jour 3 Cours C++ 18 En commentaires
  • 19. Cours semaine 2 jour 3 Cours C++ 19 En commentaires
  • 20. Cours semaine 2 jour 3 Cours C++ 20 En commentaires plus modif
  • 21. Cours semaine 2 jour 3 Cours C++ 21 En commentaires
  • 22. Cours semaine 2 jour 3 Cours C++ 22 Rajout
  • 23. Cours semaine 2 jour 3 Cours C++ 23 MFC (21)  Arrivé à ce stade, vous avez une application fonctionnelle  Vous pouvez compiler  Si vous l’osez, vous pouvez même lancer une exécution
  • 24. Cours semaine 2 jour 3 Cours C++ 24 MFC (22)
  • 25. Cours semaine 2 jour 3 Cours C++ 25
  • 26. Cours semaine 2 jour 3 Cours C++ 26
  • 27. Cours semaine 2 jour 3 Cours C++ 27
  • 28. Cours semaine 2 jour 3 Cours C++ 28 Ctrl-w
  • 29. Cours semaine 2 jour 3 Cours C++ 29 MFC (27)
  • 30. Cours semaine 2 jour 3 Cours C++ 30 MFC (28) Double clic 1 Double clic 2
  • 31. Cours semaine 2 jour 3 Cours C++ 31
  • 32. Cours semaine 2 jour 3 Cours C++ 32
  • 33. Cours semaine 2 jour 3 Cours C++ 33 MFC (31)  Il est à nouveau possible de compiler  Essayez aussi d’exécuter le programme…
  • 34. Cours semaine 2 jour 3 Cours C++ 34 MFC (32) Double clic
  • 35. Cours semaine 2 jour 3 Cours C++ 35 MFC (33) OK
  • 36. Cours semaine 2 jour 3 Cours C++ 36 MFC (34) Double clic
  • 37. Cours semaine 2 jour 3 Cours C++ 37 Rajout
  • 38. Cours semaine 2 jour 3 Cours C++ 38 MFC (36)  Compilez  Exécutez  Quittez sans le Task Manager…
  • 39. Cours semaine 2 jour 3 Cours C++ 39 MFC (37)  Nous venons de créer un message handler permettant de quittez le programme losrque le bouton droit de la souris est relaché  Le message est envoyé à la fin du clic souris  Relancer le programme et gardez le doigt appuyé sur le bouton droit pour vérifier !
  • 40. Cours semaine 2 jour 3 Cours C++ 40 MFC de soutien  Les classes MFC pour la gestion des fenêtres sont très nombreuses  Elles sont accessibles par l’intermédiaire des assistants qui automatisent également beaucoup la création des handlers par rapport à ces fenêtres
  • 41. Cours semaine 2 jour 3 Cours C++ 41 MFC de soutien (2)  Les classes de soutien MFC sont constituées de plusieurs éléments  Les classes de collection, qui permettent de gérer des collections d’objets  Tableaux (Array), listes (List) et tables (Map)  Les classes de gestion de coordonnées  Les classes de gestion du temps  La classe de manipulation de chaînes de caractères
  • 42. Cours semaine 2 jour 3 Cours C++ 42 MFC de soutien (3)  Les classes de gestion des tableaux (collection) sont typées  Elles n’utilisent pas la programmation générique  Bien que nous soyons en C++, il y a encore quelques réminiscences de C…  Cependant, comme nous sommes tout de même en C++, il y a la possibilité d’utiliser des fonctions exotiques
  • 43. Cours semaine 2 jour 3 Cours C++ 43 MFC de soutien (4) CByteArray BYTE – valeurs entières non signées 8 bits CWordArray WORD – valeurs entières non signées 16 bits CUIntArray UINT – valeurs entières non signées 32 bits CDWordArray DWORD – valeurs entières non signées 32 bits CStringArray CString – chaînes de carcatères CObArray CObject – tout dérivé de CObject
  • 44. Cours semaine 2 jour 3 Cours C++ 44 MFC de soutien (5) CStringArray tableauDeChaine; tableauDeChaine.add( "titi" ); tableauDeChaine.add( "toto" ); tableauDeChaine.add( "tata" ); CWordArray tableauDeMots; tableauDeMots.SetSize( 20 ); tableauDeMots.SetAt( 0, 2000 ); tableauDeMots[ 5 ] = 2002; TRACE( "une valeur dans tableauDeMots %d", tableauDeMots.GetAt( 5 ) );
  • 45. Cours semaine 2 jour 3 Cours C++ 45 MFC de soutien (6)  Les classes de gestion de listes (collection) suivent le même principe que les classes de gestion des tableaux  Une classe par type de base supporté  Il existe également des objets annexes qui permettent de conserver certaines informations  Classe POSITION
  • 46. Cours semaine 2 jour 3 Cours C++ 46 MFC de soutien (7) CObList CObject – tout dérivé de CObject CStringList CString – chaînes de carcatères CPtrList void* - pointeurs indéfinis
  • 47. Cours semaine 2 jour 3 Cours C++ 47 MFC de soutien (8) CStringList ListeDeChaines; CString str; POSITION pos; pos = listeDeChaines.AddHead( "tete" ); listeDeChaines.AddTail( "pied" ); listeDeChaines.InsertBefore( pos, "cheveux" ); listeDeChaines.AddTail( "ongles" ); pos = listeDeChaines.GetHeadPosition(); pos = listeDeChaines. GetTailPosition(); str = listeDeChaines.GetNext( pos ); str = listeDeChaines.GetPrev( pos ); POSITION posCourante = listeDeChaines.GetHeadPosition(); while( posCourante ) TRACE( "%s", listeDeChaines.GetNext( posCourante );
  • 48. Cours semaine 2 jour 3 Cours C++ 48 MFC de soutien (9)  Les classes de gestion des tables (collection) suivent également les principes des tableaux et des listes  Classes typées  Ici aussi, il existe des classes d’aide  POSITION
  • 49. Cours semaine 2 jour 3 Cours C++ 49 MFC de soutien (10) CMapWordToOb clé WORD – élément CObject CMapWordToPtr clé WORD – élément void* CMapPtrToPtr clé void* – élément void* CMapPtrToWord clé void* – élément WORD CMapStringToOb clé CString – élément CObject CMapStringToPtr clé CString – élément void* CMapStringToString clé CString – élément CString
  • 50. Cours semaine 2 jour 3 Cours C++ 50 MFC de soutien (11) CMapStringToOb tableDetailsPlanetes; tableDetailsPlanetes.setAt( "Mercure", CDetailsPlanete( 4878, 0.054 ) ); tableDetailsPlanetes.setAt( "Venus", CDetailsPlanete( 12100, 0.815 ) ); tableDetailsPlanetes[ "Terre" ] = CDetailsPlanete( 6762, 0.107 ) ); POSITION pos = tableDetailsPlanetes.GetStartPosition(); while( pos != NULL ) { CString strPlanete; CDetailsPlanete pMaPlanete; if(tableDetailsPlanetes.GetNextAssoc( pos, strPlanete, (Cobject*&) pMaPlanete ) ) TRACE( "%f", pMaPlanete->champs2 ); }
  • 51. Cours semaine 2 jour 3 Cours C++ 51 MFC de soutien (12)  Tous ces types sont prédéfinis et prétypés  Cela apporte normalement plus de rapidité  Cela apporte aussi moins de flexibilité  Il est cependant possible de définir des classes de collection à partir de ses propres objets  Au bout d’un certains temps, Microsoft a quand même permis d’utiliser les templates…
  • 52. Cours semaine 2 jour 3 Cours C++ 52 MFC de soutien (13)  CArray, CList et CMap sont des templates permettant de définir des classes de collection à partir de classes définies par l’utilisateur  Les « modèles » sont fournis dans afxtempl.h  Les templates permettent en fait d’obtenir des possibilités qui n’existent pas avec les classes de base
  • 53. Cours semaine 2 jour 3 Cours C++ 53 MFC de soutien (14)  CArray< CClassPerso1*, CClassPerso2* >  CClassPerso1 : type de pointeur d’objet retourné par le tableau, lors de GetAt() par exemple  CClassPerso2 : type qui doit être utilisé pour les arguments en entrée, lors de SetAt() ou Add()  Il s’agit bien d’un template !  Idem pour CList
  • 54. Cours semaine 2 jour 3 Cours C++ 54 MFC de soutien (15)  CMap< MonType, MonTypeArg, CClassPerso, CClassPersoArg >  MonType donne le format de la clé en interne : int, WORD, DWORD, double, float ou CString  MonTypeArg : type de l’argument à fournir pour la clé  CClassPerso indique la classe de stockage interne des éléments  CClassPersoArg indique le type des arguments qui seront fournis comme éléments
  • 55. Cours semaine 2 jour 3 Cours C++ 55 MFC de soutien (16) CMap< CString, LPCSTR, CDetailsPlanete*, CDetailsPlanete* > tabPlanete; // LPCSTR permet la comparaison sur les valeurs de chaînes, // pas sur les valeurs des pointeurs ;-) // c’est un tableau de caractères // la suite comme tout à l’heure sauf pour le « Lookup » tabPlanete.setAt( "Mercure", CDetailsPlanete( 4878, 0.054 ) ); tabPlanete.setAt( "Venus", CDetailsPlanete( 12100, 0.815 ) ); tabPlanete[ "Terre" ] = CDetailsPlanete( 6762, 0.107 ) ); POSITION pos = tableDetailsPlanete.GetStartPosition(); CDetailsPlanete* pPlanete = NULL; if( tabPlanete.Lookup( "Terre", pPlanete ) ) TRACE( "%f", pPlanete->champs2 );
  • 56. Cours semaine 2 jour 3 Cours C++ 56 MFC de soutien (17)  Les classes de gestion de coordonnées sont importantes pour la gestion de l’environnement fenêtré  Classes CPoint, CRect et CSize  Elles ont une correspondance certaines avec les types internes de Windows
  • 57. Cours semaine 2 jour 3 Cours C++ 57 MFC de soutien (18) CPoint() CPoint( POINT pInit ) Copie à partir d’une structure POINT ou d’un objet CPoint CPoint( int x, int y ) CPoint( DWORD dwInit ) 16 bits de poids faible pour x CPoint( SIZE sizeInit ) Copie à partir d’une structure SIZE ou d’un objet CSize
  • 58. Cours semaine 2 jour 3 Cours C++ 58 MFC de soutien (19) CRect() CRect( RECT& rcInit ) structure RECT ou objet CRect CRect( LPCRECT lprcInit ) pointeur sur RECT ou CRect CRect( int g, int s, int d, int i ) CRect( POINT point, SIZE size ) structure POINT ou objet CPoint et structure SIZE ou objet CSize CRect( POINT ptSG, POINT ptID ) structure POINT ou objet CPoint
  • 59. Cours semaine 2 jour 3 Cours C++ 59 MFC de soutien (20) CSize() CSize( SIZE sizeInit ) structure SIZE ou objet CSize CSize( int initCX, int initCy ) CSize( POINT ptInit ) structure POINT ou objet CPoint CSize( DWORD dwSize ) 16 bits de poids faible pour cx
  • 60. Cours semaine 2 jour 3 Cours C++ 60 MFC de soutien (21)  Il est aisé de remarquer dans les slides précédents la présence de types définis en majuscules à côté des types à l’allure un peu plus C++  Il s’agit des types internes de Windows  MFC ne fournit donc qu’une interface à ces types internes
  • 61. Cours semaine 2 jour 3 Cours C++ 61 MFC de soutien (22) Type Windows Type C++ (MFC) POINT CPoint SIZE CSize RECT CRect HWND CWnd HDLG CDialog HMENU CMenu HWND CEdit HWND CListBox HSZ CString
  • 62. Cours semaine 2 jour 3 Cours C++ 62 MFC de soutien (23)  Il existe deux classes de gestion du temps dans MFC  COleDateTime  Représente une date et une heure valide  De nombreux constructeurs car la classe est reliée à OLE qui possède de nombreuses représentations  COleDateTimeSpan  Représente un écart entre deux DateTime, en jours et heures
  • 63. Cours semaine 2 jour 3 Cours C++ 63 MFC de soutien (24)  MFC fournit également une classe permettant de traiter des chaînes de caractères, la classe CString  Cette classe possède également un ensemble de méthodes permettant :  La manipulation ( Left(), Mid(), Right() )  la recherche ( Find(), FindOneOf() )  Le formatage de l’affichage ( Format() )
  • 64. Cours semaine 2 jour 3 Cours C++ 64 MFC de soutien (25) CString() CString( CString strSrc ) CString( LPCSTR lpsz ) tableau de caractères CString( unsigned char* psz ) CString(LPCSTR lpch, int nLength ) CString( TCHAR ch, int nRepeat ) CString( LPCWSTR lpsz ) tableau de caractères UNICODE
  • 65. Cours semaine 2 jour 3 Cours C++ 65 MFC de soutien (26)  La fonction Format de la classe CString permet d’utiliser des notations pour les emplacements d’éléments  Cette notation est celle utilisée dès le départ en C sur Unix
  • 66. Cours semaine 2 jour 3 Cours C++ 66 MFC de soutien (27) %c int un caractère %d int un entier signé %u int un entier non signé %o int un entier non signé, format octal %x int un entier non signé, format hexadécimal minuscule %X int un entier non signé, format hexadécimal majuscule %f double un nombre à virgule flottante %s string une chaîne de caractères (char*) %% - le signe %
  • 67. Cours semaine 2 jour 3 Cours C++ 67 STL  Microsoft a défini ses MFC assez rapidement pendant que d’autres constructeurs se regroupaient pour définir une librairie standard  STL, Standard Template Library, est un standard reconnu par tous les compilateurs qui implémentent l’ANSI C++  Cela garantit une certaine portabilité du code source (mais pas de l’exécutable !)
  • 68. Cours semaine 2 jour 3 Cours C++ 68 STL (2)  La STL est supportée par Microsoft Visual C++ et le code source d’autres plate-formes pourrait ainsi être recompilé  À condition bien sûr que ce code ne comporte pas d’appel à des classes d’interface graphique comme X-Windows ou Athena sur Unix  L’opération est envisageable pour des sources à caractère purement algorithmique ou scientifique
  • 69. Cours semaine 2 jour 3 Cours C++ 69 STL (3)  La STL regroupe un ensemble de classes d’utilité générale  En fait, comme le nom l’indique fort bien, il s’agit en partie de templates  La STL offre principalement des classes d’algorithmique générale
  • 70. Cours semaine 2 jour 3 Cours C++ 70 STL (4)  La STL contient, entre autre  Une classe string  Un template vector  Des templates list et deque  Des templates set, multiset, map et multimap  Un algorithme de tri, sort  Un algorithme de recherche, find  Des classes d’itérateurs dans les collections, iterator, pour input, ouput, forward, random, bidirectional
  • 71. Cours semaine 2 jour 3 Cours C++ 71 STL (5) #include <algorithm> #include <iostream> #include <iterator> #include <string> #include <vector> using namespace std; void main() { vector<string> v; string tmp; for( int i = 0; i < 10 ; i++ ) { cout << "un mot : "; getline( cin, tmp ); v.push_back( tmp ); } sort( v.begin(), v.end() ); copy( v.begin(), v.end(), ostream_iterator<string>( cout, "n" ) ); }
  • 72. Cours semaine 2 jour 3 Cours C++ 72 STL (6)  STL contient des éléments qui sont classés différemment de ceux de Windows  Le point de vue utilisé ici est un peu plus académique, pour ne pas dire scientifique  La STL a été développé dans des laboratoires de recherche, dont celui de HP qui est le détenteur officiel de la version officielle de la STL
  • 73. Cours semaine 2 jour 3 Cours C++ 73 STL (7)  Containers  Containers de séquences  vector : vecteur  deque : file à double entrée, possibilité d’insérer en début et en fin  List : liste  Containers associatifs  set et multiset : gestion d’un ensemble d’éléments, possibilité de dupliquer des éléments (multi)  Map et multimap : gestion des tables d’association, possibilité de dupliquer des éléments (multi)
  • 74. Cours semaine 2 jour 3 Cours C++ 74 STL (8)  Algorithmes  find : algorithme générique de recherche  merge : algorithme générique de fusion, marche pour les listes, les vecteurs, les tableaux, les types pouvant être mélangés et le résultat récupéré dans un type différent !  sort : algorithme de tri générique  etc
  • 75. Cours semaine 2 jour 3 Cours C++ 75 STL (9)  Itérateurs  Permettent le parcours des ensembles (au sens très général du terme)  Efficaces et puissants  Objets fonction  Avec STL, certains objets sont des fonctions : ce sont des versions abstraites des algorithmes
  • 76. Cours semaine 2 jour 3 Cours C++ 76 STL (10)  Adaptateurs  Composants qui permettent de modifier l’interface d’autres composants  Permettent par exemple de modifier un deque en liste LIFO (i.e. du bon usage des langages OO pour faire des ADT)  Allocateurs  En charge de l’allocation de la mémoire
  • 77. Cours semaine 2 jour 3 Cours C++ 77 STL (11)  STL est une très bonne librairie objet  Parfois difficile à apprendre mais le jeu en vaut la chandelle  Devrait être privilégiée autant que faire se peut par rapport aux MFC
  • 78. Cours semaine 2 jour 3 Cours C++ 78 ATL  ATL est l’acronyme d’Active Template Library  Cette librarie est propre au monde Microsoft  Il ne s’agit pas d’un complément des MFC  Il s’agit d’un remplaçant !
  • 79. Cours semaine 2 jour 3 Cours C++ 79 ATL (2)  Problèmes des MFC  Très gros, très lourd  Oblige à travailler avec l’ « Application Framework Architecture »  Utilise des notions de document et document template qui disparaîtront peut être bientôt tels qu’ils existent aujourd’hui  Et la compatibilité ne sera peut être pas parfaitement assurée…
  • 80. Cours semaine 2 jour 3 Cours C++ 80 ATL (3)  Avantages de l’ATL  Travaille avec le modèle COM de Microsoft, Component Object Model  COM est l’ancêtre de DCOM, qui est l’ancêtre d’ActiveX  Active Template Library…  ATL est beaucoup plus petit que MFC  L’apprentissage en est donc facilité  ATL est plus petit et donc plus rapide !  C’est une petite usine à gaz !
  • 81. Cours semaine 2 jour 3 Cours C++ 81 ATL (4)  ATL est fait pour supporter COM, qui n’est pas spécifiquement graphique  Mais des objets COM ou des ActiveX peuvent avoir des fenêtres  ATL possède cependant des classes permettant d’ouvrir et de gérer des fenêtres  ATL en offre plusieurs types, utilisables en fonction des contextes
  • 82. Cours semaine 2 jour 3 Cours C++ 82 ATL (5)  CWindow est un wrapper (sorte d’adaptateur) qui permet de disposer d’un objet fenêtre qui peut être fourni à n’importe quelle fonction en ayant besoin  CWindowImpl permet de créer une fenêtre à partir de la définition d’une autre classe  CContainedWindow est une fenêtre qui effectue le routage des messages aux autres classes. Le traitement des messages peut ainsi être centralisé en une seule classe de l’application
  • 83. Cours semaine 2 jour 3 Cours C++ 83 ATL (6)  CAxWindow est une fenêtre qui peut « embarquer » un contrôle ActiveX  CSimpleDialog permet de créer un dialogue modal simple  CDialogImpl permet de créer des fenêtres de dialogue modal ou non modal  CAxDialogImpl est un CDialogImpl qui supporte les contrôles ActiveX
  • 84. Cours semaine 2 jour 3 Cours C++ 84 ATL (7)  CWndClassInfo gère les informations relatives aux objets fenêtre  CWinTraits gère les informations d’aspect des fenêtres
  • 85. Cours semaine 2 jour 3 Cours C++ 85 ATL (8)  Pour gérer les messages dans un CWindowImpl, il existe un CMessageMap qui fait le lien entre les message et les message handlers  Il existe trois groupes de messages handlers  Les messages handlers pour « tous » les messages  Les command handlers pour les messages WM_COMMAND  Les notification handlers pour les messages WM_NOTIFY
  • 86. Cours semaine 2 jour 3 Cours C++ 86 ATL (9)  Une message map ressemble à ceci : BEGIN_MSG_MAP( CMyDialog ) MESSAGE_HANDLER( WM_INITDIALOG, OnInitDialog ) COMMAND_HANDLER( IDC_EDIT1, EN_CHANGE, OnChangeEdit1) COMMAND_ID_HANDLER( IDOK, OnOK ) COMMAND_CODE_HANDLER( EN_ERRSPACE, OnErrEdits ) NOTIFY_HANDLER( IDC_LIST1, NM_CLICK, OnClickList1 ) NOTIFY_ID_HANDLER( IDC_LIST2, OnSomethingList2 ) NOTIFY_CODE_HANDLER( NM_DBLCLK, OnDblClkLists ) END_MSG_MAP()
  • 87. Cours semaine 2 jour 3 Cours C++ 87 WTL  Il existe enfin, de manière assez périphérique, une WTL, Windows Template Library, actuellement en version 3.1  Cette librairie est une extension de la librairie ATL  Elle est livrée avec un assistant permettant la création assistée de fenêtres…
  • 88. Cours semaine 2 jour 3 Cours C++ 88 WTL (2)  La WTL permet d’avoir des classes prédéfinies pour :  Les message loops  Les contrôles,  Les fenêtres de dialogue,  Les frame windows,  Les objets DC et GDI (le contexte graphique de l’application et l’interface du périphérique graphique)  Les portages ATL de CPoint, CRect, CSize, CString et d’autres type MFC de soutien
  • 89. Cours semaine 2 jour 3 Cours C++ 89 WTL (3)  Problèmes avec la WTL  Elle n’est pas officiellement supportée par Microsoft, juste livrée telle quelle  Si Microsoft décide de tout changer demain, les applications pourraient être impossibles à porter et il faudrait revenir aux MFC !
  • 90. Cours semaine 2 jour 3 Cours C++ 90 Questions / Remarques