Bonjour,
Je vous propose un nouvel élément à utiliser : Application MFC à plusieurs documents, avec onglets, type Visual studio
Ce programme tout en donnant un exemple d'une présentation évoluée de type Visual Studio permet de convertir les fichiers d'aide de Microsoft.
"Application MFC à plusieurs documents, avec onglets, type Visual studio" : C’est l’intitulé qu’il faut choisir avec l’assistant permettant de configurer le nouveau projet en cours de création avec l'atelier logiciel Visual Studio Community 2019sous Windows 10. L’application obtenue comporte une fenêtre principale avec à l’intérieur plusieurs fenêtres dérivées de la classe CDockablePane accrochées sur ses bords. L’assistant permet de créer un projet multifenêtres. Une seule est visible à la fois et occupe tout l’espace de la fenêtre principale encore disponible entre les fenêtres « pane ». Des onglets permettent de choisir dans les présentes celle qui est visible. Toutes ces fenêtres sont de types identiques. Pour obtenir des fenêtres différentes il faut modifier « à la main » le code obtenu. Quand on ne connait pas toutes les subtilités de cette architecture, il faut ruser ! Et créer autant d’applications provisoires à une seule fenêtre ayant chacune un des types souhaités. Ensuite, copier dans l’application finale les parties spécifiques, notamment les classes CDocument et CView chaque fois générées. Puis pour ajouter leur appel dans la classe CWindApp, il ne reste plus que modifier cette classe au niveau de la procédure AddDocTemplate. Pour exemple, voir le fichier Help.cpp (lignes 120 à 140). Lorsque les fenêtres traitent des type de fichiers différents définis par leur extension, l’aiguillage est automatique, sinon il faut modifier la classe CDocManager (ligne 117 de Help.cpp et fichiers DocManagerEx.h et DocManagerEx.cpp).
L’ensemble de fenêtres CDockablePane, dont la position est programmable par l’utilisateur permet de présenter des informations complexes (listes, arbres ou edit) qui dans notre exemple permettent de créer, convertir ou modifier une documentation intégrée de type WinHelp.
Ce programme donne un exemple de traitement et d’édition de différents formats de fichiers de texte comme le *.HTM et *.RTF avec présentation des sources et résultats formatés. Ceci est d’autant plus intéressant que ces programmes utilisent seulement les primitives fournies par MFC sans traitements ni habillages supplémentaires. En particulier, Il est tout à fait possible d’éditer et développer un fichier HTML en jonglant avec la présentation formatée et la source du texte.
Dans ce genre de projet il faut manipuler un grand nombre d’informations contenues dans des textes de formats différents et exploiter les liens présents pour assurer leur cohérence avec le programme qu’ils tentent de documenter. Le but étant d’assigner à un lien une fonction ou une commande à instruire, cette explication pouvant contenir de nouveaux liens enrichissant l’explication. De plus pour la compréhension globale du texte il faut pouvoir à tout moment revenir en arrière et naviguer dans ces liens.
Listes classées
Une autre originalité de ce programme est l’utilisation de listes classées à accès rapide. Elles transcodent le nom introduit en un pointeur spécifique. C’est ensuite ce pointeur qui sera utilisé dans la suite des traitements. Chacune de ces listes est constituée de deux tables, la première de taille fixe est une pré table définissant un secteur dans la liste principale où est rangé le nom. L’emplacement dans cette pré table est défini par un hcode calculé à partir du nom. La liste principale est une liste chainée classique où chaque nom est introduit en fonction de son classement. La recherche dans une telle liste se fait donc en deux étapes : la première est de chercher le pointeur correspondant au hcode du nom. La recherche du nom dans la liste principale devient alors très rapide dans un espace de noms ayant le même hcode.
Trois cas se présentent :
- le nom recherché est plus grand que celui désigné par le hcode indique qu’il n’est pas dans la liste et l’emplacement où il faut l’ajouter est ainsi désigné.
- Le nom recherché correspond au pointeur, il est trouvé.
- Le nom recherché est inférieur au désigné par le pointeur et il faut le chercher en analysant séquentiellement les noms qui précédent jusqu’à le trouver ou détecter un nom plus grand. Cette opération de recherche lorsqu’elle est infructueuse donne aussi l’emplacement où insérer le nouveau nom.
Dans ce programme ces listes sont utilisées pour deux fonctions :
- la première, la plus intuitive permet de convertir en simples pointeurs tous les symboles correspondant aux liens.
- La deuxième assure l’analyse syntaxique des différents formats de fichiers en isolant les mots clés utilisés. Ce qui permet par exemple la conversion des fichiers RTF en HTML ou le décodage des différents fichiers de l’application : *.hhp, *.hhc, *.hhk, *.h ou pour les anciennes versions *.hpj, *.cnt, *.hm. Il est même possible d’extraire les informations de la description des menus contenus dans un fichier de ressource *.rc.
La classe CStrList épaulée par les classes CNode et CNodes contenues dans les fichiers STrList.h, Nodes.h, STrList.cpp et Nodes.cpp gèrent les liens. Les classes Keyword et KwEntry décrites dans le fichier Keyword.h et Keyword.cpp ou RtfKeyword.h, RtfKeyWord.cpp, assurent les décodages sous les directives des classes CReadFiles et CRtf contenues dans les fichiers ReadFile.h, ReadFile.cpp Rtf.h et Rtf.cpp.
Visualiser une documentation
Un visualisateur de cette documentation est même inclus (Classes CHelpDlg et CViewTree, fichiers HelpDlg.h et HelpDlg.cpp). Cette partie peut être intégrée à n’importe quel nouveau programme pour afficher une telle documentation intégrée. Celle-ci est composée des différent fichiers *.htm et d’un fichier directeur *.hix réalisé par Help 2. Il n’est pas fait usage des DLL Microsoft WinHelp (pas toujours disponibles sous Windows 10). Elle à l’avantage (et aussi l’inconvénient) d’être facilement modifiable par un utilisateur final qui possède des rudiments de HTML.
Développement et modification de documentation intégrée
C’est la fonction du programme Help. Une description plus détaillée est assurée par le fichier « Architecture de l’application.htm » contenu dans le dossier « Documentation ».
A titre d’exemple, ce programme comporte une documentation intégrée décrivant ses différentes possibilités et fonctions. Cette documentation peut être affichée par le visualisateur intégré ou par la méthode classique Microsoft (fichier *.chm) si tous l’atelier adéquate de génération du Help Microsoft a été téléchargé. Différentes explications sont aussi fournies dans le dossier « Documentation » pour créer une telle documentation (modifications de l’atelier, des programmes…). Ce programme m’a été utile pour mettre à jour, entre autres, un de mes derniers programmes publiés (YiKing).
Qu'en pensez-vous ?
Partager