• 북마크
  • 추가메뉴
어디로 앱에서 쉽고 간편하게!
애플 중고 거래 전문 플랫폼
오늘 하루 보지 않기
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

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

전체 1,227 건 - 25 페이지
2007.10
15

[기타질문] xcode 3.0 에서 클래스 생성 방법이 어떻게 되나요?

cocoa관련 프로그래밍 책을 샀는데 예제를 따라할려구 해도 인터페이스 빌더가 너무 차이가 나니 예제를 따라서 할수가 없더군요. 아마 책은 2.4.1버젼을 기준으로 설명이 되어 있는듯 합니다. ㅠ.ㅠ HELP파일을 봐도 도통…

2007.09
10

[기타질문] OS X 하위버전과 호환되게 만들려면 어떻게 해야 되나요?

OS X 타이거 만이 아닌 팬더, 재규어 등 그 이전의 mac os 와 호환되게 빌드하려면 어떻게 해야 되나요 그냥 빌드만 하면 되는줄 알았는데 동성님이 10.3에서 실행이 안된다 하드라구요. [UB로도...]

2007.08
16

[기타질문] 텍스트 입력을 받는 NSTextField 에서요...

블록 선택이 안 되고 오직 키보드 입력만 되게 하도록 만들려면 어떻게 해야 되나요 isSelectable 메소드를 사용하면 아예 입력이 안 되고.... 그리고 키보드 입력을 받을 때마다 액션을 내게 하려면 어떻게 해야 되지요

2007.08
07

[기타질문] 자동으로 운영체제 키보드 레이아웃을 바꾸는 법에 관해서...

제가 제 개인적인 필요 때문에 타자 연습 프로그램을 만들고 있는데요. 프로그램에서 한글이나 영어 언어를 선택하고 연습 할 때 그 때마다 운영체제의 키보드 레이아웃도 한글이나 영어로 맞춰줘야 되서 불편한데요. 프로그램에서 언…

2007.07
29

[기타질문] Chapter 7의 8쪽에서의 질문....(Cocoa Programming for Mac OS X 2/E)

