2010-06-08 3 views
0

В настоящее время я пытаюсь создать простой программный код какао NSWindow вместо использования конструктора интерфейса (у меня есть мои причины для этого). это быстрый тест:NSOpenGLView drawRect не называется

int main(int argc, char** argv){  
    NSWindow *mainwin; 
    CocoaGLView *mainview; 
    NSRect scr_frame; 
    unsigned int style_mask; 

    NSAutoreleasePool *pool =[[NSAutoreleasePool alloc] init]; 

    [NSApplication sharedApplication]; 

    scr_frame= NSMakeRect(100, 100, 400, 400); 
    style_mask=NSClosableWindowMask|NSMiniaturizableWindowMask| 
    NSResizableWindowMask|NSTitledWindowMask; 

    scr_frame=[NSWindow contentRectForFrameRect:scr_frame 
             styleMask:style_mask]; 

    mainwin=[[NSWindow alloc] 
      initWithContentRect:scr_frame 
      styleMask:style_mask 
      backing:NSBackingStoreBuffered 
      defer:NO]; 
    [mainwin makeKeyAndOrderFront:nil]; 
    [mainwin setTitle:@"Visible screen window"]; 

    mainview=[[CocoaGLView alloc] initWithFrame:scr_frame]; 
    [mainwin setContentView:mainview]; 
    [mainview display]; 

    [mainwin setReleasedWhenClosed:YES]; 

    [pool drain]; 
    [NSApp run]; 
    return 0; 
} 

CocoaGLView происходит от NSOpenGLView и выглядит следующим образом:

@interface CocoaGLView : NSOpenGLView { 
    //some stuff 
} 

- (id) initWithFrame: (NSRect) frameRect; 

- (void)setFrameSize:(NSSize) aSize; 
- (void)drawRect:(NSRect) aRect; 

@end 

она обычно работает. Я вижу окно. Я даже вижу объекты openGL, которые я рисую внутри функции drawRect CocoaGLViews, но эта функция, к сожалению, только однажды вызвана, что мне не хватает?

ответ

4

Почему вы ожидаете, что это будет вызвано более одного раза? Представление будет показано, когда ОС думает, что его содержимое больше не действует. Если вы хотите, чтобы представление OpenGL периодически рисовалось, вам необходимо настроить таймер, который отправляет сообщение setNeedsDisplay: на ваш просмотр.