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.