2011-02-09 12 views
6

Sự cố: Tôi có một cửa sổ chínhWindow và một cửa sổ khác childWindow được thêm vào mainWindow. childWindow thuộc loại WindowExt lớp học. Lớp học này tôi xác định cho phương thức bắt gọi [NSWindow becomeKeyWindow] phải được gọi sau số [childWindow makeKeyWindow]. Nếu tôi tạo childWindow và cố gắng làm cho nó keyWindow trên đường tiếp theo:Tại sao NSWindow không có styleMask: NSTitledWindowMask không thể là keyWindow?

WindowExt *childWindow = [[WindowExt alloc] initWithContentRect:addedWindowRect 
          styleMask:NSBorderlessWindowMask | NSTitledWindowMask 
          backing:NSBackingStoreBuffered 
           defer:NO]; 
[mainWindow addChildWindow:childWindow ordered:NSWindowAbove]; 
[childWindow makeKeyWindow]; 

phương pháp [WindowExt becomeKeyWindow] cho childWindow được gọi là - tất cả các tốt, childWindow trở thành keyWindow.

Nhưng nếu tôi có thể tạo childWindow như

WindowExt *childWindow = [[WindowExt alloc] initWithContentRect:addedWindowRect 
styleMask:NSBorderlessWindowMask 
backing:NSBackingStoreBuffered 
defer:NO]; 
[mainWindow addChildWindow:childWindow ordered:NSWindowAbove]; 
[childWindow makeKeyWindow]; 

mà không NSTitledWindowMask, [WindowExt becomeKeyWindow] cho childWindow không bao giờ được gọi là - childWindow không trở thành keyWindow.

Trả lời

21

Đó là quyết định thiết kế ca cao: windows without title or resize bar cannot become key window by default.

Nếu bạn muốn có một cửa sổ titleless để có thể trở thành một cửa sổ chính, bạn cần phải tạo một lớp con của NSWindow và ghi đè -canBecomeKeyWindow như sau:

- (BOOL)canBecomeKeyWindow { 
    return YES; 
} 
0

bạn có thể đặt mặt nạ phong cách để NSBorderlessWindowMask theo thứ tự để làm cho nó không biên giới

Các vấn đề liên quan