Accueil
Rechercher:
sur developpez.com sur les forums
Forums | Tutoriels | F.A.Q's | Participez | Hébergement | Contacts
Club Emploi Blogs   TV   Dév. Web PHP XML Python Autres 2D-3D-Jeux Sécurité Windows Linux PC Mac
Accueil Conception Java DotNET Visual Basic  C  C++ Delphi MS-Office SQL & SGBD Oracle  4D  Business Intelligence
FORUMS C FAQs C TUTORIELS C LIVRES C COMPILATEURS C SOURCES GTK+

Tutorial d'initiation
A la programmation avec l'API Windows

Tutorial d'initiation a la programmation Windows avec Microsoft Visual C++
PrécédentIndexSuivant

Chapitre 3

Les fenêtres

17. Menus

Cours théorique :

Il existe deux manières d'insérer des menus dans une application. La première méthode est de créer un menu grâce à un éditeur de ressources puis de l'insérer dans le programme. La seconde méthode est dynamique, grâce aux fonctionnalités de l'API Windows. De manière générale, les menus obtenus par des ressources seront utilisés pour les menus principaux des fenêtres, pour créer des barres de menus. Pour les menus contextuels, boîtes à outils, ..., il est préférable d'utiliser des menus dynamiques. A chaque clic dans un des menus, la fenêtre possédant le menu reçoit un message WM_COMMAND indiquant l'identifiant de l'option choisie.

Pour obtenir une barre de menus à partir d'un fichier de ressources, il suffit de créer le menu dans l'éditeur de ressources puis de passer son identifiant au membre lpszMenuName de la structure WNDCLASSEX. Le menu sera inséré automatiquement dans la fenêtre.

Pour un menu dynamique, on utilisera l'API Windows. Les menus sont identifiés par une variable HMENU. Il faut tout d'abord créer le menu. Il sera initialement vide. Pour cela, il faut utiliser la fonction CreatePopupMenu(). Une fois le menu créé, on peut lui ajouter des éléments (options, sous menus, séparateurs) avec les fonctions AppendMenu() ou InsertMenuItem(). Une fois le menu créé, il faut le dessiner. Pour cela, on utilise les fonctions TrackPopupMenu() ou TrackPopupMenuEx(). Pour une boîte à outils, il suffira de dessiner le menu à la position courante obtenue par un appel à GetCursorPos(). Si le menu est associé à une fenêtre, il sera supprimé automatiquement lors de la destruction de la fenêtre. Dans le cas contraire, l'application doit appeler la fonction DestroyMenu() pour libérer les ressources.

La fonction suivante dessine un menu contextuel :

void PrintMenu(HWND hWnd)
{
  HMENU hMenu;
  POINT pt;
  GetCursorPos(&pt);
  hMenu=CreatePopupMenu();
  AppendMenu(hMenu,MF_STRING,1,"Item 1");
  AppendMenu(hMenu,MF_STRING,2,"Item 2");
  AppendMenu(hMenu,MF_SEPARATOR,NULL,NULL);
  AppendMenu(hMenu,MF_STRING,3,"Item 3");
  TrackPopupMenu(hMenu,NULL,pt.x,pt.y,0,hWnd,NULL);
}

Dans cet exemple, les valeurs 1, 2 et 3 passées à AppendMenu() représentent les identifiants des options. Ces valeurs seront passées en paramètre lors de l'envoi du message WM_COMMAND. Elles n'ont aucune signification particulière, si ce n'est pour le programmeur lui même.


PrécédentIndexSuivant

Responsable bénévole de la rubrique C : Arnaud Feltz (buchs) - Contacter par EMail :
Vos questions techniques : forum d'entraide C - Publiez vos articles, tutoriels et cours
et rejoignez-nous dans l'équipe de rédaction du club d'entraide des développeurs francophones
Nous contacter - Copyright © 2000-2008 www.developpez.com - Legal informations.