Programmer en C++
Séparation des fichiers et ajout d'icône

1. Séparation des fichiers

Dès qu'un programme s'étoffe il devient nécessaire de séparer les différentes parties dans des fichiers séparés. Cela apporte plus de clarté et de compréhension du code. Le fichier que nous allons ajouter à notre projet se nomme "resource.rc". Usuellement il stocke la structure des menus (fichier, nouveau, quitter, etc ...). Il stocke également les informations sur les icônes ou les images nécessaires à notre programme.
Pour fonctionner il a besoin d'identifiant permettant de reconnaitre ici un bouton, ailleur une zone de saisie, etc ... Ces identifiants ne sont en fait que des constantes que nous enregistrons dans un fichier nommé : "resource.h".

Créons maintenant ces deux fichiers supplémentaires :


Nous cliquons sur le menu "File", puis "New", puis sur "Empty file", ou tout simplement avec le clavier nous effectuons la combinaison de touche : Ctrl-Shift-N.

Nous confirmons ensuite que nous désirons inclure ce nouveau ficher à notre projet en cliquant sur le bouton "Oui".

Avant de valider dans la fenêtre qui s'ouvre, assurons nous de bien renommer le ficher en "resource.rc". Vérifier que Type est sur "All file(*.*)".



Dans la fenêtre qui apparait ci-contre, il suffit juste de vérifier que les cases "Debug" et "Release" sont cochées, puis nous cliquons sur "OK".

Voilà c'est tout, ce nouveau fichier fait maintenant partie de notre projet. Refaire la même chose avec le fichier suivant que vous nommerez cette fois "resource.h".

Si tout c'est bien passé, vous devriez en développant l'arborescence de votre projet, voir ceci :

2. Ajout des icônes

A ce stade on suppose que vous êtes en possession d'une icône. Si ce n'est pas le cas, vous trouverez facilement sur internet des icônes gratuites à télécharger (Ex : icon-icons.com, icongal.com, ...). Il existe également des éditeurs d'icônes gratuits (Ex : Snico edit). Ils vont permettrons de personaliser vos propres icônes.

Commençons par placer notre icône dans le dossier de notre projet. la mienne s'appelle "prof.ico".


C'est ensuite dans le fichier "resource.rc" que nous allons écrire le code permettant d'inclure cette icône à notre projet. Ainsi nous écrivons :

MABELLEICONE ICON "prof.ico"

Explication :

"MABELLEICONE" est un identifiant inventé ici pour désigner mon icone. "ICON" est le code obligatoire à écrire, et vous l'avez compris "prof.ico" est le nom de mon fichier icône.

C'est tellement simple que je suis étonné de ne voir aucune erreur apparaître lors de la compilation. Pourtant je dois me rendre à l'évidence, le programme a maintenant son icône. Si je fais un clic droit, puis "Envoyer vers", et ensuite "Bureau (créer un raccourcis", c'est bien cette icône qui apparait.
Cliquons sur l'icône du bureau :

Surprise !!! Mon petit prof n'est pas l'icône en haut à gauche de ma fenêtre. C'est normal ?
Tout à fait, il faut deux icônes pour un programme. Celle que nous venons de créer et une autre de format plus petit qui sera placée dans la barre de titre. Cette dernière fait 30 pixels de hauteur. Si l'icône est plus grande, elle sera compressée avec une perte de sa lisibilité.
J'ai donc créé une petite icône que j'ai placé au même endroit que la première : dans le dossier de notre projet.
Recherchons ensuite la fonction "WinMain() qui se trouve dans le fichier "main.cpp". A l'intérieur de la fonction "WinMain" nous allons modifier la deuxième fonction LoadIcon(). Nous écrivons :

wincl.hIconSm = LoadIcon (hThisInstance, (LPCSTR)MAPETITEICONE);

Le premier paramètre est une instance. C'est le nom donné dans la première ligne de la fonction WinMain(). Le deuxième paramètre est un pointeur de type "LPCSTR". Dans le fichier "resource.rc" j'ai choisi d'identifier la deuxième icône par "MAPETITEICONE". C'est donc cette information que nous donnerons à notre pointeur.
A ce stade une compilation donnerait une erreur car WinMain() ne connait pas encore "MAPETITEICONE". C'est là qu'intervient notre fichier "resource.h" dans lequel nous écrivons :

#define MABELLEICONE  100   // icône principale
#define MAPETITEICONE 101   // icône pour la barre de titre

Les nombres sont choisis arbitrairement. Ils doivent simplement être différents.
Le code complet du fichier "resource.rc" devient alors :

#include "resource.h"

MABELLEICONE ICON "prof.ico"
MAPETITEICONE ICON "profsmall.ico"

C'est presque terminé, il ne reste donc plus qu'une chose à faire c'est ?
Ajouter l'inclusion du fichier "source.h" dans le fichier "main.cpp". Nous écrivons donc le code suivant à la suite des "include" figurant en haut du programme.

#include "resource.h"

Une fois compilé nous obtenons :

3. Le BUG "no resources"

Il se manifeste par le message suivant :
no resources
=== Build failed: 1 error(s), 0 warning(s) (0 minutes(s), 0 second(s)) ===
Vérifiez si vous n'avez pas oublié de mettre les icones dans votre dossier. Vérifiez également tous les "#include ...".