c# - pantalla - Manejando diferentes resoluciones en Visual Studio 2008 para.NET CF
obtener resolucion de pantalla c# (5)
El anclaje y el acoplamiento es el mecanismo más común para manejar diferentes resoluciones (recuerde también que muchos dispositivos pueden rotar la pantalla, por lo que debe manejar los cambios incluso en un solo dispositivo). Obtener el tamaño de la pantalla, si es necesario después de eso, es tan simple como consultar el objeto Pantalla:
int screenWidth = Screen.PrimaryScreen.Bounds.Width;
int workingHeight = Screen.PrimaryScreen.WorkingArea.Height;
Estoy desarrollando una aplicación de gráficos basada en .NET CF, mi proyecto implica una gran cantidad de imágenes de dibujo, decidimos utilizar la resolución de diferentes dispositivos (240 X 240, 480 X 640), etc.
¿Cómo podría lograr esto dentro de una única solución / proyecto?
¿Existe la necesidad de crear diferentes proyectos basados en resoluciones? ¿Cómo manejaría los archivos comunes? y necesito que los cambios en una de las clases comunes ocurran en todos los dispositivos.
Gracias, Cronos
Este código me ha funcionado para determinar la resolución de la pantalla de forma dinámica:
[DllImport("coredll.dll", EntryPoint = ("GetSystemMetrics"))]
public static extern int GetSystemMetrics(int nIndex);
private const int SM_CXSCREEN = 0;
private const int SM_CYSCREEN = 1;
private int width = GetSystemMetrics(SM_CXSCREEN);
private int height = GetSystemMetrics(SM_CYSCREEN);
No lo recuerdo de la parte superior de mi cabeza, pero también hay una manera de obtener la orientación de la pantalla. Esto ayudaría a fusionar algunos códigos en una sola clase.
Recomiendo encarecidamente crear una solución única para todas las resoluciones. Podría tener tantos proyectos como desee bajo esta solución. Estos proyectos podrían ser aplicaciones de Windows Forms, proyectos de biblioteca Dll o proyectos de configuración.
Me gustaría crear un único proyecto de aplicación de formularios de Windows. Usaría la técnica anterior y leería las imágenes estáticas del sistema de archivos. Si esto no funciona para usted y / o prefiere leer sus imágenes como recursos, cree un proyecto dll ''engine'', que contenga todo el código común a todas las resoluciones. A continuación, agregue el resultado de este proyecto como referencia a todos los proyectos de Windows Forms Applications que necesite.
No hay una respuesta simple a esta pregunta. Diseñar formularios para manejar diferentes resoluciones de pantalla es fácil de hacer en Windows donde incluso el tamaño de pantalla más pequeño suele ser de 600 x 800. En el mundo de CF, la pantalla puede ser tan pequeña como 240 x 240 (o más pequeña para teléfonos inteligentes) o tan grande como 640 x 480 (o más). El anclaje y el acoplamiento tienden a funcionar muy mal en estos rangos de tamaño.
Una opción es usar un enfoque de mínimo denominador común y diseñar todo para que quepa en la pantalla más pequeña posible. Esto está garantizado para funcionar en todos los dispositivos, pero obviamente perderá espacio útil en pantallas más grandes.
Otra opción es diseñar cada formulario para que sea consciente de la resolución. Por ejemplo, si tiene un formulario que muestra datos en una cuadrícula y un cuadro combinado de filtro encima, puede escribir código en el evento Resize del formulario que ajusta las dimensiones de la cuadrícula para llenar el espacio disponible.
Una opción alternativa al código de resolución consciente es crear un formulario separado para cada resolución para una función de IU particular. Esto es más trabajo y conduce a la duplicación de código, por supuesto, pero para algunas funciones particulares, esto es algo que tienes que hacer. Mientras abstraigas la lógica común, estarás bien.
Tiene la idea correcta de querer lograr esto en un solo proyecto. Las diferentes resoluciones de pantalla generalmente se pueden manejar con un poco de trabajo y reflexión, y definitivamente no son motivo para dividir su producto en diferentes proyectos.
Dejé de lado al diseñador para todas las aplicaciones compactas menos básicas. Intento colocar cada control matemáticamente usando las dimensiones de la pantalla. Suena doloroso, pero una vez que te vas, se convierte en una segunda naturaleza.
Para cada formulario, creo un método ''regenerar'' que se activa cada vez que se muestra o cambia el tamaño del formulario. En ese método, generalmente establezco la ubicación, el tamaño y, si es necesario, el tamaño de fuente para cada control en el formulario. Al colocar el control, mi proceso de pensamiento es:
- ¿Está bien para un dispositivo de retrato normal?
- OK para el dispositivo de paisaje regular?
- OK para el dispositivo cuadrado?
- ¿Está bien para dispositivos VGA (640x480) (alto DPI)?
Para tamaños de fuente y para tratar con dispositivos VGA de alta resolución (puntos por pulgada), uso la propiedad:
CurrentAutoScaleDimensions.Height / 96
... para producir un factor de escala de fuente. (Los dispositivos normales son 96 DPI)
Como último recurso, puede usar sentencias condicionales (if) en su código regenerado para probar varios tamaños / formas de pantalla.
Todavía es posible utilizar el diseñador para el diseño básico, pero deberá ejecutar los formularios en varios emuladores / dispositivos e intentar alternar retrato / paisaje para probar completamente los métodos ''regenerar''.
No escuches a ese idiota MusiGenesis. Una forma mucho mejor de manejar diferentes resoluciones de pantalla para dispositivos con Windows Mobile es usar herencia de formularios , que se puede agregar a una aplicación existente de CF con un mínimo esfuerzo.
Básicamente, diseñas cada formulario para una pantalla estándar de 240x320. Cuando necesite volver a organizar un formulario para una nueva resolución (digamos 240x240), agregue un nuevo formulario a su proyecto y haga que herede su formulario original de 240x320:
public partial class frmDialog240x240: frmDialog
en lugar de solo forma:
public partial class frmDialog240x240: Form
como de costumbre. En su formulario original, debe establecer la propiedad Modificadores de cada control en Protegido (en lugar del valor predeterminado Privado). En el diseñador de su nuevo formulario, verá todos los controles en el formulario que está heredando, y puede moverlos y redimensionarlos como lo considere conveniente para acomodar las nuevas dimensiones de la pantalla (esto no afectará el formato original diseño).
Cuando su programa se está ejecutando, es fácil que verifique la resolución de pantalla del dispositivo en el que se está ejecutando y cree la forma adecuada (un método de fábrica es bueno para esto). Su nueva forma hereda todo del formulario antiguo, pero usa su nuevo diseño personalizado.
Este enfoque le permite evitar la duplicación de código, porque no hay ninguno.