2010-05-12 20 views
9

Solo me pregunto si hay una forma conocida de obtener una aplicación Mono System.Windows.Forms para ir a pantalla completa en Ubuntu/Gnome.Pantalla completa de la aplicación Mono winforms en Ubuntu?

Mono es 2.4.2.3 Ubuntu 9.10 es

Hacerlo en Windows requiere una PInvoke, claramente no va a funcionar aquí.

Esto es lo que consigo el establecimiento de borde de la ventana a ninguno, posición de la ventana al jardín central, y el estado de maximizado:

alt text http://dl.dropbox.com/u/116092/misc/permalink/joggler/screenshot01.png

actualización.

también han intentado:

  • this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
    this.WindowState = System.Windows.Forms.FormWindowState.Maximized;

  • CTRL-F11

  • Text = String.Empty; // Sin subtítulos
    MaximizeBox = false;
    MinimizeBox = false;
    ControlBox = false;
    FormBorderStyle = None;
    WindowState = Maximized;

  • FormBorderStyle = FormBorderStyle.None;
    Location = new Point (0, 0);
    Tamaño = Screen.PrimaryScreen.Bounds.Size;

Todo lo cual termino con el mismo resultado.

He encontrado una pista que implica un pinvoke que implica _NET_WM_STATE_FULLSCREEN, pero eso es todo lo que tengo. Cualquier sugerencia sobre eso sería apreciado.

+0

¿Nada de nadie? – tomfanning

+0

esto es un caso de borde, buena suerte. – rook

+0

Sí, esa es la razón por la que pregunto :-) – tomfanning

Respuesta

2

_NET_WM_STATE_FULLSCREEN simplemente eliminará las fronteras. El panel de GNOME seguirá apareciendo.

acuerdo con el siguiente post, el secreto es deshacerse de la mínima y/o tamaños máximos para que el gestor de ventanas hace el cambio de tamaño en sí:

http://linux.derkeiler.com/Mailing-Lists/GNOME/2010-01/msg00035.html

Aquí es parte de la documentación de las especificaciones orígenes:

http://standards.freedesktop.org/wm-spec/wm-spec-latest.html

http://www.x.org/docs/ICCCM/icccm.pdf

Para hablar directamente con el sistema de ventanas X debe pinvoke en XLib. Para enviar algo como _NET_WM_STATE_FULLSCREEN, debe tener un puntero a la ventana y también a la pantalla.

No estoy seguro de cómo encontrar la pantalla pero puedo ayudar con un puntero a la ventana. Cuando se ejecuta en X, la propiedad Form.Handle debe ser un puntero a la ventana X.

+0

Hice una pequeña búsqueda a través de la fuente Mono y nada llama _NET_WM_STATE_FULLSCREEN. Me siento bastante cómodo al decir que no hay una forma totalmente administrada de enviar la sugerencia de ventana correcta al administrador de ventanas usando Mono. Puede usar GTK # por supuesto, ya que usa GTK + debajo y gtk_window_fullscreen() hace lo que quiere. – Justin

0

¿Has probado esto?

this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;    
    this.WindowState = System.Windows.Forms.FormWindowState.Maximized; 

Por desgracia no tengo Ubuntu disponible en este momento, pero puedo ver parches viejos para esto en viejas versiones mono ...

+0

Lamentablemente, eso no pasa por la barra de tareas en la parte superior de la pantalla (publicación actualizada con captura de pantalla) – tomfanning

+0

Ok, entonces intente encontrar la llamada C relevante para ir a pantalla completa.Llamar a funciones C nativas también funciona bajo Mono. Avíseme si tiene problemas allí, pero lo hice en el pasado. – weismat

+0

Hmmm, Google trae _NET_WM_STATE_FULLSCREEN. ¿Eso parece útil? – tomfanning

0

Debe ser posible visualizar cada aplicación que se ejecuta dentro de GNOME en modo de pantalla completa con la tecla de acceso directo "CTRL + F11".

Tal vez usted podría intentar

System.Windows.Forms.SendKeys.Send(); 

pero eso es sólo una suposición, no tengo un Linux ejecutando atm a probar esto. Pero tal vez esto ayude.

+0

No funciona :-( – tomfanning

0

No puedo probarlo por el momento, pero ¿ha intentado cambiar el tamaño de forma sencilla?

form.FormBorderStyle = FormBorderStyle.None 
form.Location = Point(0, 0) 
form.Size = Screen.PrimaryScreen.Bounds.Size 
+0

Otro que funciona bien en Windows pero el mismo resultado que la segunda captura de pantalla anterior. – tomfanning

2

No está seguro de lo que entendemos por "pantalla completa" - pero yo he escrito varias aplicaciones Windows.Forms que se apoderan de la pantalla, y sin un solo PInvoke.

Así es como puedo configurar mi forma principal ...

Text = string.Empty; // No caption 
MaximizeBox = false; 
MinimizeBox = false; 
ControlBox = false; 
FormBorderStyle = None; 
WindowState = Maximized; 

Opcionalmente,

TopMost = true; 

Espero que esto ayude.

+0

Eso funciona muy bien en Windows, que es genial, porque no sabía que podía hacer esto sin un pinvoke para ocultar la barra de tareas. Sin embargo, no hay tanta suerte en Mono: http://dl.dropbox.com/u/116092/misc/permalink/joggler/screenshot02.png – tomfanning

0

He solucionado esto por ahora estableciendo la propiedad de ocultación automática del panel.

No es ideal porque depende de que el usuario cambie su entorno para usar mi aplicación, pero es mejor que nada.

+0

¿Lo estás haciendo manualmente o en código? Si esto último, yo supongamos que siempre se puede alternar cuando su aplicación obtiene el foco. De esta manera, obtiene la pantalla completa, pero todas las demás aplicaciones se comportan como se espera y el sistema se deja como estaba cuando haya terminado. Por supuesto, tendría que comprobar la inicial para asegurarse de que no se haya ocultado automáticamente. Esto debería funcionar como usted quiere, incluso si se siente mal. – Justin

1

Necesita desactivar los efectos visuales en ubuntu.

editar: Y asegúrese de que el tamaño de su formulario sea al menos de resolución de pantalla sin bordes. Si los bordes están en tiempo de diseño y los está eliminando en código, necesitará algo como 1030x796 para una pantalla de 1024x768.

1

He sufrido este problema 2 días y finalmente recibí la solución: haga clic en el primer ícono en la barra de herramientas izquierda y busque el programa compizconfig. Vaya a preference-> unity y verá que hay un tick para el plugin unity en el lado izquierdo. Quita esa marca y verás desaparecer la barra de menú superior. Aunque este hilo es muy antiguo, aún espero poder ayudar a cualquiera que tenga este problema y busque ayuda.

Cuestiones relacionadas