cocoa - iconos - dibujar en pantalla mac
¿Cómo dibujo el escritorio en Mac OS X? (2)
Debe crear una subclase de NSWindow
y establecer el nivel en (kCGDesktopWindowLevel - 1)
. Esto hará que tu ventana esté debajo de los íconos. También debe asegurarse de que su ventana no se convierta en clave o principal y que maneje Exposé / Spaces correctamente al no moverse.
- (id)initWithContentRect:(NSRect)contentRect styleMask:(NSUInteger)windowStyle backing:(NSBackingStoreType)bufferingType defer:(BOOL)deferCreation
{
self = [super initWithContentRect:contentRect styleMask:windowStyle backing:bufferingType defer:deferCreation];
if(self)
{
[self setLevel:kCGDesktopWindowLevel - 1];
[self setCollectionBehavior:
(NSWindowCollectionBehaviorCanJoinAllSpaces |
NSWindowCollectionBehaviorStationary |
NSWindowCollectionBehaviorIgnoresCycle)];
}
return self;
}
- (BOOL)canBecomeMainWindow
{
return false;
}
- (BOOL)canBecomeKeyWindow
{
return false;
}
Quiero dibujar el escritorio en Mac OS X (Snow Leopard). Específicamente, quiero lograr el mismo efecto que correr:
/System/Library/Frameworks/ScreenSaver.framework/Resources/
ScreenSaverEngine.app/Contents/MacOS/ScreenSaverEngine -background
(Si no está cerca de su computadora, esto muestra el protector de pantalla donde normalmente vería el fondo de su escritorio).
Sé cómo hacer una ventana sin borde (al subclasar NSWindow y anular initWithContentRect: styleMask: backing: defer: para establecer el estilo de ventana a NSBorderlessWindowMask) y sin una sombra (setHasShadow: NO)
Sé que puedo llamar a setLevel: kCGDesktopWindowLevel o kCGDesktopIconWindowLevel para poner mi ventana debajo de otras ventanas (vea la pregunta 418791 ). Sin embargo, esto no es exactamente lo que quiero, porque una ventana en este nivel todavía está en la parte superior de los iconos del escritorio. Quiero estar encima del fondo del escritorio, pero debajo de los íconos.
Mi vista es opaca Si hay una técnica que corta el fondo del escritorio, eso está bien.
Para mostrar sobre el escritorio pero debajo de los íconos del escritorio, debe hacer dos cosas:
- Llame a
[window setLevel:kCGDesktopWindowLevel]
para flotar debajo de otras ventanas de la aplicación. - Llame
[window orderBack:self]
a la capa detrás de la ventana que dibuja los íconos del escritorio.
Algo durante el lanzamiento de la aplicación lleva la aplicación al frente, por lo que debe llamar a orderBack: en el método applicationDidFinishLaunching de la aplicación del delegado.