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

소프트웨어

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

본문

윈도우 프로그래밍을 처음 공부한ㄴ 사람들이 한결같이 내놓는 불만은 "왜 이렇게 어렵냐?" 라는 것입니다. 막말로, C 에서는

printf("Hello World\\n") ;

요거 하나만 하면 글을 볼 수 있는데, 윈도우에서는 글자 하나를 보기 위해서 수많은 단계를 거쳐야 하기 때문입니다.

매킨토시의 출력 시스템이 QuickDraw 에서 QuartzExtreme 으로 이전하면서 수많은 그림 그리기 함수들이 새로 추가되었습니다. 기본 루틴들은 주로 Core Graphics 함수들이 담당하고 있고요, 그림을 다룰 때에는 Quartz2D 가 역할을 수행하고 있습니다. 쿼츠는 퀵드로우와는 전혀 다른 시스템이지요.

첫 번째 예제, 그리고 오늘 보는 예제도 계속해서 퀵드로우를 이용한 그림 그리기 루틴입니다. 쿼츠를 동원할 필요가 없는 간단한 프로그램, 그리고 Classic 과 호환되는 프로그램을 만들려면 퀵드로우를 써야 합니다.

그림 그리기, 그리고 글자 출력 루틴은 첫 번째 예제의 MyDraw() 함수를 보면서 어떻게 선분을 그리고 있는지, 글꼴을 어떻게 선택해서 어떻게 출력하고 있는지, 사용된 함수는 어떤 것인지를 하나하나 짚어보면 공부가 될 것입니다. 함수에 대한 도움말을 보고 싶으면 Option+마우스 하고 함수를 더블클릭하면 됩니다.

이번에는 마우스 이벤트를 받아서 마우스 좌표로 그림을 그리는 루틴입니다. 이벤트에 대해서는 추후에 좀 더 자세히 설명해 보도록 하고, 일단 오늘도 MyDraw.h 와 MyDraw.c 에 다음의 내용을 복사해서 붙여 넣으세요.

이왕이면 그냥 마우스로 주욱 긁어서 복사하지 말고 하나하나 타이핑해서 소스에 입력하는 것이 더 공부가 됩니다. ^^ (누구에게 하는 이야기인지는 알죠? ㅎㅎㅎㅎㅎ)

--- MyDraw.h ---

#include <Carbon/Carbon.h>


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

void InstallMouseHandler( WindowRef window ) ;
OSStatus MyDrawMouseHandler( 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 ) ;
        
        InstallMouseEvent( window ) ;
        
}



