0
안녕하세요 저는 팝업 메뉴를 사용해야합니다. 마녀는 동적으로 생성됩니다.MenuRef GetControl32BitValue 항상 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);
올바른 메뉴는 항목 수를 올바르게 표시합니다. 나는 최대 값을 설정했다.
내가 선택한 항목 인덱스를 가져올 때 내 문제가 발생합니다. 이를 위해 , 내가
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 !!!!!
}
}
내가 뭔가를 놓친나요 현물 kEventClassMenu 이벤트 &을 kEventMenuClosed 사용할 수 있습니까? 그것을 첨부하는 것이 올바른 행사입니까?
많은 도움에 감사드립니다.
감사합니다.하지만이 코드는 (4-char 코드 생성)을 피하고 싶습니다. 실제로 인덱스가 필요합니다. – Ziggy
요점을 놓치 셨습니다. commandID는 단순히 32 비트 int (UInt32)입니다. 인터페이스 빌더를 사용하여 만든 메뉴 항목에 의미있는 4-char 코드를 사용하는 것이 일반적이지만, 순차적 정수를 사용할 수없는 이유는 없습니다. –
알았어, 조언 주셔서 감사합니다. – Ziggy