Home>プログラミング講座>Mac C 講座> 第五回 メニュー

Mac C 講座 第五回 メニュー


 今回はメニューについてです。

 まず、メニューはリソースを使うのが楽です。まず、第一回で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にしてください。
	}
}
					

[<前の回へ] [次の回へ>]


[Mac C講座]
[プログラミング講座]
[Home]