Win32 tool kit mfc like + changer language appli + parsers (xml, resource.h)

Description

je vais vous présenter cette source qui m'a prit la semaine a faire. Il s'agit d'un toolkit win32, donc un ensemble d'objets ou classes utiles qui vont vous permettre (d'apprendre pour ceux qui savent pas déja :) ) et de vous faciliter la vie avec les composants windows simples : listes, boutons, edit, check,... J'ai généré une documentation html de l'ensemble du kit par doxygen pour ceux que ca intéresse.
Classes utilisables :
---------------------
CEdit : edit boxes
CButton : boutons
CRadio : radio boutons
CCheck : check boxes (cases à cocher)
CList : list boxes
CCombo : combo boxes
CWindow : gestion des fenêtres et de tous les composants d'une fenêtre
CChild : gestion de fenêtres enfants
CSlider : gestion des sliders
CMouse : une petite classe regroupant les fonctions utiles de gestion souris
CXmlDocument : parseur de fichiers type Xml / Svg
CResourceFile : parseur de fichiers resources : resource.h
CLangFile : classe d'implémentation de différent langages des applications
CLangController : regroupe tous les languages possibles pour l'application
CController : template classe pour manipuler les map de classes facilement

Les éléments


Un élément est constitué d'un handle (HWND) et de l'id de celui-ci (ex. IDC_BUTTON1). De plus la plupart des items peuvent avoir un titre ou une icone. (ou un contenu unique pour les edit boxes par exemple) Dans les fichiers de configuration, on peut spécifier les icones/captions par défaut ou des index d'icones/captions pour les items qui peuvent changer : exemple un bouton qui peut faire : play->pause->stop. on créera 3 captions différents : play, pause et stop aux indexs 0,1,2 respectivement. Ces entrées seront reportées dans tous les fichiers de language traduits dans la langue correspondante. Certains items peuvent etres cochés, et enable|disable. Tout ceci peut etre reporté dans un fichier de configuration de fenêtre

CWindow


la classe regroupe tous lees éléments qu'on peut retrouver dans une fenêtre et la fenêtre elle même. Elle permet grâce à un ensemble de fonctions simples de passer toute une fenêtre (+items) de francais à anglais, etc... Il suffit d'un fichier de configuration de la fenêtre (ex : w1.win) qui contient tous les éléments de la fenêtre. Une CWindow peut être associée à un language controller. Ainsi on peut changer tous les items de la fenêtre selon les titres et icones du language. On peut alors spécifier les index des titres correspondant à ceux enregistrés dans les fichiers de language.
un item type :
<window id="100" caption="MaFenetre">
<item id="1001" type="button" caption="mon_titre"/>
</window>

ou pour une icon :
<window id="100" caption="MaFenetre">
<item id="1001" type="button" icon="c:\my_icon.ico"/>
</window>

pour spécifier les index (-1 <=> titre/icon par défaut)
<window id="100" caption="@1">
<item id="1001" type="button" icon="@2"/>
</window>

CLangFiles


comme vu précédemment les CLangFiles représentent un language pour les items :
<language name="francais">
#pour les icones
<item id="1001" type="button" icon="c:\my_icon.ico"> //icone par défaut
<icon index="0" name="my_icon0.ico"/>
<icon index="1" name="my_icon1.ico"/>
</item>
#pour les captions
<item id="1002" type="check" caption="MyCheckBox"> //caption par défaut
<caption index="0" name="Check0"/>
<caption index="1" name="Check1"/>
</item>
#pour les fenêtres
<item id="123" type="child" caption="MyWindow">
<caption index="0" name="Window0"/>
<caption index="0" name="Window1"/>
</item>
</language>

il suffit de créer un langage file par language a utiliser puis de les ajouter au ontroller. Controller->getLanguage(french) => const CLangFile * retourne un pointeur constant vers un language :)

ResourcesFiles


si on regarde les exemples on voit qu'il faut reporter à chaque fois les id des éléments. Les id se trouvent dans les fichiers de resources : ex, resource.h seulement comme ces fichiers sont générés automatiquement par visual lorsqu'on
dessine une fenêtre c'est assez pénible de tout tenir à jour. J'ai créé un parseur de fichiers de resources : une resource concrètement c'est une ligne :
#define IDC_BUTTON1 1001
l'id string = IDC_BUTTON et l'id integer = 1001
le parseur fait le lien entre les deux : parser->getID("IDC_BUTTON") => 1001
J'ai donc permis l'association entre les CResourcesFile et les CWindows, ainsi que les CLangFile. On peut alors remplacer les id brutes (1001) par les références au fichier de resource associé (IDC_BUTTON) pour ce faire un exemple dans le fichier de fenêtre :
#notre bouton :
<item id="#IDC_BUTTON" type="button" caption="@1"/>

Voila que demander de plus ?? :)
Je vous laisse découvrir toutes les fonctionnalités du toolkit (regardez le
main)
bonne lecture.

Source / Exemple :


tout est dans le zip, + qqs fichiers de language et de fenêtre pour comprendre la synthaxe

Conclusion :


Bon je pense que la description est suffisante quand mm :)

Sinon pour ceux qui sont intéressés mon ftp free: http://hellaynnea.free.fr/programmation
ou ya tout plein de choses intéressantes, dans la partioe Doc, j'ai mais les schémas des automates des 2 parseurs : ResourceFile et xmlParser

Par ailleurs je n'arrive pas à changer le style d'un bouton lorsque la fenêtre a été créée : passer d'icone à caption et inversement.

Corrections :
[27/02/04]
- création de la classe template CController qui permet de gérer n'imorte quel type de list
> implémentation de CController dans le CLangController (modification de la
> structure)
> pourra être utilisé pour gérer plusieurs CWindow
- toutes les fonctions d'output ont été formatées en XML like, et leur nom
> remplacées par "dump"

[26/02/04]
- Intégration d'un code de retour pour close et destroy item
- pour destroy modification flag si boite de dialogue modale
- toutes les classes ont été passées dans le workspace win32ToolKit
- correction de certains bugs pour compilation cygwin
- ajout de ka fonction getItemCaption(...) dans CLangController pour ne pas avoir
> a utiliser une fenêtre pour pouvoir récupérer un texte.
- correction d'erreurs dans les parseurs (lecture de '\r' et '\n' et pos >= len )
[24/02/04]
- ajout dans CBasicWindow :
move(modification pour pouvoir mettre la taille aussi), getPosition, getSize, setSize
- ajout de la classe CText
- CWindow :ajout des méthodes:
> getTextItem() pour récupérer un texte dans le language courant
> getItemcaption() pour récupérer le caption d'un item dans le langage courant

[22/02/04]
- correction de CWindow::SetIcon(HICON)

Codes Sources

A voir également

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.