2015-10-16 22 views
10

Bir NSWindow için Titlebar olmadan resize indicators'u nasıl gösteririm?NSWindow yeniden boyut göstergesi görüntülenemiyor


Hikaye panosu ile yeni bir Xcode projesi (Mac uygulaması için) oluşturdum. Sadece Görünüm kutusunda Title Bar onay kutusunu devre dışı bıraktım (NSwindow'un Başlık çubuğunu gizler).

Tuhaf bir şey, TitleBar devre dışı bırakıldıktan sonra, NSWindow, fare kenarlarının üstünde iken yeniden boyutlandırma göstergeleri göstermiyordu. Kenarlarda sürüklesem de yeniden boyutlandiriyordu.

Sanırım bu bir hatadır, çünkü eğer pencere fareyi kenarların üzerinden sürükleyerek yeniden boyutlandırılabiliyorsa, yeniden boyutlandırma göstergelerini göstermelidir.


o görüntüde görülebileceği gibi

image

, yeniden boyutlandırma göstergeleri kullanıcı pencereyi sürükler sonra görülür, ancak birçok kullanıcı hiçbir büyütme sembolüne olmadığından, pencere boyutlandırılabilir olmadığını düşünürdüm .

+0

Fare izleme alanını ayarlıyor musunuz? Yeniden boyutlandırmanın ardından fare izleme alanını güncelliyor musunuz? – l00phole

cevap

2

Ben YES dönmek NSWindow ve ağır basan canBecomeKeyWindow sınıflara bu sorunu çözdüm):

#import "MyWindow.h" 

@implementation MyWindow 

- (BOOL)canBecomeKeyWindow { 
    return YES; 
} 

@end 

yılında imleçlerini boyutlandırmak güncellenmemesi Bu dava Apple hatası gibi görünüyor. Belgeler, "canBecomeKeyWindow özelliğinin değeri, pencere bir başlık çubuğuna veya yeniden boyutlandırma çubuğuna sahipse YES veya NO ise" şeklindedir. Bu nedenle, canBecomeKeyWindow'un yeniden boyutlandırılabilir pencere için YES değerini döndüreceğini umuyorum. Ama öyle değil.

YUKARI: Check on 10.10.5. Umarım, 10.11'de aynı davranışa sahip olacaksınız.

1

Bunu kontrol etmedim, ancak yeniden boyutlandırma göstergelerini el ile ayarlayabilirsiniz. Sanırım windows contentView alt sınıfına (pencerenin her bir tarafı için bir tane, yükseklik/genişlikteki sadece birkaç piksel) dört adet NSTrackingAreas ekleyebilirim. mouseEntered() yönteminde, uygun fare konumu için yeni bir NSCursor nesnesi oluşturun. Konumun değişebileceğini unutmayın, bu yüzden mouseMoved() yöntemini de kullanın. mouseExited() üzerinde imleci sıfırlayın. Yine, bunu denemedim ama işe yaramalıydı.

Not: Bu bir radar dosya unutmayın;