2012-02-25 10 views
7

Tengo una aplicación global que informa de nuevo sobre el campo de texto actual. He configurarlo para que cada vez que hago clic en el ratón, corro:| NSScreen mainScreen | no se actualiza cuando el foco del teclado/mouse va a otro monitor?

NSLog(@"Screen:%f,%f", [[NSScreen mainScreen] frame].size.width, [[NSScreen mainScreen] frame].size.height); 

Pero cuando pongo el foco del teclado en un campo de texto, por una pantalla, a continuación, haga clic en el ratón (varias veces) en ese mismo campo de texto, el ¡[[NSScreen mainScreen] frame] a menudo informa las dimensiones incorrectas de la pantalla! Me da las dimensiones de la otra pantalla.

Los documentos de Apple dicen:

https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/ApplicationKit/Classes/NSScreen_Class/Reference/Reference.html

La pantalla principal no es necesariamente la misma pantalla que muestra la barra de menú o tiene su origen en (0, 0). La pantalla principal se refiere a la pantalla que contiene la ventana que está recibiendo actualmente los eventos del teclado . Es la pantalla principal porque es con la que probablemente interactúa el usuario .

Esto dice que la pantalla con el foco del teclado es siempre la pantalla principal. Le estoy dando el enfoque del teclado y el enfoque del mouse. Entonces, ¿por qué estoy recibiendo la otra pantalla 50% del tiempo?

¿Esto es un error en [NSScreen mainScreen]? ¿Tengo que forzar un recálculo de alguna manera? ¿Hay alguna otra forma de obtener las dimensiones de la pantalla que tiene el foco del teclado?

Respuesta

6

Esto dice que la pantalla con el foco del teclado es siempre la pantalla principal. Le estoy dando el enfoque del teclado y el enfoque del mouse. Entonces, ¿por qué estoy recibiendo la otra pantalla el 50% del tiempo?

Sé que esto es buscarle la viajera, pero técnicamente dice que la pantalla principal es la pantalla que contiene la ventana que tiene el foco clave. Entonces, si tiene una ventana que abarca dos pantallas con un campo de texto y el origen de la ventana está en la pantalla 1, pero el campo de texto está en la parte de la ventana que está en la pantalla 2 y el campo de texto está enfocado, la pantalla principal seguir siendo la pantalla 1.

+0

derecho, me di cuenta de que también y lo hizo cambiar el tamaño de la ventana a un tamaño muy pequeño y lo puso en su totalidad en una sola pantalla. Todavía tiene el problema. – cksubs

+1

Para confirmar, también puede verificar el resultado de [pantalla de la ventana]. –

+0

¿Quiere decir [theWindowIamInteractingWith screen]? Esta es una aplicación global, la ventana pertenece a una aplicación diferente, así que no creo que tenga esa información. Si quisiste decir algo más, házmelo saber. – cksubs

Cuestiones relacionadas