MenuRef GetControl32BitValue всегда возвращает 0 - PullRequest
0 голосов
/ 11 мая 2010

Здравствуйте, мне нужно использовать всплывающее меню, ведьма создается динамически.


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);

Это нормально, меню показывает правильное количество предметов. Я установил максимальное значение.

Моя проблема возникает, когда я хочу получить индекс выбранного элемента. Для этого я использую событие kEventClassMenu & kEventMenuClosed kind


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 !!!!!
    }
}

Я что-то пропустил? это правильное событие для прикрепления?

Большое спасибо за помощь.

1 Ответ

0 голосов
/ 11 мая 2010

Возможно, вы хотите обработать kEventClassCommand / kEventProcessCommand и использовать идентификатор команды из пункта меню.

HICommand           command;

GetEventParameter( inEvent, kEventParamDirectObject, typeHICommand, NULL,
            sizeof( HICommand ), NULL, &command );

switch (command.commandID) {
    case 1:
      ... etc ...

Обратите внимание, что идентификатор команды является одним из параметров AppendMenuItemTextWithCFString; таким образом вы можете назначить каждому элементу уникальный идентификатор команды при создании меню. CommandID - это 4-символьные коды (например, «open» или «save»), но нет никаких причин, по которым вы не можете использовать простые целые числа для динамически генерируемых команд.

...