Foros del Web » Programación para mayores de 30 ;) » C/C++ »

[SOLUCIONADO] scroll bar en win 32 aplicación de windows

Estas en el tema de scroll bar en win 32 aplicación de windows en el foro de C/C++ en Foros del Web. Hola, estoy haciendo unos gráficos mediante la librería de pauek disponible: [URL="http://miniwin.readthedocs.org/en/latest/"]http://miniwin.readthedocs.org/en/latest/[/URL] El tipo de proyecto es de ventana win 32, uso el IDE visual ...
  #1 (permalink)  
Antiguo 27/07/2014, 20:19
 
Fecha de Ingreso: junio-2014
Mensajes: 144
Antigüedad: 9 años, 10 meses
Puntos: 1
scroll bar en win 32 aplicación de windows

Hola, estoy haciendo unos gráficos mediante la librería de pauek disponible:

[URL="http://miniwin.readthedocs.org/en/latest/"]http://miniwin.readthedocs.org/en/latest/[/URL]

El tipo de proyecto es de ventana win 32, uso el IDE visual studio 2013, y quiero poner un scroll bar horizontal, supongo que es una librería o algo así.

Saludos
  #2 (permalink)  
Antiguo 28/07/2014, 01:59
Avatar de vangodp  
Fecha de Ingreso: octubre-2013
Mensajes: 934
Antigüedad: 10 años, 6 meses
Puntos: 38
Respuesta: scroll bar en win 32 aplicación de windows

Estas usando una libreria de juegos.
Debes trabajar como si de un juego se tratara.

Un juego no es mas que un bucle que en el caso de los juegos se llama gameloop. Se lo explique esa semana en el juego de los 100 XD

En ese gameloop se pinta la imagen varias veces por segundo. Si borras una imagen de un lugar la pintas unos pixeles mas adelante y haces eso varias veces por segundo da la impresión de movimiento para ser convincente necesitas al menos unos 24 fotogramas por segundo. Seguro que el ordenador te va a dar muchos mas por que es una animación simples(solo se trata de simples lineas).

Pues bien en miniwin dispones de funciones de ratón que te devuelven coordenadas del ratón, teclas pulsadas y yo que se que mas XD

Según su creador en su pagina la función de raton raton_x() devuelve la coordenada X. La puedes guardar en una variable:
y = raton_x();

Al igual que la coordenada Y:
y = raton_y();

Junto con raton_boton_izq() que nos devuelve un true si el botón izquierdo del ratón esta presionado pues podemos liar parda >_<.

O sea que podemos hacer un programa que detecte si las coordenadas del ratón están dentro de los limites del rectángulo, y si es así al hacer click izquierdo dentro del rectángulo las coordenadas del rectángulo sean las del ratón :D.

No es fácil de hacer como lo es de hablar pero no le veo muy jorobado tampoco. XD

Voy a probar hacer un ejemplo y te lo pongo aquí para que veas si consigo.

No creo que haya otra librería por que aun así no se si se va integrar con la otra por que es ella la que maneja la ventana. Eso eres tu quien debe añadir si quieres nuevas funcionalidades.

Te voy a poner un ejemplo y ya te las tienes que engeñar. Dame un tiempillo ;)
Hasta luego.
  #3 (permalink)  
Antiguo 28/07/2014, 05:22
 
Fecha de Ingreso: junio-2014
Mensajes: 144
Antigüedad: 9 años, 10 meses
Puntos: 1
Respuesta: scroll bar en win 32 aplicación de windows

Hola, te he entendido muy bien muchas gracias, estaré atento a tu respuesta.
  #4 (permalink)  
Antiguo 28/07/2014, 07:02
Avatar de vangodp  
Fecha de Ingreso: octubre-2013
Mensajes: 934
Antigüedad: 10 años, 6 meses
Puntos: 38
Respuesta: scroll bar en win 32 aplicación de windows

Te he echo este código.

