2017-01-13 2 views
1

이 나는 ​​문서를 찾을 수 없습니다, 그래서에 코드에 해당하고 싶은 : 그렇게하는 데 필요한 요소를 찾을 수 없습니다 구글과 스택 오버플로 I에 대한 연구와 함께,Mac에서 Carbon으로 C++에서 새 창을 여는 방법은 무엇입니까?

#include <carbon.h> 

int main() { 
    carbon::Window win1 = carbon::openWindow(10,10,640,480); 
    win1.setVisible(true); 
    return 0; 
} 

문제가 있습니다.

+0

"동급"이란 무엇을 의미합니까? 서면으로 작성한 코드의 문제점은 무엇입니까? –

+0

이 코드는 이러한 함수가 아니기 때문에 컴파일되지 않습니다. 그렇게 할 수있는 문서가 없기 때문에 네임 스페이스와 함수 이름을 알 수 없습니다. –

+2

@CrearoLisifi 문서를 찾지 못한 이유는 2012 년에 전체 Carbon API가 사용되지 않을 수 있다는 것입니다. –

답변

1

문제는 구글에서의 연구 및 스택 오버플로 내가 필요한 요소가

탄소 클래식 맥 OS에서 개발자 전환 (즉, 버전 9를 돕기위한 오래된 프레임 워크라고 할 찾지 못했습니다이다 Algirdas Preidžius가 의견으로 지적한 것처럼, Carbon을 사용하여 창을 만드는 데 사용하는 부분 인 HIToolbox.frameworkdeprecated in MacOS X 10.7입니다. 지금이 프레임 워크를 사용하려고 시도 할 때 약간의 포인트가 있습니다.

이 예제는 그래픽 사용자 인터페이스가있는 프로그램에 필요한 기본적인 오해를 보여줍니다. 여기에 코드입니다 : 탄소 API는 여기가 일치 일어난 경우에도

int main() { 
carbon::Window win1 = carbon::openWindow(10,10,640,480); 
win1.setVisible(true); 
return 0; 
} 

(이 근처에도 아니다), 프로그램은 아무것도하지 않는 것처럼 보일 것입니다. 창을 만들고 아마 그것을 표시하지만, 즉시 종료하므로 화면이 전혀 화면에 나타나지 않거나 화면에 깜박이거나 너무 빨리 사라져서 보지 못할 수도 있습니다. 그래픽 인터페이스가있는 프로그램은 마우스를 움직이거나 마우스 버튼을 누르거나 키보드의 키를 누르거나 플로피 디스크를 넣는 등 사용자가 기다리는 시간을 거의 소비합니다.). 이를 용이하게하기 위해 GUI 응용 프로그램의 핵심은 이벤트 루프입니다. 초기에 "MacOS"라고 불리기 시작한 초창기에 매킨토시 운영 체제는 한 번에 하나의 프로그램 만 실행할 수 있었고 그 프로그램은 각각의 새로운 이벤트를 얻기 위해 OS를 폴링해야했습니다. 그래서 응용 프로그램의 핵심은 다음과 같습니다 다음 이벤트 루프이었다

EventRecord theEvent; 
EventMask eventMask = everyEvent; 
while (!quitting) { 
    GetNextEvent(eventMask, &eventRecord); 
    switch (eventRecord.what) { 
     case keyDown: { 
      // do something with the key in the event 
     } 
     case keyUp: { 
      // do something with the key in the event 
     } 
     case autoKey: { 
      // do something with the key in the event 
     } 
     case mouseDown: { 
      // do something with the mouse position in the event 
     } 
     case mouseUp: { 
      // do something with the mouse position in the event 
     } 
     // ...and so on... 
    } 
} 

. 최신 버전에서는 OS가 여러 응용 프로그램을 동시에 실행할 수 있도록 변경되었으므로 이벤트 루프는 GetNextEvent() 대신 WaitNextEvent()이라는 함수를 기반으로했습니다. 가장 큰 차이점은 이벤트를 사용할 수없는 경우 WNE가 차단된다는 것입니다. Carbon이 등장하자 스타일이 다시 바뀌 었습니다. 이번에는 이벤트 루프가 운영체제에 의해 처리되었고, 프로그램은 관심이있는 모든 이벤트에 대한 콜백 함수를 등록하기 만했습니다 (Microsoft Windows 앱의 작동 방식과 거의 같습니다) 그 핸들러는 필요할 때 호출됩니다.

이 모든 것은 실제로 사용자가 지적한 것보다 더 많은 GUI 응용 프로그램이 있다는 것을 설명하는 것입니다. 단지 창을 만들지 않고 처리해야합니다. 당신의 의도는 당신의 질문에서 분명하지 않지만, 당신이하려는 것은 무엇이든, 탄소는 거의 확실하게 답이 아닙니다. 기본 애플리케이션을 만들고 싶다면 Xcode에서 새로운 macOS 프로젝트를 생성하면 필요한 모든 것을 얻을 수 있습니다. 응용 프로그램에서 C++을 사용하려면 Objective-C와 C++을 매우 쉽게 섞어 사용할 수 있으며 Swift 코드와의 통합도 매우 간단해야합니다.

관련 문제