- (void)insertObject:(Person *)p inEmployeesAtIndex:(int)index { // Add the inverse of this operation to the undo stack NSUndo…

2007.07
16

[기타질문] helper object 에 관해서...

제가 코코아 책 보며 Helper Object 를 공부하는 중인데 아무리 생각해봐도 도무지 무엇인지 잘 이해가 되지 않습니다. 미숙한 번역실력 때문인듯.. 아무튼 제가 생각하는 helper object 는 클래스를 확장할 때 사용하는 객…

2007.07
01

[기타질문] Xcode 편집기에서 한글 입력할 때의 문제점에 대한 질문

안녕하세요. Xcode를 사용해서 ASCII 텍스트 형태의 소스 코드에 한글 주석을 입력하다 자꾸 특정 부분에서 아래와 같은 메시지 박스가 떠서 문자를 입력할 수가 없는데, 어떻게 하면 될지 그 해결 방법이 궁금합니다. 입력 문자열: 그…

2007.06
17

[기타질문] Cocoa 에 대한 질문..

코코아 책(정확히는 pdf...)을 열심히 보고 있는데.. 정확히 이해를 했는지 못했는지 몰라서.. 질문들을 올리겠습니다. 1. NSMutableArray *array; …

2007.06
06

[기타질문] 다시한번 질문.....

안녕하세요 아래 올렸던 내용과 비슷한데, 해결이 잘 안되서 다시 질문을 드립니다. 하드 디스크의 특정 디렉토리에서 파일의 유무를 검사해야 하는데요, 하드 디스크의 이름이 "ccc" 라면, open("ccc:어쩌구:파일", "r")…

2007.04
28

[기타질문] Dev C++에서 GLUT사용하는법을....

Visual Studio 쓰자니 다운하긴 좀 그렇고.. Express 는 아주 많이 부족하고... 그래서 Dev C++ 를 다운하려고 하는데요. 도대체 이걸로 GLUT프로그래밍 하는 법을 모르겠네요... 윈도우 어플로 GL 프로그래밍하는…

2007.01
27

[기타질문] OpenCV 1.0.0 Frameworks

wlee 님 뿐만 아니라 Mac 에서 이미지 프로세싱 관련 연구를 하시는 분들에게 유용한 툴이 될 듯 싶습니다. 좋은 라이브러리를 알게 되어 wlee 님께 감사말씀 드립니다. ^^ 물론 1.0.0 을 그대로 command-line 으로 컴파일해도…

2007.01
20

[기타질문] [질문] 외부 라이브러리 다시 한번 ~

질문 1. 외부 라이브러리를  External Frameworks and libraries 폴더에 추가하기 위해, 오른쪽 버튼 -> Add->existing files.. 를 선택해서…

2006.12
28

[기타질문] Xcode 에서 디버그 모드 ... 릴리즈 모드...

비주얼 스투디오에서는 빌드 아이콘 옆에 디버그 모드 릴리즈 모드 선택할 수 있어서 편했는데 Xcode 는 어떻게 하나요 오픈지엘 공부하면서 제가 만든 프로젝트들은 Build/Debug 디덱터리에 실행파일이 생기는데 책…

2006.12
22

[기타질문] [질문] XCODE에서 외부 라이브러리 가져다 쓸 때..

안녕하세요. 두 가지 질문을 하려고 합니다. 최근에 OpenGL 프로그래밍을 하고 있습니다. 쉐이더를 쓰려면 필요하다는 GLEW  라이브러리를 AGL 로 빌드된 것을 다운 받아 헤더는 /usr/lo…

2006.10
09

[기타질문] 2.4로 업데이트 했는데도 여전히 깨지네요ㅠㅠ(사진첨부)

인코딩만 UTF-8로 하고 딴건 안했습니다. 프로젝트는 java->javatool로 했고요 이유를 모르겠네요 일단 업데이트형식으로 설치했는데 그래서 그럴까요

2006.10
09

[기타질문] Xcode 한글 깨짐 문제 (마스터님 봐주세요)

위와 같은 코딩을 하는데... 한글의 경우 깨져서 나오는데 프로젝트는 javatool로 했습니다. 환경과 파일인코딩 모두 UTF-8로 했습니다. 그래도 깨지던데... 어떻게 해결해야 하나요.. *ps: 스윙이나 웹 말고 일반적인 …

2006.08
27

[기타질문] OpenGL 질문....

1. 임플리먼테이션이 머죠 2. 소프트웨어와 하드웨어의 차이 3. 파이프라인이 무엇이죠 4. 파이프라인의 구조 부탁드립니다

2006.08
22

[기타질문] 마유라 는 한글이 잘 되는군요. ^^

InputStreamReader 의 속성을 SJIS 에서 EUC-KR 로 바꾸는 방법으로 미와 고스트는 안되는데 마유라 고스트는 잘 되는군요. 인텔 맥에서도 문제없이 돌아가고 있습니다. 영환님도 이미 컴파일 해보셨겠지만, 안되었으면 한 번 …

2006.01
03

[기타질문] Xcode 2.2 에서 C++ 프로그래밍 하기

아직 초보라서 잘 모르는데 어떻게 하는지 알려주세요... Project를 어떤 것을 선택해야하는지...

2005.12
19

[기타질문] Xcode 2.2 에서 카본 프로그램 만들자 (3)

이번에는 본격적으로 Quartz 의 Core Graphics 를 이용해서 그림을 그려 보겠습니다. 참고 자료로는 애플 홈페이지에서 다운로드 받으실 수 있는 Quartz 2D Programming Guide 입니다. 프로그램의 기본 구조는 이…

2005.12
17

[기타질문] Xcode 2.2 에서 카본 프로그램 만들자 (2)

윈도우 프로그래밍을 처음 공부한ㄴ 사람들이 한결같이 내놓는 불만은 "왜 이렇게 어렵냐" 라는 것입니다. 막말로, C 에서는 printf("Hello World\\n") ; 요거 하나만 하면 글을 볼 수 있는데, 윈도우에서는 글자 하나를 보…

2005.12
16

열람중 [기타질문] Xcode 2.2 에서 카본 프로그램 만들자 (1)

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

2005.08
15

[기타질문] XCode 2.1로 Maya plug-in 개발하기..?

Maya 6.0에서 제공하는 Maya API를 이용하여 plug-in을 개발하려고 help문서를 뒤져보니.. xcode는 예제의 프로젝트 파일을 컴파일해보라고 나와있는데.. xcode의 버전때문인지 컴파일이 되질 않는군요..-.- MSVC로 프로…

2005.02
10

[기타질문] hdf5설치 성공하신 분 있나요?

라이브러리 설치 문제가 계속 걸려서 fink 를 이용해 봤습니다만, 안되는군요. :-( libpng, libjpeg 등을 모두 설치해도 h5utils 를 configure 하는 도중에 이 라이브러리들이 없다고 하는군요. hdf5 역…

2004.10
13

[기타질문] X Code에서 include 포함 파일이나 라이브러리 파일의 경로는 어떻게 지정하나요 ?

안녕하세요.. 비주얼 스튜디오 같은 곳에서는 포함 파일이나 라이브러리 파일을 옵션에서 설정해 줄 수 있었습니다. X Code 에서는 이를 어떻게 설정해 주어야 하나요 예를 들어 /Volumes/Data/SDKLib 라는 곳에…

2004.01
10

[기타질문] 투명처리 어떻게 하나요?

분명 투명하게 처리해서 tiff포멧 한건데요, 흰 바탕이 그대로 나와버리네요. - (void)drawRect : (NSRect)rect { NSImage *imgFile = [NSImage imageNamed:@"JinPict"]; …

2004.01
07

[기타질문] 왕초보 자바 질문요~

자바기초를 공부하려구 하는데요... 일단 윈도에서 도스모드로 컴파일 하는 기초적인 것들은 알구 있구요... xcode에서 컴파일하는 방법을 모르겠어요...--; xcode에서 새화일 선택해서 코딩한다음 빌드를 하고픈데 메뉴들이 전부 비활성화 …