Powerbuilder pour les completement Geeks !

Le forum (ô combien francophone) des utilisateurs de Powerbuilder.

Recherche rapide

Annonce

Certaines rubriques, dont des cours, sont uniquement visibles par les membres du forum ^^.
Dans la rubrique Liens & Références, vous avez accès à un sommaire de téléchargement, profitez-en !
Il existe maintenant un nouveau TOPIC "Votre CV en Ligne" accessible uniquement par demande.

#1 12-05-2010 12:03:50

seki  
0x73656B69
Award: bf
Lieu: Vittoncourt & Luxembourg
Date d'inscription: 20-11-2008
Messages: 1121
Pépites: 4,296,080,220
Banque: 9,223,372,036,854,775,808
Site web

[RESOLU] retrouver un menuitem par son id

Bonjour,

sur une fenêtre, dans un évènement mappant pbm_menuselect j'aimerais retrouver le menuitem de mon menu à partir du itemid fourni en paramètre de l'évènement.

Pour ce que j'ai retrouvé dans MSDN, cet évènement pbm_menuselect est le pendant de WM_MENUSELECT avec
- itemid = LOWORD(wParam) -> l'item ou l'index de menu
- flags = HIWORD(wParam) -> infos supplémentaires clic de souris, menu coché, menu système...
- hmenu = lParam -> le handle de menu

En traçant j'ai par exemple itemid = 10029 mais comment retrouver que c'est m_main.m_file.m_exit ?
Je ne retrouve pas cet id (10029) dans mes éléments de menu, il va falloir passer par de la glu API ??

Dernière modification par seki (12-05-2010 18:52:37)


The best programs are the ones written when the programmer is supposed to be working on something else. - Melinda Varian

Mes réponses PB sur StackOverflow
http://stackoverflow.com/users/flair/317266.png

Hors ligne

 

#2 12-05-2010 18:52:20

seki  
0x73656B69
Award: bf
Lieu: Vittoncourt & Luxembourg
Date d'inscription: 20-11-2008
Messages: 1121
Pépites: 4,296,080,220
Banque: 9,223,372,036,854,775,808
Site web

Re: [RESOLU] retrouver un menuitem par son id

Résultat des recherches : ce n'est pas possible de retrouver directement quel est le menuitem quand on a son ID.

Par contre on peut quand même arriver à quelque chose avec un peu d'API windows.

Dans mon cas, je souhaitais savoir si le message WM_MENUSELECT concernait ma commande pour quitter l'application (dernier item du menu Fichier). Le code suivant permet d'arriver à un résultat :

Code: pb

//dans les local external functions 
function ulong GetMenu(ulong hWindow) library "user32.dll"
function ulong GetSubMenu(ulong hMenu, ulong pos) library "user32.dll"
function ulong GetMenuItemCount(ulong hMenu) library "user32.dll"
function ulong GetMenuItemID(ulong hMenu, ulong item) library "user32.dll"

//en variable d'instance
ulong iul_exitmenuitem

ulong lul_mainmenu, lul_mfile
ulong lul_exitid
ulong lul_count

lul_mainmenu = GetMenu(handle(this))
lul_mfile = GetSubMenu(lul_mainmenu, 0) // file = premier menu
lul_count = GetMenuItemCount( lul_mfile )
lul_exitid = GetMenuItemId( lul_mfile, lul_count - 1) iul_exitmenuitem = lul_exitid


debug_message(classname()+"::oe_menuselect", string(itemid) + " : 0x" + tohexstring(flags))
if itemid = iul_exitmenuitem then debug_message(classname()+"::oe_menuselect", "Menuitem exit !")


Si on cherche un élément particulier, apparemment il n'y a pas d'autre solution en PB que de parcourir les menus (via l'API win32) et de comparer son texte, ou son tag si on y mets une valeur remarquable


The best programs are the ones written when the programmer is supposed to be working on something else. - Melinda Varian

Mes réponses PB sur StackOverflow
http://stackoverflow.com/users/flair/317266.png

Hors ligne

 

Pied de page des forums

Propulsé par FluxBB 1.2.22