Es algo sencillo pero te va servir para comprender el problema y para que veas las soluciones que le puedes dar.
Código C++:
Ver original
  1. #include "miniwin.h"
  2. #include <iostream>
  3. #include <cmath>
  4.  
  5. using namespace miniwin;
  6.     int ancho = 800;             //anchura de la ventana
  7.     int alto  = 600;             //altura de la ventana
  8.     float x     = ancho/2;       //coordenada x inicia en medio de la ventana
  9.     float y     = alto/2;        //coordenada y inicia en medio de la ventana
  10.     float rx;                    //variable para guardar coordenada x del raton
  11.     float ry;                    //variable para guardar coordenada y del raton
  12.     float distancia;             //variable para guardar la distancia del centro del circulo y el raton
  13.     int borde_izquierdo = 0;     //borde izquierdo es el inicio del lado derecho de la ventana y es 0
  14.     int borde_derecho   = ancho; //borde derecho es e el contrario y es igual que el ancho que elejimos antes
  15.     int retraso         = 10;    //retraso es el tiempo que tarda cada loop, es similar a sytem("pause");
  16.     int velocidad       = 5;     //velocidad a la que se desplaza la pelota
  17.     int radio           = 20;    //radio de la pelota
  18.     int t;                       //variable para guardar tecla pulsada.
  19.  
  20.  
  21. int main(){
  22.     //creamos una ventana del tamaño de ancho por alto 800x600 en mi ejemplo pero se puede cambiar.
  23.     vredimensiona(ancho, alto);
  24.    
  25.     //GAMELOOP
  26.     while ( true ) {
  27.     //LOGICA DE JUEGO
  28.         //movemos con las fleshas del teclado por si te gusta asi XD
  29.         t = tecla();
  30.         if(t==IZQUIERDA){
  31.             x-=velocidad;
  32.         }
  33.         if(t==DERECHA){
  34.             x+=velocidad;
  35.         }
  36.         if(t==ARRIBA){
  37.             y-=velocidad;
  38.         }
  39.         if(t==ABAJO){
  40.             y+=velocidad;
  41.         }
  42.  
  43.         //movemos con el raton
  44.         rx = raton_x();
  45.         ry = raton_y();
  46.  
  47.         //grarda en la variable distancia la distancia entre el centro del circulo y el raton, lo usaremos para saber si estamos dentro del circulo con el raton.
  48.         distancia = sqrt( pow( rx - x, 2) + pow(ry - y, 2));        
  49.        
  50.         if( raton_boton_izq() == true && distancia < radio ){
  51.            x = raton_x();
  52.            y = raton_y();
  53.         }
  54.  
  55.        
  56.     //PINTAMOS CAMBIOS    
  57.         color(VERDE);
  58.         circulo_lleno( x, y, radio); //creamos un circulo de color ver en las coordenadas x,y del tamaño de la variable radio
  59.         refresca();                  //mostra el resultado en pantalla
  60.         borra();                     //borra la imagen antes de hacer todo otravez
  61.         espera(retraso);             //similar a system("pause");
  62.     }//FIN GAMELOOP
  63.  
  64.     return 0;
  65. }

puedes usar el raton o las fleshas para mover el circulo verde ;)
No te va resolver el problema por que simplemente te muestra la mecánica.

Deberías poner un rectángulo de fondo y pegar las imágenes en el y no en la ventana. Así si mueves el rectángulo lo mueves todas las imágenes que estén en el.

o sea el rectángulo se basa en la esquina de la ventana y las imágenes se basan en las coordenadas del rectángulo.
Si mueves el fondo se mueven todas las imágenes. =D
A ver que te parece XD
  #5 (permalink)  
Antiguo 28/07/2014, 07:35
 
Fecha de Ingreso: junio-2014
Mensajes: 144
Antigüedad: 9 años, 10 meses
Puntos: 1
Respuesta: scroll bar en win 32 aplicación de windows

Hola, muchas gracias nuevamente vangodp, ya eres mi ángel de la guarda del c++ xD, estaré pendiente para poder retribuir esta ayuda con los demás en este foro.

Te comento que ya lo he podido hacer, con los cursores, en esencia definí un x, el cual incluí dentro de todo lo que pintaba, cuando detectaba la tecla de movimiento se hacia
Código C++:
Ver original
  1. x = x + dx
Borraba todo y pintaba de nuevo.

Todo quedo super. Gracias :D, si deseas ver el código o el programa me avisas para subirlo.
  #6 (permalink)  
Antiguo 28/07/2014, 08:16
Avatar de vangodp  
Fecha de Ingreso: octubre-2013
Mensajes: 934
Antigüedad: 10 años, 6 meses
Puntos: 38
Respuesta: scroll bar en win 32 aplicación de windows

Pues claro que si ;).
No te olvides que esa ayuda sigue ahí para mas personas que busquen.
Pon el souce aquí ;)

Etiquetas: bar, scroll, win32
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 11:15.