2009-10-01 7 views
5

Tenemos una aplicación que se ejecuta en las estaciones de trabajo de monitor múltiple XP64 y Vista64, y tiene un problema extraño cuando un formulario único en la aplicación se mueve a ciertos monitores.El cursor se vuelve de tamaño diagonal cuando el formulario está arriba y a la izquierda del monitor principal

Si el formulario se mueve a un monitor que está a la izquierda y encima del monitor principal (tiene coordenadas negativas en el cuadro de diálogo Configuración de pantalla), los usuarios obtendrán un cursor diagonal cuando coloque el cursor en el formulario (Solo lo he visto suceder cuando el cursor está en el cromo de la ventana, pero los usuarios han informado que ocurre dentro de toda la ventana).

Pude determinar que solo ocurre cuando el cursor está sobre el monitor primario (haciendo que el monitor secundario solo parcialmente sobre el monitor principal el problema ocurra solo en la parte del formulario que está encima del monitor primario)

Esto solo ocurre con un formulario en toda nuestra aplicación, y este no hace nada especialmente elegante (no anula WndProc, etc.) y todos los controles personalizados utilizados también se usan en otras formas que no lo hacen t mostrar este problema

¿Qué haría que el cursor de cambio de tamaño diagonal apareciera todo el tiempo?

Respuesta

6

Esto parece ser un error en Form.WmNCHitTest. Creo que la forma en que determina las coordenadas xey es incorrecta (para obtener el y lo hace HIWORD((int)((long)lParam)), donde la documentación dice que use GET_Y_LPARAM que se define como ((int)(short)HIWORD(lParam))).

Solo utiliza este método si tiene el control de tamaño activado. Desactivar el agarre de tamaño evita este código y hace que el formulario funcione correctamente.

+0

Hemos sabido de esta solución por algún tiempo. ¿Alguien ha encontrado una solución real que permita mostrar el tamaño de la empuñadura? –

0

Información adicional: me parece que al establecer la configuración Form.SizeGripStyle en Mostrar, que el comportamiento extraño con el cursor se convierta en un cursor de cambio de tamaño diagonal, que funciona y funciona como si cambiara el tamaño de la ventana desde la esquina inferior derecha, aparece cuando la ventana del Formulario se mueve a un monitor secundario. Al configurar el Form.SizeGripStyle en Auto, el valor predeterminado, que este problema desaparece y que los cursores y el cambio de tamaño de la ventana de formulario funcionan como deberían (cursores adecuados, etc.).

Cuestiones relacionadas