LCC-Win32 Introduction - Installation Utilitaires personnels pour
LCC-Win32
Un programme ayant une interface graphique, va se décomposer en 2 parties :
La création d'un projet en GUI, quel qu'il soit, ressemble
beaucoup à un projet en mode console. La différence
se situe uniquement (dans la configuration du projet) au niveau
du 'type' de projet. Pour une application 'graphique', on choisira
'Windows executable'. ![]() Configuration de base du projet
Wedit va indiquer qu'aucune ressource n'est définie.
Au début, cela n'importera pas. Dans tous les cas, ces
paramètres peuvent toujours être modifiés
par la suite dans project - configuration. La création de l'interface graphique
fait intervenir un certain nombre de notions de fenêtres,
contrôles, etc. Il est tout de même possible de
réaliser quelques exemples simples.
Hello World en GUI Ici, rien de spectaculaire, on va se contenter d'afficher une fenêtre pré-définie dans Windows.
Résultat de l'exécution On peut remarquer qu'on se contente d'inclure
windows.h qui contient un très grand nombre de
définitions de fonctions et de constantes. Le point d'entrée
n'est plus void main(); mais int WINAPI WinMain(...);
Il s'agit d'une caractéristique d'un programme GUI. Une autre caractéristique apparaît ici ... la
nécessité d'avoir un minimum de documentation
pour pouvoir programmer en Win32. La recherche s'effectue par 'index' lorsque l'on connait le nom de la fonction que l'on cherche. Si on ne connait pas le nom, le problème devient plus difficile. Soit on peut rechercher en texte brut, soit on peut essayer de le deviner ... Ici, on peut trouver de l'aide sur WinMain (explication
du rôle, des paramètres, etc) et sur MessageBox
(les différents paramètres, les différentes
valeurs possibles). Un exemple d'utilisation de ressources L'exemple précédent reste très limité. Pour pouvoir définir une boîte bien plus complète, on va utiliser une ressource. C'est à dire que l'on va décrire la boîte dans un fichier de ressource (.RC). Il sera ensuite possible d'afficher cette boîte au moment voulu. Les fichiers de ressource sont des fichiers texte. Il est possible de les écrire à la main ou d'utiliser un éditeur de ressources pour les créer. C'est exactement ce qu'on va utiliser ici. L'éditeur de ressources peut soit être démarré depuis Wedit, soit à l'extérieur. Bien qu'il soit plus facile de le démarrer depuis Wedit, il est préférable de le démarrer depuis l'extérieur, car un plantage de l'éditeur de ressources n'entraînera pas la fermeture de Wedit. Cet éditeur de ressources s'appelle WeditRes. Il se trouve dans le répertoire 'bin' de LCC-Win32 et est nommé WeditRes.exe. Son lancement donne la fenêtre suivante : WeditRes On crée une nouvelle ressource par File - New. La boîte suivante apparaît : Nouveau Projet On y indique le nom du répertoire du projet et le nom (sans extension) du fichier de ressources (ici : RES). Il est directement proposé de créer une nouvelle boîte de dialogue : Créatiuon d'une boîte de dialogue Le nombre de possibilités ne doit pas effrayer
... On obtient une boite vide : Boîte nouvellement crée Il est possible de la remplir à loisir grâce à la palette d'outil disponible à côté. Pour l'essai se contenter des éléments présentés dans l'exemple en dessous : Palette d'outil Boîte remplie ... Une fois cette boîte crée, on peut sauvegarder le fichier de ressources. Un petit détour par File - Files sera nécessaire pour indiquer la liste des fichiers à générer : Fichiers à générer On choisira ici, uniquement 'Définitions and prototypes (.h)' et 'RC ASCII Resource File (.rc)'. Après sauvegarde, il faudra inclure le fichier RES.RC dans la liste des fichiers du projet par Projet - Add/Delete Files dans Wedit. Le code associé est le suivant :
On inclus le fichier res.h, généré par WeditRes. Ce fichier contient les constantes que l'on a défini dans la boîte (ici : IDD_MAIN). La création de la boîte est lancée par DialogBox. On lui passe le nom de la ressource par MAKEINTRESOURCE(IDD_MAIN), on lui indique aussi le nom d'une fonction (ici DialogProc), qui sera appelée à chaque fois qu'un événement se produit dans la boîte. Ici cette fonction se contente de gérer la fermeture de la boîte lorsque l'on clique sur la croix (EndDialog). Un exemple de création directe Cet exemple pourrait être vu en opposition avec l'utilisation de ressources. En réalité, il est très rare de créer complètement les boîtes depuis le programme. L'utilisation de ressources apporte une aide précieuse, et la création directe est utilisée en complément pour réaliser ce qu'il n'est pas possible de réaliser à partir d'une ressource.
Création Directe Ici, on crée directement une boîte (un contrôle) de type 'EDIT'. Ce contrôle constitue à lui seul une fenêtre. Il n'y a plus de ressources. En réalité, il n'est jamais utilisé tel quel mais toujours en tant qu'élément enfant (CHILD) dans une autre fenêtre. Une fois ce contrôle créé, l'exécution
continue contrairement à la boite de dialogue où
Windows attend que la boîte soit fermée pour continuer.
La boucle while sert à envoyer les messages qui
arrivent (GetMessage) à la fonction qui gère
les messages (DispatchMessage). La fonction qui gère
les messages est propre à la boîte (ou au contrôle).
Dans le cas de la boite de dialogue, la boucle de message formée ici par le while était cachée dans le DialogBox.
Un exemple de création directe personnalisée Il est aussi possible de définir son propre contrôle ou sa propre boîte. L'exemple qui suit le montre :
Création d'une boîte personnalisée Le code devient plus compliqué. En enregistrant cette classe, on crée un nouveau type de fenêtre (mais pas une fenêtre, juste un type). On crée ensuite, comme au-dessus, une fenêtre (CreateWindow), mais cette fois du type que l'on vient de définir. Utilitaires personnels pour LCC-Win32 Liens associés : LCC -Win32 |