2010-06-08 105 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 

它通常工作。我可以看到窗戶。我甚至可以看到我在CocoaGLViews drawRect函數內繪製的openGL事物,但那個函數不幸只能被調用一次,我錯過了什麼?

回答

4

爲什麼你會期望它被多次調用?當操作系統認爲其內容不再有效時,會要求查看繪圖。如果您希望定期繪製OpenGL視圖,那麼您需要設置一個計時器,將setNeedsDisplay:消息發送到您的視圖。