System7以降サポートされたポップアップメニュー(procID=1008のコントロール)からMenuHandleへのアクセスは
- コントロールのコントロールハンドルを取得
- コントロールハンドルのcontrlDataとして収められているpopupPrivateDataHandleを取得
- popupPrivateDataHandleのmHandleを取得
といった感じで行う必要があります。
簡単な例
// GetDialogPopup(DialogRef dlog, short item)
// 与えられたダイアログとアイテムナンバーからMenuHandleを返す
MenuHandle GetDialogPopup(DialogRef dlog, short item){
MenuHandle pupup;
ControlHandle cntl;
short type;
Rect rect;
GetDialogItem(dlog, item, &type, (Handle*)cntl, &rect);
popup = (*(popupPrivateDataHandle)((*cntl)->contrlData))->mHandle;
return popup;
}
ちなみに、メニューのn番目の項目を選択した状態にするには
SetCtlValue(cntl, n);
メニューの現在選択されている項目を得るには
n = GetCtlValue(cntl);
と、コントロールハンドルだけで操作できます。
戻る