Menus popup flottants

 

 

Les menus popup flottant sont des menus que l'on peut faire apparaître n'importe où.
Cette option est souvent utilisée sur un clique droit de la souris. Dans ce cas, un menu apparaît à la position de la souris.
Cette possibilité d'afficher un menu flottant n'importe où se fait grâce à la fonction TrackPopupMenu()

BOOL TrackPopupMenu(

HMENU hMenu,
UINT uFlags,
int x,
int y,
int nReserved,
HWND hWnd,
HWND prcRect
);

En entrée:

hMenu qui est le handle du menu
uFlags 0 ou une valeur suivante:

Valeur Désignation
TPM_CENTERALIGN Centrer le menu par rapport à x et la taille maxi qu'occupe le menu horizontalement
TPM_LEFTALIGN La partie gauche du menu commence en x
TPM_RIGHTALIGN La partie droite du menu se termine en x
TPM_BOTTOMALIGN La partie basse du menu se termine en y
TPM_TOPALIGN La partie haute du menu commence en y
TPM_VCENTERALIGN Centrer le menu par rapport à yet la taille maxi qu'occupe le menu verticalement
TPM_NONOTIFY Ne pas envoyer de message si l'utilisateur clique sur une option (?)
TPM_RETURNCMD Retourne l'identificateur de menu sélectionné par l'utilisateur
TPM_LEFTBUTTON La sélection d'une option de menu ne peut se faire qu'avec le bouton gauche
TPM_RIGHTBUTTON La sélection d'une option de menu peut se faire avec le bouton gauche et droit
TPM_HORNEGANIMATION Affiché le menu en animant le menu de droite à gauche
TPM_HORPOSANIMATION Affiché le menu en animant le menu de gauche à droite
TPM_NOANIMATION Affiché le menu sans animation
TPM_VERNEGANIMATION Affiché le menu en animant le menu de bas en haut
TPM_VERPOSANIMATION Affiché le menu en animant le menu de haut en bas

 

Remarque: Pour les animations, il faut positionner SPI_SETMENUANIMATION. Toutes les animations seront ignorées si le menu fade est actif.

Vous pouvez connaître cette information par SPI_GETMENUFADE.

x abscisse en coordonnée écran.

y ordonnée en coordonnée écran.

nReserved à 0, réservé !

hWnd Handle de la fenêtre propriétaire du menu. Cette fenêtre recevra les messages

prcRect Ignoré !

En sortie, si vous indiquez TPM_RETURNCMD dans uFlag, la valeur sera le menu sélectionné. Sinon, si l'utilisateur abandonne, ou qu'une erreur se produit, la fonction retourne 0.

Si vous n'avez pas indiqué TPM_RETURNCMD, la fonction retourne 0 si erreur.

Exemple d'apparition de menu sur le clique droit:

CASE WM_CREATE:

// Création d'un menu
hMenu = LoadMenu (hInst, nom du menu);
hMenu = GetSubMenu (hMenu,0);

CASE WM_RBUTTONDOWN:

// Sur clique droit de la souris, on dessine le menu flottant à la position du curseur de la souris.
point MAKEPOINT (lParam);
ClientToScreen (hwnd, &point);

TrackPopupMenu(hMenu, 0, point.x, point.y, 0, hwnd, NULL);
return 0;