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;