• 북마크
  • 추가메뉴
어디로 앱에서 쉽고 간편하게!
애플 중고 거래 전문 플랫폼
오늘 하루 보지 않기
KMUG 케이머그

팁사용기

[팁] Xcode 2.2 에서 카본 프로그램 만들자 (1)

본문

Xcode 새 버젼의 카본 어플리케이션 템플릿이 좀 더 친절해졌더군요. 한편, 지금까지 자기 고유의 이벤트 핸들러를 갖고 계시던 분들에게는 더 힘들어 졌더군요. ㅠㅠ

자 해 봅시다.

일단. Xcode 를 실행하고, File->New Project 를 선택합니다. Assistant 에서 Application 에 있는 Carbon Application 을 선택합니다. 프로젝트 이름과 디렉토리를 물어보겠죠? 보통 Documents 폴더 안에 넣으시던데, 제 경우는 Projects 라는 폴더를 새로 만들어서 그곳에 따로따로 집어넣는 편입니다. 이것은 취향에 맞게... 하시고... ㅎㅎㅎ

예전 버젼까지는 그냥 main.c 에 윈도우 하나 열면 끝이었는데, 이번에는 새로운 함수가 그 밑에 주렁 주렁 달려있는 것을 보실 겁니다.

AppEventHandler()
WindowEventHandler()

카본 프로그램을 짠다 하면 당근 필수요소로 필요한 이 두 핸들러가 추가되어 있습니다. 자세한 내용은 각자 알아서... ㅡㅡ;;;

자, 그러면 이제 윈도우에 뭔가 그림을 그리고 싶은 강렬한 욕구를 느끼시는 분을 위한 특별 이벤트...

두둥~

ㅡㅡ;;;

프로젝트 창에 보시면 main.nib 라는 것이 있습니다. NIB 는 NextStep Interface Builder 의 약자입니다. 그 옛날 넥스트 스탭에서부터 물려 내려온 유산입죠. 더블클릭 하시면 인터페이스 빌더가 실행되겠지요. 툴 창에 보시면 세 번째 아이콘이 Carbon Enahnced Controls 입니다. 이 중에서 HIView 라는 놈을 끌어다가 메인 윈도우에 놓으십시오. 그리고 끌어다놓은 HIView 오브젝트를 선택하신 다음 "쉬프트+사과+I" 를 누르세요. 그러면 Inspector 라는 창이 열리게 됩니다. 리스트 두 번째 것이 Control 인데요. 거기서 Signature 와 ID 를 집어넣으세요. 제가 올리는 예제에서는 mVue, 130 입니다.

작업이 끝나셨으면 사과+S 하셔서 세이브 하시고 사과+Q 로 인터페이스 빌더를 빠져나갑니다.

그림 그려주는 루틴들은 메인 루틴하고 따로 떨어뜨려 놓는 것이 깔끔하고 보기 좋겠지요? 그 전에 main.c 의 HandlerNew() 라는 이름의 함수에 약간의 변경이 필요합니다. 이렇게 합니다.

    // Install a command handler on the window. We don't use this handler yet, but nearly all
    // Carbon apps will need to handle commands, so this saves everyone a little typing.

    InstallWindowEventHandler( window, GetWindowEventHandlerUPP(),
                               GetEventTypeCount( kWindowEvents ), kWindowEvents,
                               window, NULL );

// 이것이 새로 집어넣은 이벤트 핸들러 등록 루틴 ***
        InstallMyDraw( window ) ;
        
    // Position new windows in a staggered arrangement on the main screen
    RepositionWindow( window, NULL, kWindowCascadeOnMainScreen );
    
    // The window was created hidden, so show it
    ShowWindow( window );


그리고 main.c 맨 위에, #include <Carbon/Carbon.h> 바로 밑에 다음과 같이 넣습니다.

#include <Carbon/Carbon.h>

#include "MyDraw.h"


그러면 이제부터는 MyDraw.c 를 만들 차례지요. 프로젝트 창에 "Sources" 라는 폴더를 선택한 상태에서 File->New File 을 선택합니다. 그러면 새로 파일 등을 프로젝트에 추가할 수 있는 창이 나옵니다. 거기서 Carbon 리스트의 C File 을 선택합니다. 그리고 이름을 MyDraw.c 로 합니다. 덤으로 MyDraw.h 도 같이 만들어 달라고 합니다.

이제 다음의 소스를 복사해 넣으세요. ㅡㅡ;;;


--- MyDraw.h ---

#include <Carbon/Carbon.h>


void InstallMyDraw( WindowRef window ) ;
OSStatus MyDrawEventHandler( EventHandlerCallRef myHandler,
                                                                        EventRef event,
                                                                        void *userData ) ;
void MyDraw( WindowRef window ) ;


--- MyDraw.c ---

#include "MyDraw.h"

HIViewRef myHIView ;

