今回はメニューについてです。 まず、メニューはリソースを使うのが楽です。まず、第一回でWINDリソースの作り方を教えましたね。そこで一番最初に出てきた変なダイアログにWINDではなくMENUと書いてください。そうして、一番上のウインドウのところで、適当に作ってください。まず、左側のテキストボックスにメニュータイトル入れてください。また、ラジオボタンをリンゴマークの方にすればアップルメニューにできます。リターンで新しいアイテムを作ります。さっきの右側のテキストボックスが空になりましたね。そこに、アイテム名を入れてください。右下の方のCmd-Keyのところに英字一文字を入れてください。そうすれば、コマンド+入れた英字一文字でそのメニューを選択するショートカットを作れます。(Quitなどのように)その仕方はキーボードの回にまわします。また、ラジオボタンを・・・・・・・・・の方に切り替えれば、区切り線を作れます。 この要領で、いくつかのメニューのリソースをつくり、そのリソース番号をMBARリソースに記述します。そうしないと、メニューバーに表示できません。(ソースコードの方で、MBARリソースを読み出して、それに基づいて、MENUリソースを読み出します。 )まず、コマンド+Kで例のダイアログを出します。そして、そのテキストボックスにMBARと書いて、OKボタンを押してください。そして、1)*****をクリックして、もう一回コマンド+Kをしてください。Menu Res IDの右側のテキストボックスに最初に作ったMENUリソースのリソースID(128から始まっているはずです。)次に2)*****の所をクリックして、コマンド+K。作ったMENUリソースの数だけこのような処理を繰り返してください。 これで、リソースの記述は終わり。それではソースコードに行きましょう。まず、前回のHandleMouseDown()の変数宣言の中に、long menuChoice;を追加してください。そして、HandleMouseDown()の中のswitch( thePart )の選択肢の中にcase inMenuBar :を追加してください。 case inMenuBar : menuChoice = MenuSelect( event->where ); HandleMenuChoice( menuChoice ); break; EventLoopに入る前に、MenuBarInit()を作ってください。 void MenuBarInit( void ) { Handle menuBar; MenuHandle menu; menuBar = GetNewMBar( 128 ); //128はMBARのリソースID。SetMenuBar( menuBar ); menu = GetMenuHandle( 128 ); //128はアップルメニューのMENUのリソースID。 AppendResMenu( menu, 'DRVR' ); //システムフォルダのアップルメニューの中身を //アップルメニューに追加する。 DrawMenuBar(); } さっき、case inMenuBarの時に書いたHandleMenuChoceという関数を作っ てください。 void HandleMenuChoice( long menuChoice ) { short menu; short item; if( menuChoice != 0 ) { menu = HiWord( menuChoice ); item = LoWord( menuChoice ); switch( menu ) { case 128: //128はアップルメニューのMENUのリソースID。 HandleAppleChoice( item ); break; case 129: //128はFileメニューのMENUのリソースID。 HandleFileChoice( item ); break; } HiliteMenu( 0 ); //ハイライトの解除。 } } void AppleChoice( short item ) { MenuHandle appleMenu; Str255 accName; short accNumber; switch( item ) { //case X: //この辺はアイテムの一番上を1として、一つ下になった //ら数を1つ足してください。そして、自分のしたい処 //理。アラートの表示などをさせてください。 //brreak; default: //ここから下は、自分が作ったものではなく、アップル //メニューフォルダ内の項目。自分が作ったものは必ず //上の方で書いてください。書かないと、結構やばいこと //になるでしょう。 appleMenu = GetMenuHandle( 128 ); GetMenuItemText( appleMenu, item, accName ); accNumber = OpenDeskAcc( accName ); //これはアップルメニューフォルダ内の項目の処理。 //このまま使ってください。 break; } } void HandleFileChoice( short item ) { switch( item ) { //省略。Quitの番号のところで、gDoneを //trueにしてください。 } } |