2011-03-11 2 views
0

OSX 이미지 처리 응용 프로그램 용 플러그인 인터페이스를 작성하고 있습니다. 플러그인은 가능한 한 간단해야한다는 아이디어를 바탕으로 설계되었습니다. 예를 들어 개발자가 예제 코드를보고 몇 분 안에 효과를 낼 수 있습니다. 이를 위해 예제에는 XCode가 필요하거나 사용되지 않습니다. 그냥 gcc. 모든 것이 매우 원활하게 작동하며, 우리는 (일반적으로 말하면) 모든 설계 목표를 달성했습니다. 플러그인을위한 UI를 실제로 생성하므로 플러그인을 다양하고 유연하게 스레드하고 위상을 조정할 필요가 없으며 제어 패널에서의 저장, 존재 및 위치 관리, 모든 방식의 멋진 기능을 관리 할 수 ​​있습니다. 그리고 약 6 줄의 C 코드로 완전히 효과적인 플러그인을 작성할 수 있습니다. 그래서 모두 좋다..so 런타임 링크 가능 라이브러리를 플러그 인으로; 코코아 능력?

이제 우리가 생성 할 수있는 것보다 더 복잡한 인터페이스가 필요하다면 개발자가 CoCoa 창을 여는 데 필요한 것을 향해 눈을 돌리고 있습니다. CoCoa의 내부 동작에 대해서는 충분히 알지 못합니다. Xcode는 일반적으로 이러한 종류의 구현 세부 사항을 숨기 때문에 언제 어디서나이 특정 문제를 해결할 수있는 시간을 가졌습니다. 그래서 여기 (마지막으로, 미안)가 내 질문입니다.

CoCoa 창을 열고 자하는 플러그인의 경우, 무엇을 가져 가야합니까? CoCoa 서비스와 리소스를위한 루트 핸들이 있습니까? 또는 그들은 그들이 연결하고 창을 열 필요가있는 것은 무엇이든간에 연결할 수 있습니까?

바로 지금 플러그인은 매우 특정한 이미지 데이터 유형에 대한 포인터 만 수신합니다. 그들은 OS와 관련이 없습니다. 가능한 경우 CoCoa 창을 열고 OSX에 의해 정상적인 방법으로 처리되도록 필요한 핸들을 제공하고 싶습니다. 또는 아무것도 필요하지 않으면 확실한 답을 원합니다. 그 대답에 대한 참고 문헌은 훌륭 할 것이므로 어느 쪽인지 그것에 관해 배울 수 있습니다.

통찰력을 주셔서 감사합니다.

답변

1

아무 것도 필요하지 않습니다. NSWindow에서 코코아 프레임 워크와 연결하여 메소드를 호출해야합니다. 시스템이 자동으로 열심히 처리합니다.

편집 :

모달 창 사용 방법 :

NSWindow *theWindow; // create this in code, get it from a variable, or load it from a nib 
NSInteger result = [[NSApplication sharedApplication] runModalForWindow:theWindow]; 
if(result == 0) { 
    // success, process input from window 
} else if(result == NSRunStoppedResponse) { 
    // stopped with -stopModal instead of stopModalWithCode:. Possibly success 
} else if(result == NSRunAbortedResponse) { 
    // stopped with -abortModal, probably an error 
} 


//This method is the action for a button on the window 
- (IBAction)closeModalWindow:(id)sender { 
    [[sender window] orderOut:nil]; 
    [[NSApplication sharedApplication] stopModalWithCode:0]; // The 0 will become the result of the runModalForWindow: method. You can use anything else instead 
} 
+0

글쎄, 그 확실히 나를 위해 편리 할 것입니다. 그것에 대한 권위있는 참고 자료가 있습니까? 아니면 자신의 경험으로 얻을 수있는 것이 있습니까? 가능한 한 가장 작은 코코아 구현을위한 링커 관련 제안 - 텍스트 줄이 포함 된 창, "안녕하세요."- 플러그인과 연결 (현재 플러그인에는 내 developer.h, stdio가 포함되어 있습니다. .h와 strings.h 그리고 c 컴파일러가 필요로하는 것 이외에는 전혀 다른 것에 대한 링크가 필요합니다.) – fyngyrz

+0

nm, 답을하지 않아도됩니다. 곧 결과가 게시됩니다. :) – fyngyrz

+0

오케이, 나는 * 너무 * 낙관적 인 길이었다. 메인 runloop은 현재 쓰레드를 감싸고있다. 플러그인이 호출 될 때, 이벤트는 현재 쓰레드에 의해 처리되는 것처럼 보입니다. - 플러그인 자체의 윈도우를위한 runloop을 가지려면 * 플러그인이 필요합니다. 플러그인의 runloop이 종료 될 때, 컨트롤은 처음부터 창을 호출 한 플러그인 부분으로 돌아와야합니다. 열려있는 창과 메뉴 항목이 활성화되어 있지만 NSApp를 NSApp에서 분리하는 데 성공했습니다. 신청. 모든 포인터가 많이 감사합니다. – fyngyrz

관련 문제