Présentation de la méthodologie pour réaliser un template de fenetre (basée sur Dialog Box)
en utilisant au début le classwizard
1
commencez à créer votre fenetre comme d'habitude
ses controles
actions associées aux boutons
...
(ce qui n'est pas fait à cette étape pourra etre repris manuellement)
2
séparer la gestion de la fenetre dans une source spécifique
les fonctions de la fenetre faisant appel à ces derniere
3
faire une classe virtuelle d'ou dériveront les classes utilisées pour notre template
(cela facilitera et imposera le fait que toutes les sous fonctions aient une instance)
4
créer ou
faire dériver la classe désirée de notre classe virtuelle
5
modifier toutes les fonctions pour introduire le template
remplacer la gestion de messages par une adaptation de ce qui suit:
(ce que j'appelle la gestion de messages c'est
BEGIN_MESSAGE_MAP(DListeIndirW, CDialog)
)
'
template<class TYPE_ELTS> const AFX_MSGMAP* DListeIndirW<TYPE_ELTS>
::GetMessageMap() const
{
return &DListeIndirW::messageMap;
}
template<class TYPE_ELTS> AFX_COMDAT AFX_DATADEF const AFX_MSGMAP DListeIndirW<TYPE_ELTS>
::messageMap =
{
&CDialog::messageMap, &DListeIndirW<TYPE_ELTS>::_messageEntries[0]
};
template<class TYPE_ELTS> AFX_COMDAT const AFX_MSGMAP_ENTRY DListeIndirW<TYPE_ELTS>
::_messageEntries[] =
{
'
6
ne plus inclure le cpp dans le linkage
mais faire un include à la fin du header
(cf méthode employée dans BListeIndir)
7
créer des instance tester
voilà et ça marche
Magicalement
Nono.
Source / Exemple :
un exemple dans le zip
DListeIndirW étant la fameuse fenetre...
DListeIndir étant la classe virtuelle,
dérivant de BListeIndir, une gestion de liste d'objets (et oui, un template....)
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.