Centrar la ventana

Started by blostec, October 29, 2008, 04:12:20 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

blostec

Veréis he estado haciendo una pruebas para mostrar la ventana del juego en el centro, he utilizado el mod_wm para conseguirlo, mi pregunta es si existe alguna función para que la ventana por defecto este centrada en la pantalla o hay que hacerlo manualmente. Os dejo el código de como lo he hecho, no es el centro exacto porque habría que considerar el tamaño del marco de la ventana.

Actualizado: Corregido el código para mostrar la ventana correctamente en el centro usando la función GET_WINDOW_SIZE.

[code language="bennu"]
//Ejemplo de como centrar la ventana en la pantalla
//compilado con la r34

PROGRAM Centrar;

import "mod_key.dll";
import "mod_video.dll";
import "mod_proc.dll";
import "mod_map.dll";
import "mod_text.dll";
import "mod_screen.dll";
import "mod_wm.dll";

//******************************************************************

GLOBAL

pantalla_x = 320;      //modo de video x
pantalla_y = 200;      //modo de video y
colores = 16;          //color 8, 16, 32 bits
alto, ancho;           //para guardar resolucion pantalla
ventana_x, ventana_y;  //para guardar tamaño de la ventana


//******************************************************************

BEGIN

set_mode(pantalla_x, pantalla_y, colores);

//obtener resolucion pantalla
get_desktop_size(&ancho, &alto);

//obtener tamaño ventana y modo de video 
get_window_size(&ventana_x, &ventana_y, &pantalla_x, &pantalla_y);                         
                       
//centra la ventana
set_window_pos((ancho/2)-(ventana_x/2), (alto/2)-(ventana_y/2));     

load_fpg("centrar.fpg");
put_screen(0,1);

write(0,60,165,3,"Pulsa ALT y ENTER para mostrar");
write(0,60,175,3,"pantalla completa o ventana");
write(0,60,190,3,"Pulsa ESC para salir.");

while (!(key(_esc)))
      //pasar de ventana a pantalla completa y viceversa
      if  ((key(_ALT))  and (key(_ENTER))) 
           full_screen = not full_screen;
           set_mode(pantalla_x, pantalla_y, colores);
     end
     frame;
end

let_me_alone();

END
[/code]

También os adjunto el ejemplo compilado por si alguien lo quiere ver in situ.

SplinterGU

tenes la funcion

GET_WINDOW_SIZE(int *winwidth, int *winheight, int *screenwidth, int *screenheight)

o sea, los 2 primeros es el tamaño de la ventana incluyendo los marcos y los 2 segundos es el tamaño de la ventana que corresponde al ancho y alto seteado con set_mode.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

La momia que fuma

Blostec, tal como lo tienes tu, pero cogiendo el tamaño de la ventana de los 2 primeros parametros de la función que menciona splinter, a mi me va de lujo.

(Gracias por la idea, por cierto, no estaba familiarizado con las funciones de ventana y esto me ha servido de práctica :P)

SplinterGU

bueno, estas funciones son propias de bennu, la version fenix tenia pocas de estas (solo move_window, minimize, set_icon y set_title... el resto son todas nuevas), por eso es logico que no estes familiarizado...
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

La momia que fuma

Es que tampoco estaba familiarizado con las de Fenix, nunca me puse a hurgar con la ventana hasta hoy XD

TYCO

Se supone que todo esto de mover la ventana y tal funciona en todas las plataformas (linux, etc) o no???
Programador, Escritor/Guionista y Deportista.

Todo Modo Gráfico tiene por detrás una Línea de Comandos.

SnowCraft Remake (100%)
Rally Mortal (87%)

SplinterGU

Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Danielo515

A partir de que version de bennu está disponible get_desktop_size?? porque el compilador de la wip_11 me dice que es una función no definida.

Gracias.

SplinterGU

tenes que usar la ultima version, no te cambia nada a nivel codigo.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Danielo515

Gracias splinter. Lo he vuelto a probar y ahora sí que me funciona el código con la última versión (no el de la ventana, sino el código de la aplicación en general). Hace dos días ese mismo código no funcionaba con la última versión, de hecho, hace dos horas no funcionaba en un pendrive, luego funcionó en el disco duro de un tercer ordenador y al recopiarlo al pendrive, también funcionaba. Yo empiezo a pensar que esto tiene tintes satánicos....

Danielo515

Por lo que veo algo sí que cambió. Antes cuando llamabas al programa sin nada el numero de argumentos era 0, ahora sin embargo el numero de argumentos es uno. Personalmente me parecía más claro cuando el número de argumentos era 0, y argv[argc] era el último argumento. Ahora hay que hacer argv[argc-1] para acceder al último argumento ¿cierto?

SplinterGU

ahora es como es en C... antes no funcionaba del toco bien...
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Windgate

Splinter, he abierto un nuevo hilo para el tema, pero como veo que aquí se habla de set_icon() y es un tema activo aprovecho...

No me funciona set_icon(), he probado todo y no hay manera, ¿Alguien sabe algo sobre esta función?
Iván García Subero. Programador, profesor de informática, monitor de actividades culturales y presidente de TRINIT Asociación de Informáticos de Zaragoza. http://trinit.es

blostec

Te he respondido lo del icono en tu post.

blostec

Aprovecho la ocasión para corregir el ejemplo usando la función GET_WINDOW_SIZE tal y cómo me aconsejó SplinterGU y la momia. Actualizado el primer post.