void InstallMyDraw( WindowRef window )
{

        HIViewID myHIViewID = { 'mVue', 130 } ;
        EventTypeSpec        myHIViewSpec[] = {
        { kEventClassControl, kEventControlDraw },
        } ;
        OSStatus err ;
        
        HIViewFindByID( HIViewGetRoot( window ), myHIViewID, &myHIView ) ;
        
        err = InstallEventHandler( GetControlEventTarget( myHIView ),
                                                           NewEventHandlerUPP( MyDrawEventHandler ),
                                                           GetEventTypeCount( myHIViewSpec ),
                                                           myHIViewSpec,
                                                           (void *)myHIView,
                                                           NULL ) ;
        
}


OSStatus MyDrawEventHandler( EventHandlerCallRef myHandler,
                                                                        EventRef event,
                                                                        void *userData )
{

        OSStatus err = eventNotHandledErr ;
        
        switch( GetEventClass( event ) ) {
                case kEventClassControl :
                {
                        switch( GetEventKind( event ) )
                        {
                                case kEventControlDraw:
                                        MyDraw( (WindowRef)userData ) ;
                                        break ;
                        }
                        break ;
                }

                default:
                        break ;
        }
        
        return err ;
        
}


void MyDraw( WindowRef window )
{
        
        Point        thePenSize = { 10, 10 } ;
        FMFontFamily        fontFamily ;
        
        SetPortWindowPort( window ) ;
        
        MoveTo( 20, 30 ) ;
        Line( 100, 0 ) ;
        
        SetPortPenSize( GetWindowPort( window ), thePenSize ) ;
        MoveTo( 20, 50 ) ;
        Line( 100, 0 ) ;
        
        PenNormal() ;
        MoveTo( 20, 70 ) ;
        Line( 100, 0 ) ;
        
        fontFamily = FMGetFontFamilyFromName( "\\pTimes" ) ;
        TextFont( fontFamily ) ;
        TextFace( normal ) ;
        MoveTo( 20, 100 ) ;
        DrawString( "\\pThis is 12 point, normal, Times" ) ;
        
        fontFamily = FMGetFontFamilyFromName( "\\pVerdana" ) ;
        TextFont( fontFamily ) ;
        TextFace( bold + italic ) ;
        MoveTo( 20, 130 ) ;
        DrawString( "\\pThis is 12 point bold and italic Verdana" ) ;
        
        TextFace( normal ) ;
        TextSize( 24 ) ;
        MoveTo( 20, 160 ) ;
        DrawString( "\\pThis is 24 point normal Verdana" ) ;
        
}


이렇게 하고 나서 Build and Go 라는 두 번째 망치 아이콘을 클릭하면 열심히 컴파일한 다음 화면에 무엇인가 출력을 하게 될 것입니다.

잘 안된다고요? 컴파일 도중 문법 에러가 났다면 뭔가 잘못 갖다붙힌 것이고요, 컴파일은 다 되었는데 화면에 아무것도 안 나온다 하면 NIB 의 HIView 가 잘못 설정되었기 때문입니다. ^^ 일단 이 첫 번째 과정을 깔아야지 두 번째 단계로 넘어갈 수 있으니 함 잘 해보세요. ㅎㅎㅎ (누구한테 이 말을 하는지 알죠? ㅎㅎㅎ)
0 0
로그인 후 추천 또는 비추천하실 수 있습니다.
포인트 228,692
가입일 :
2003-02-18 14:12:30
서명 :
미입력
자기소개 :
미입력

최신글이 없습니다.

최신글이 없습니다.

댓글목록 13

악동시니님의 댓글

누구한테 하는데요..궁금하네..

악동시니님의 댓글

그림 그리기인가.. 집에가서 함해보죠..

악동시니님의 댓글

누군가 대충은 알것 같은데..

악동시니님의 댓글

올만에 글을 올리니..흐흐흐..

악동시니님의 댓글

이양 하시는거 전부다 해주심은...

악동시니님의 댓글

코코아는 없나요..

악동시니님의 댓글

근데 소스 복사해서 넣으면.. 아무런 의미 없는거 아닌가요.. 직접 만들어보야지.. 흐흐흐..

악동시니님의 댓글

소스는 예제에 많다는..

악동시니님의 댓글

집에가서 해보고 안되면 질문드리죠.ㅋㅋㅋㅋ

향기님의 댓글

향기 220.♡.113.193 2005.12.16 13:30

기대도 안했건만....

감사합니다 ^^

악동시니님의 댓글

홍준님 이참에 공부좀 하게..팍팍 올려주삼.. 그럼.. 겁나 좋을것같삼..흐흐흐.. 나도 얼른 파부기를 모셔와야..흐흐흐..

악동시니님의 댓글

홍준님 에러만 팍팍 나는데요..흐흐흐.

향기님의 댓글

향기 220.♡.199.230 2005.12.16 23:53

잘만 되는구만요 ^^
고맙습니다

전체 27 건 - 1 페이지