2017-05-01 34 views
0

我正在寫一段代碼,以確保我創建的NSWindow始終適合屏幕。但是當我將屏幕設置爲低分辨率(1024 x 640)時,我的窗口仍比實際屏幕高一些,導致窗口的較低部分超出屏幕,因此無法觀看。這裏是我的代碼:如何確保NSWindows始終適合(小)屏幕?

NSWindowStyleMask style_mask = NSWindowStyleMaskTitled 
          | NSWindowStyleMaskClosable 
          | NSWindowStyleMaskDocModalWindow; 
int visible_width = [[NSScreen mainScreen] visibleFrame].size.width; 
int visible_height = [[NSScreen mainScreen] visibleFrame].size.height; 

int width = std::min(visible_width, kDefaultWindowWidth); 
int height = std::min(visible_height, kDefaultWindowHeight); 

NSRect frame_rect = NSMakeRect(0, 0, width, height); 
NSRect content_rect = [NSWindow 
    contentRectForFrameRect:frame_rect 
        styleMask:style_mask]; 

_myWindow = [[NSWindow alloc] 
    initWithContentRect:content_rect 
       styleMask:style_mask 
       backing:NSBackingStoreBuffered 
        defer:NO]; 

的問題是,這個代碼後,content_rect有大小爲frame_rect一樣的,如果窗口不會有一個標題。實際上,當我創建窗口時,它確實有一個標題(如預期的那樣)。我做錯了什麼嗎?

+0

我嘗試了frameRectForContentRect :: styleMask(類方法)以及frameRectForContentRect(即時方法,在創建NSWindow之後調用),並且frame_rect和content_rect的大小仍然相同。 – trungdinhtrong

回答

2

問題是NSWindowStyleMaskDocModalWindow。我不知道你的想法是什麼,但無論你認爲它的意思,這並不意味着這一點。刪除它。

+0

工作。非常感謝。爲了記錄,我認爲這意味着我的窗戶將是模態的。 – trungdinhtrong

+0

如果以模態方式呈現它,則窗口是模態的(例如,您調用'runModal')。 – matt

+0

是的,我確實在最後調用了runModal來使它成爲模態。但起初我認爲(顯然不正確),我應該爲測量設置NSWindowStyleMaskDocModalWindow。 – trungdinhtrong