void InstallMouseEvent( WindowRef window )
{
        EventTypeSpec        mouseEventSpec[] = {
        { kEventClassMouse, kEventMouseDown },
        { kEventClassMouse, kEventMouseUp },
        { kEventClassMouse, kEventMouseMoved },
        { kEventClassMouse, kEventMouseDragged },
        { kEventClassMouse, kEventMouseWheelMoved },
        } ;
        OSStatus err ;
        
        err = InstallEventHandler( GetWindowEventTarget( window ),
                                                           NewEventHandlerUPP( MyDrawMouseHandler ),
                                                           GetEventTypeCount( mouseEventSpec ),
                                                           mouseEventSpec,
                                                           (void *)window,
                                                           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 ;
        
}



OSStatus MyDrawMouseHandler( EventHandlerCallRef myHandler,
                                                         EventRef event,
                                                         void *userData )
{
        
        OSStatus err = eventNotHandledErr ;
        static Point wherefrom, whereto ;
        
        switch( GetEventClass( event ) ) {
                case kEventClassMouse :
                {
                        switch( GetEventKind( event ) )
                        {
                                case kEventMouseDown:
                                        err = GetEventParameter(event,
                                                                                          kEventParamMouseLocation,
                                                                                          typeQDPoint,
                                                                                          NULL,
                                                                                          sizeof(wherefrom),
                                                                                          NULL,
                                                                                          &wherefrom) ;
                                        GlobalToLocal(&wherefrom) ;
                                        break ;
                                        
                                case kEventMouseUp:
                                        err = GetEventParameter(event,
                                                                                          kEventParamMouseLocation,
                                                                                          typeQDPoint,
                        &nb
0 0
로그인 후 추천 또는 비추천하실 수 있습니다.
포인트 228,692
가입일 :
2003-02-18 14:12:30
서명 :
미입력
자기소개 :
미입력

최신글이 없습니다.

최신글이 없습니다.

댓글목록 9

향기님의 댓글

향기 220.♡.199.234 2005.12.17 11:47

타이핑할때 Xcode에서 대소문자를 구별하나요?

hongjuny님의 댓글

C/C++/Obj-C 는 모두 case-sensitive 입니다. 다시 말해서 대문자/소문자가 다른 뜻으로 쓰인다는 뜻이지요.

WindowRef window, Window, WINDOW, WiNdOw ;

요렇게 하면 네 변수 모두 다 다르게 선언됩니다. ^^

sunnyday님의 댓글

어쩜 내년엔 프로그래머로 job assign이 완전히 바뀔 것 같은데, 저런 어려운 것은 아니었으면 합니다.

악동시니님의 댓글

열심히 해보삼.. 흐흐흐.. 근데..홍준님.. 이것 좀더 많이 해주시죠..흐흐흐.. 공짜로 배우니 좋네요.. 카본말고.. 코코아도..흐흐흐..

악동시니님의 댓글

근데..누구한테 하는야근데요..그게 궁금.. 누구야.. 흐흐흐..

악동시니님의 댓글

잘되는구만유..하하하..

악동시니님의 댓글

실행해보니..경고가 두개 뜨는데..실행하는데는 문제가 없지만.. 그래도..흐흐흐..

hongjuny님의 댓글

오호, 소스에 타이포가 있군요. 헤더 파일에 있는 함수 정의 중에서

InstallMouseHandler 를
InstallMouseEvent 로 정정합니다.

저는 소스 철회는 안 합니다. ㅡㅡ;

악동시니님의 댓글

전체 1,227 건 - 6 페이지
2019.05
23

[기타질문] 하드 드라이브 복구 비용은 얼마입니까?

컴퓨팅 세계에서 데이터 손실과 같은 단점이 있습니다. 여러분 중 일부는 데이터 복구를 위해 데이터 복구 회사를 고용 한 경험이있을 수 있습니다.  하드 복구 비용 얼마나 데이터 복구 회사를 사용하여 하드 드라이브 복구 비용을 dost …

2018.02
22

[기타질문] photoCS3에서도 내용인식 기능이 있나요?

포토샵 CS3에서도 칠 - 내용인식 기능이 있나요없으면 가능한 방법은 머가 있는지 좀 부탁드립니다^^

2018.01
16

[기타질문] 주문했는데 시간이..

여기에 질문하는게 맞는지 모르겠습니다만ㅠㅠ 1월15일 월요일 결제를 했습니다. 제가 18일 목요일에 그게 꼭 필요한데 그때까지 올 수 있을까요.. 2017년 15인치 맥프레 입니다.(ssd만 좀더 높은걸로 교환했습니다.)

2017.03
09

[기타질문] 구글드라이브 며칠전으로 돌릴 수 있나요?

안녕하세요. 구글드라이브 며칠 전으로 돌릴 수 있을까요 크롬브라우저로 웹에서 파일정리를 다 했는데, 집에있던맥북을 켰더니 앱이 실행되서 동기가 되었나봐요.... ㅠㅠ 방법이 있을까요!!!

2016.11
20

[기타질문] 맥-윈도우 웜홀 이용 시 한영키 전환 질문드립니다.

현재 웜홀 사용하고 있는데요. 1PC를 맥, 2PC를 윈도우 데스크탑으로 연결해서 쓰고 있습니다. 그런데 PC에서 한영키가 어떤 것도 듣지 않아서 질문드립니다. command+space, ctrl+shift, 오른쪽 alt키 모두 해봤는데도…

2016.06
13

[기타질문] [re] 서체 문의 - vivaldi 폰트 구입 어디서할 수 있을까요!

>비발디 서체 vivaldi font 구입하고자 합니다 >어디서 구입할 수 있을까요 >답변 부탁드립니다~ www.myfont.com 에서 구매 가능합니다.

2016.03
14

[기타질문] 인디자인 텍스트 프레임에 격자가 생겼어요.

작업하다 뭔가 잘못 누른 것 같은데 원래 텍스트 프레임으로 보려면 어떻게 해야하나요

2015.12
10

[기타질문] 페이지 많은 pdf파일 페이지별로 인쇄용 이미지로 저장하려면?

200페이지 분량의 pdf파일을 가지고 있는데요. 페이지별로 조금씩 수정되는 것들이 있어서~ 인디자인에서 작업중입니다. 기존껄 그대로 사용하는 것들도 많아서 페이지별로 pdf파일을 저장해서 인디에 앉히고 있는데요. 포토샵에서 jpg나 pdf로 페…

2015.09
24

[기타질문] 쿽에서 독일어? 표기 방법 문의드려요~

독일어인지 모르겠는데, 지금 조판중인데요- 키캡에서도 못찾겠어서, 문의드려요 영어 o나 e 위에 작대기 그어진 글씨 어떻게 쿼크에서 쓸 수 있을까요 조언 부탁드립니다.

2015.08
06

[기타질문] 포토샵 필터(플러그 인)질문입니다.

최근까지 맥을 쓸땐 포토샵에 필터가 많아서 가끔 쓰곤 했는데 피시포토샵(cs6)으로 바꾸고 나서는 필터구하는게 쉽지 않네요. 포토샵 플러그인 필터는 어떻게 구하는지 도움 주시면 감사하겠습니다~^^

2015.06
15

[기타질문] 인디자인에서 패널들이 사이즈가 조정이 안되요...

인디자인에서 패널들 몇개가 옆으로 커져서 사이즈 조정이 되질 않아요… 작업하려니 불편하고 신경쓰여 죽겠는데 원래대로 작아지는 방법이 없나요

2015.04
08

[기타질문] 포토샵 버젼 두가지 설치 가능한가요?

어도비 cs4 버젼이 깔려있는 상태에서. 포토샵만 마스터로 cs6으로 동시에 설치 가능한지요. 그리고 포토샵 괜찮은 커리큐럼이 들어있는 책 추천 부탁드립니다.

2014.12
21

[기타질문] 키보드 컨트롤키+왼쪽마우스하면 오른쪽마우스 메뉴가 나와야하는데...

안녕하세요. 정말 검색하다가 하다가 안되서 답답해서 글올립니다. 아이맥쓰고 있고 윈도우도 깔아놓고 필요할때마다 씁니다. 타블렛을 주로쓰고 매직마우스도 쓰며 둘다 사용하구요. 그리고 피씨는 회사에서 사용하고 있습니다. 원버튼 마우스나 타블렛…

2014.11
04

[기타질문] 여기서 폰트 질문해도 될까요?

영문 대문자 폰트 이름이 너무 궁금합니다. 혹시 알고 계시는 분 계시나요

2014.09
18

[기타질문] ios8에서 iCloud drive 폴더 보는 방법

이 화면이 보고 싶습니다. 어디에 들어가면 볼 수가 있는 건가요 그나저나 업그레이드 후 설정하는 부분에서 드라이브에 대해 설정하는 옵션이 보였던것 같은데.. icloud가 아닌, other 머시기를 선택한것 같긴 합니다. 검색해봐도 설정 …

2014.07
22

[기타질문] 맥 ID 세팅을 다시하려면 어떻게 하는지요?

< 맥 ID 세팅을 다시하려면 어떻게 하는지요> App Store에서 앱업데이트 메세지가 뜰때마다, 난감합니다. 처음 세팅을 잘못된 애플 ID로 한 것 같습니다. 고수님들의 지도를 기다리겠습니다. 즐거운 밤 되시길~

2014.06
11

[기타질문] CS4 마스터 복사 시, "파일이름이 너무 깁니다" 뜨는데.

(PC에서) CS4 마스터 복사 시, "파일이름이 너무 깁니다" 뜨는데, ... 이거 어떻게 복사해야 하나요 전에 누가 제외장에 .. 넣어준 적이 있는데, 막상.. 제가 저의 다른 외장으로 복사해 놓을려고 하는데, "파일 이름이 너무 …

2014.04
24

[기타질문] iphoto 관련입니다.

메버릭스에서 아이포토를 사용하고 있습니다. 그러나 어느 날 갑자기 아이포토상에서 사진을 조금 확대하니까 에러(!)표시가 뜨면서 사진이 보이지 않네요..ㅠㅠ 무엇이 문제인지 해결이 안됩니다..ㅠㅠ 아이포토로 슬라이드쇼로 모임에서 시연을 …

2014.03
16

[기타질문] 아이튠즈 라이브러리 이동 문제

현재 아이튠즈를 윈도 PC에서 사용하고 있습니다. 음원소스는 따로 파일서버에 있고, 윈도에서 smb로 연결하고 아이튠즈 라이브러리에 추가해서 쓰고 있는데요, 아이튠즈 라이브러리는 윈도 PC에 있습니다. 제 설명이 잘 이해가 되실려나 모르겠네요…

2014.01
15

[기타질문] 편집디자이너 아이맥 구입하려합니다

안녕하세요. 매킨토시로 편집디자인(쿽, 포토, 일러)을 한지 10년 가까이 되지만 컴터엔 완전 문외한이라 도움 요청드리려 글 남기게 되었습니다. 이번에 편집프로그램을 쿽에서 인디자인으로 바꾸면서 1.아이맥 27인치…

2013.12
05

[기타질문] [re] 캡쳐파일 폴더 지정이요~

>화면 캡쳐 받을때 받은 파일이 특정 폴더에 들어가게 하는 방법은 없나요 >데스크탑에 저장이 되니 정신 사나워서요^^;;; onyx 라는 프로그램을 설치후 parameters 부분에 경로를 지정할수 있습니다. 그런데 이 프로그램 주의 하…

2013.10
30

[기타질문] 이 폰트 아시는분~

저 서체 이름좀 알려주세요 ㅠㅠㅠㅠ (첨부파일 참조) 너무 궁금한데 알길이 없네여... 아시는 분 꼭 좀 알려주세용 ㅠㅠㅠㅠㅠㅠ

2013.10
04

[기타질문] 서체 관련 질문입니다!!도와주세요...

안녕하세요~ 작업도중 다른분이 작업하던 인디자인 파일을 받게되었습니다. 근데 패키지로 모으기를 안하고 그냥 인디자인 파일만 덜렁 보내셨더라구요~ 신기하게도 제 컴퓨터엔 해당서체가 없는데도 불구하고 폰트오류없이 인디자인이 열렸습니다. 해당 인디자…

2013.09
10

[기타질문] [윈도xp]윈도xp에서 하드분할한거 윈도7에서 읽히나요?

아범이 두대가 있고 두대다 윈도xp입니다. 하드는 C와 D로 분할되어 잇어서 윈도7을 깔았습니다. 깔기전 7시디로 부팅해서 먼저 xp를 포맷하려고 보니 c와 D로 나뉘어져서 C를 포맷하고 윈도7을 깔았습니다. 다깔고보니 D가 안보이네요. 저는 …

2013.08
07

[기타질문] 인디자인 cs6를 쓰는데요. 자꾸 메모리 부족이라고 뜹니다.

우선 저는 PC로 작업중이구요... 텍스트 몇개 앉히고 지금 뭐 마스터페이지에 먹으로 JPG작은거 몇개 깔았을 뿐인데... 겨우 4페이지 작업인데도 불구하고 자꾸 메모리부족이라는 창이 뜹니다. 수시로... 이거 뭔가 문제가 있는거 같은데…

2013.07
07

[기타질문] DVD감상과 영화 파일 감상에 좋은 프로그램

제목대로.... Mac에서 DVD 감상과 립된 영화파일 감상에 좋은 프로그램은 무엇인가요 각각이요. 감사합니다.

2013.06
03

[기타질문] 아이맥 강화유리 흠집

아~~~ 오늘 여러가지로 열받네요, 제 실수도 많지만.. 어제 아이맥중고 샀는데 화면 거의 중앙에 찍힌자국 2개나 있네요. 늦은 밤에 구입하느라.. 미쳐 확인 못했는데. 전화도 안받고 완젼 기분 나쁘네요. 이거 화면강화유리 교체비용은 얼마…

2013.04
30

[기타질문] 프린터야~~~

제가 프리로 일하고 있는데, 레이저 프린터기를 하나 살려구 하는데, 제가 워낙 기계치라 어떤 브렌드를 사야할지 토너 가격은 어떤지, 도통 모르겠습니다. 간절한 도움의 손길 필요합니다.

2013.03
29

[기타질문] Tuxera 사용 중 질문 올립니다

Tuxera를 이용해서 NTFS 형식의 하드를 사용하는데요 다른 하드는 잘 읽고 쓰는데 얼마전부터 1TB 하드에 쓰질 못해서 디스크 유틸리티로 봤더니 Tuxera NTFS랑 그냥 Window NT 파일 시스템이 다른 걸로 나오네요 그래서인지 Tux…

2013.02
27

[기타질문] PC용 드라이버 좀 주세요

윈XP에서 하이퍼레이저G3+프린터를 LAN선으로 사용할려고 하는데 방법을 알려달라고 했더니 PC용 드라이버를 설치하면 자동으로 잡아준다는 답변을 받았습니다. PC용 드라이버 없나요 엘렉스테크는 망했나 봅니다.

2013.01
24

[기타질문] [re] 출력소에 획을 모두 아웃라인해 달라고 해보세요.

출력소에 말씀하셔서 투명도 병합>모든 선을 외곽선으로 변환 해서 테스트 프린트 해 봐 달라고 하세요. 만약 출력소에서 그게 어딧는지 모르겠다 하시면...... Print Production(인쇄물 제작) 메뉴에 [병합기 미리보기]에 있다고 …

2013.01
09

[기타질문] 인디자인 문서크기 변경

이미 작업이 끝난 문서에서 아래쪽으로만 도큐 사이즈를 1센티 정도 늘리고 싶은데 인디자인은 아래쪽만 늘어나는게 아니라 가운데 기준으로 위아래 0.5센티씩 늘어나더라구요 그래서 문서를 확장한 경우 격자를 잠궈 놓은 본문 때문인지 글줄이 다 변하고…

2012.12
06

[기타질문] 아...토렌트..

토렌트를 맥용으로 다운받았는데 어플리케이션에서 토렌트 아이콘 클릭해도 실행이 안되네요... 그래서 오페라에서 파일 다운을 실행해도 뭐가 잘못됐는지 씨드랑 피어 다 0로 뜨고 안됨... 제컴이 오래되서 그런가요 2008년 맥프로임다. OS …

2012.10
16

[기타질문] 인디자인 한글판(5.5) 사용하는데 갑자기 영문판으로 바뀌었어요. 어떻게 해야 하나요?

인디자인 한글판 사용중 갑자기 영문으로 바뀌어버렸어요. 윈도우 7이고 CS5.5인데 다시 한글판으로 되돌리는 방법이 있나요

2012.09
19

[기타질문] 고수님들 너무 답답해서...

일러스트 EPS 저장파일을 포토샵으로 불러오면 해상도 체크 창이 떠야하는데 자동으로 해상도 72dpi로 불려지는데 뭐가 문제지요 답답해 죽겠어욤 ^^ 고수님들 살려주세요

2012.09
06

[기타질문] 스케너 드라이브 구하기힘드네요

umax astra 5600 구형스케너인데요, 피씨(xp)든 맥(9.0)이든 드라이버좀 주세요~ 외국사이트 돌아다녀도 닫힌곳이 많고 자료가 있다하더라도 뻥()이네요... 무슨 드라이버가 보안이라고 인터넷엔 없는지.... 오늘 오후시간 다…

2012.08
24

[기타질문] 사파리 읽기도구가 안됩니다 ㅠㅠ

라이언 10.8.1 사용중이구요 어제부터인지 갑자기 사파리 읽기도구가 안되네요 혹시 아시는분 계신다면 답변부탁드립니다.

2012.08
16

[기타질문] ptpcamera 라고 아시나요??

맥이 버벅거리길래 실행되는 프로그램을 살펴보니 ptpcamera라고 있더라구요 생전 못보던 건데 어떤 프로그램인지 아시나요

2012.08
01

[기타질문] 댓글 수정 기능에 관하여...

운영자님, 댓글 수정시 링크들이 html코드로 보이고 링크도 안되게 됩니다. 그래서 부득이하게 기존 댓글을 삭제하고 다시 작성하게 됩니다. 조속한 수정 부탁드립니다.

2012.07
20

[기타질문] Flexo CTP 사용하시는 분 계시나요?

안녕하세요~ 저는 라벨인쇄회사에서 디자이너로 일하고 있습니다. 곧 저희 회사에 Flexo CTP가 들어옵니다. 사장님은 인건비 절약하려고 저더러 맡아서 하랍니다. 디자인하고 판뜨고 그러라는건데 보조 한명이 있긴 하지만 그게 가능할까요 저희 …

2007.10
15

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

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

2006.08
27

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

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

2012.07
02

[기타질문] A3프린터 추천해주세요

맥이랑 일반PC에서 사용할 A3 잉크젯 프린터 추천해주세요 아주대량으로 출력할 건 아니고 시안용으로 사용할 예정이에요~ 부탁부탁 감사합니다 *^^*

2012.05
28

[기타질문] mac keeper 완전삭제가 안되요.

도와주세요. 이사이트 정보얻으러 첨 왔다가 광고 보고 믿을만하다 싶어서 다운받고 실행까지 해봤는데 산지 삼일도 안된 맥에 막 뭐가 안좋다고 엄청 많은 숫자가 뜨길래 헉 이게뭔가 하고 실행 멈췄는데.... 다운받은 거 지우고 이미 실행…