もう八回も書いた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のプログラミング、頑張ってください! |