Le forum (ô combien francophone) des utilisateurs de Powerbuilder.
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)

Hors ligne
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 :
//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

Hors ligne