Home>プログラミング講座>Mac C 講座>第九回 終わりに〜まとめ

Mac C 講座 第九回 終わりに〜まとめ


 もう八回も書いたikasmeのMac C講座も今回で最終回。まとめとして、第三章から第八章までをまとめてアプリケーションのフレームらしきものを作ります。
  ソースコードとリソースファイルをダウンロードする(StuffIt形式)




Boolean	gDone = false;

void	ToolboxInit( void );
void	WindowInit( void );
void	MenuBarInit( void );
void	EventLoop( void	);
void	HandleMouseDown( EventRecord* event );
void	HandleMenuChoice( long menuChoice );
void	HandleAppleChoice( short item );
void	HandleFileChoice( short item );
void	DoUpdate( EventRecord* event );

void	main( void )
{
	ToolboxInit();
	WindowInit();
	MenuBarInit();

	EventLoop();
}

void	ToolboxInit()
{
	InitGraf( &qd;.thePort );
	InitFonts();
	InitWindows();
	InitMenus();
	TEInit();
	InitDialogs( NULL );
	InitCursor();
}

void	WindowInit()
{
	WindowPtr	win;

	win = GetNewWindow( 128, NULL, (WindowPtr)-1L );
	ShowWindow( win );
}

void	MenuBarInit( void )
{
	Handle		menuBar;
	MenuHandle	menu;

	menuBar = GetNewMBar( 128 );
	SetMenuBar( menuBar );

	menu = GetMenuHandle( 128 );
	AppendResMenu( menu, 'DRVR' );

	DrawMenuBar();
}

void	EventLoop( void )
{
	EventRecord*	event;
	char		theChar;
	
	event = (EventRecord*)NewPtr( sizeof( EventRecord ) );
	
	while( !gDone )
	{
		WaitNextEvent( everyEvent, event, 20L, NULL );

		switch( event->what )
		{

			case	mouseDown :
				HandleMouseDown( event );
				break;
			case	keyDown :
				case	autoKey:
				theChar = event->message & charCodeMask;

				if( ( event->modifiers & cmdKey ) != 0 )
				{
					HandleMenuChoice( MenuKey( theChar ) );
				}
				break;
			case	updateEvt :
				DoUpdate( event );
				break;
		}
	}
}

void	HandleMouseDown( EventRecord* event )
{
	WindowPtr	window;
	short		thePart;
	GrafPtr		oldPort;
	long		windSize;
	long		menuChoice;
	
	thePart = FindWindow( event->where, &window; );

	switch( thePart )
	{

		case	inSysWindow :
			SystemClick( event, window );
			break;
		case	inMenuBar :
			menuChoice = MenuSelect( event->where );
			HandleMenuChoice( menuChoice );
			break;
		case	inContent :
			SelectWindow( window ); 
			break;
		case	inDrag :
			DragWindow( window, event->where, &qd;.screenBits.bounds );
			break;
		case	inGoAway :
			if( TrackGoAway( window, event->where ) )
			{
				DisposeWindow( window );
			}
			break;
		//case	inGrow :
			//break;
		//case	inZoomIn :
		//case	inZoomOut :
			//break;
	}
}

void	HandleMenuChoice( long menuChoice )
{
	short	menu;
	short	item;

	if( menuChoice != 0 )
	{

		menu = HiWord( menuChoice );
		item = LoWord( menuChoice );

		switch( menu )
		{
			case	128:
				HandleAppleChoice( item );
				break;
			case	129:
				HandleFileChoice( item );
				break;
		}
		
		HiliteMenu( 0 );
	}
}

void	HandleAppleChoice( short item )
{
	MenuHandle	appleMenu;
	Str255		accName;
	short		accNumber;

	switch( item )
	{
		case	1:
			NoteAlert( 128, NULL );
			break;

		default:
			appleMenu = GetMenuHandle( 128 );
			GetMenuItemText( appleMenu, item, accName );
			accNumber = OpenDeskAcc( accName );
			break;
	}
}

void	HandleFileChoice( short item )
{
	switch( item )
	{
		//case	X: //XはQuitのアイテム番号
			//gDone = true;
			//break;
	}
}

void	DoUpdate( EventRecord* event )
{
	WindowPtr	window;

	window = (WindowPtr)event->message;

	BeginUpdate( window );

		//描画処理

	EndUpdate( window );
}

 ながく御付き合いいただいたikasmeのMac C講座初級編。いかがだったでしょうが? 何かの参考にしていただければ幸いです。

 それでは、Mac Cのプログラミング、頑張ってください!

[<前の回へ]


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