Bonjour, j'ai besoin d'un menu contextuel créé dynamiquement.MenuRef GetControl32BitValue retourne toujours 0
OSErr err = GetBevelButtonMenuHandle(m_pRecallAOptionalButton, &m_pRecallAMenuRef);
for (countitem)
{
String szItem (List.GetAt(i));
CFStringRef sz = ToCFStringRef(szItem);
AppendMenuItemTextWithCFString(m_pRecallAMenuRef, sz, 0, 0, 0);
}
short sCount = CountMenuItems(m_pRecallAMenuRef);
SetControl32BitMaximum(m_pRecallAOptionalButton, sCount);
Ceci est correct, menu affiche le nombre correct d'éléments. Je définis la valeur maximale.
Mon problème se produit lorsque je veux obtenir l'index d'élément sélectionné. Pour cela, j'utilise l'événement kEventClassMenu & kEventMenuClosed type
case kEventClassMenu:
{
MenuRef Menu;
GetEventParameter(inEvent, kEventParamDirectObject, typeMenuRef, NULL, sizeof(Menu), NULL, &Menu);
if (Menu && (Menu == pMainForm->m_pRecallAMenuRef))
{
SInt32 nIndex = GetControl32BitMaximum(m_pRecallAOptionalButton); // return the correct items count
nIndex = GetControl32BitValue(m_pRecallAOptionalButton); // always return 0 !!!!!
}
}
Ai-je raté quelque chose? est-ce le bon événement à attacher?
Un grand merci pour votre aide.
Merci, mais ce que je voudrais éviter (générant un code de 4 caractères), j'ai vraiment besoin d'un index. – Ziggy
Il vous manque le point: le commandID est simplement un int 32 bits (UInt32). Bien qu'il soit classique d'utiliser des codes à 4 caractères significatifs pour les éléments de menu créés à l'aide de l'outil de création d'interface, il n'y a aucune raison de ne pas utiliser d'entiers séquentiels si cela vous convient. –
Comment ok, merci pour le conseil, sonne mieux comme ça :) – Ziggy