• Miércoles 20 de Noviembre de 2024, 12:26

Autor Tema:  Cursor Del Mouse  (Leído 3409 veces)

JuanK

  • Miembro de ORO
  • ******
  • Mensajes: 5393
  • Nacionalidad: co
    • Ver Perfil
    • http://juank.io
Cursor Del Mouse
« en: Sábado 25 de Septiembre de 2004, 05:58 »
0
saludos,
estoy tratando de crear mi propiopountero de mouse para mostrar con directdraw dentro de un juego, para tal fin solo le diogo a nu dibujo que se dibuje tomando como coordenada la posicion del mouse en el formulario.

Para lograrlo tomo la posicion del mouse en pantalla a travez de Control.MousePosition y luego la convierto a posicion delmouse dentro de la forma usando
punto = forma.PointToClient(Control.MousePosition);

y luego solo dibujo en una surface secundaria de 640*480 para luego hacer blit en la superficie principal.

Todo me funciona OK!

pero cuando cambio de tamaño la forma el mouse no se comporta como yo esperaria y al parecer sigue conviertiendo las coordenadas como sino hubiese cambiado el tamaño de la forma.. lo cual ocaciona muchos problemas ya que aunque el mouse este por fuera de la froma al disminuir el tamaño, el dibujoi que se supone hace las veces de cursor se dibuja dentro de la forma en posiciones que no tienen  que ver con la del mouse.. como se ve en el dibujo...

Que puedo hacer para solucionar esto?
alguien ha logrado mover el mouse dentro dentro de una superficie de directdraw
sin que el comportamiento del dibujo que hace las veces de mouse  se altere al cambiar el tamaño de la forma?

agradezco cualquier idea.

Este es el codigo que recalcula la posicion:
Código: Text
  1.  
  2. p = forma.PointToClient(Control.MousePosition);
  3.  
  4.  

Este es el codigo donde se dibuja en la superficie secundaria:
Código: Text
  1.  
  2. surSecundaria.DrawFast(p.X, p.Y, sf,dff);
  3.  
  4.  
donde sf es el dibujo del cursor y dff son los flags para el color de mascara.

Este es el codigo donde se dibuja la superifie secundaria en la superficie principal:
Código: Text
  1.  
  2. rectangulo = new Rectangle(propietario.PointToScreen(new Point(0,0)),forma.ClientSize);
  3. surPrimaria.Draw(rectangulo,surSecundaria , DrawFlags.Wait);
  4.  
  5.  

donde rectangulo es el area donde se debe dibnujar la superficie secundaria, es decir es el area de la forma.
forma.. pues es la forma
y propietario es el equivalente a forma.Control
El mensaje contiene 1 archivo adjunto. Debes ingresar o registrarte para poder verlo y descargarlo.
[size=109]Juan Carlos Ruiz Pacheco
[/size]
Microsoft Technical Evangelist
@JuanKRuiz
http://juank.io

Ruben3d

  • Miembro HIPER activo
  • ****
  • Mensajes: 710
  • Nacionalidad: es
    • Ver Perfil
    • Web personal
Re: Cursor Del Mouse
« Respuesta #1 en: Sábado 25 de Septiembre de 2004, 13:32 »
0
Hola.

No uso DirectX, pero con OpenGL me encontré con una situación similar. Cuando creo la ventana (digamos de 640x480) configuro el viewport donde se pinta al mismo tamaño (glViewport). A continuación (para gráficos 2D) uso glOrtho para configurar el rango de coordenadas. Si las configuro igual que las del viewport, si el mouse está en la coordenada del formulario (23,56) y lo pinto en el mismo lugar, coincidirá. Pero si el rango de coordenadas es diferente al tamaño del viewport ya no coinciden. Esto sucede cuando redimensiono la ventana: la cambio de tamaño y proporción, y las coordenadas virtuales para pintar siguen siendo 640x480, aunque el tamaño de la ventana sea otro. Esto viene bien porque todo lo que se pinte se cambia solo de proporción para ajustarse al nuevo tamaño, pero no coincide ya la coordenada del ratón.

Como solución, puedes averiguar el tamaño real del formulario y convertir la coordenada del ratón a coordenada virtual. Yo lo que hago es usar la API de Windows para establecer un cursor, así es el Windows el que se encarga de pintar en el lugar apropiado (aunque hay efectos que no se pueden realizar así).

Un saludo.

Ruben3d

JuanK

  • Miembro de ORO
  • ******
  • Mensajes: 5393
  • Nacionalidad: co
    • Ver Perfil
    • http://juank.io
Re: Cursor Del Mouse
« Respuesta #2 en: Domingo 26 de Septiembre de 2004, 05:28 »
0
Gracias Ruben..
si he estado mirando lo de las proporciones con respecto a la ventana... pero algo sigue fallando y no he podido determinar que es...
en todo caso el problema es tal como lo has pintado...
si llego a una solucion te lo hare saber.

Gracias!!!

Le pegare una revisada de nuevo a lo de las ventanas para ver si me falto tener en cuenta algo.
[size=109]Juan Carlos Ruiz Pacheco
[/size]
Microsoft Technical Evangelist
@JuanKRuiz
http://juank.io

JuanK

  • Miembro de ORO
  • ******
  • Mensajes: 5393
  • Nacionalidad: co
    • Ver Perfil
    • http://juank.io
Re: Cursor Del Mouse
« Respuesta #3 en: Domingo 26 de Septiembre de 2004, 11:26 »
0
Hola,
aca esta la solución:
Solución
[size=109]Juan Carlos Ruiz Pacheco
[/size]
Microsoft Technical Evangelist
@JuanKRuiz
http://juank.io

Ruben3d

  • Miembro HIPER activo
  • ****
  • Mensajes: 710
  • Nacionalidad: es
    • Ver Perfil
    • Web personal
Re: Cursor Del Mouse
« Respuesta #4 en: Domingo 26 de Septiembre de 2004, 15:11 »
0
Hola.

Felicidades por el éxito. Gracias por compartir la solución. Parece una de las que te di (aunque usa porcentajes en vez de convertir directamente a coordenadas virtuales).

Un saludo.

Ruben3d

JuanK

  • Miembro de ORO
  • ******
  • Mensajes: 5393
  • Nacionalidad: co
    • Ver Perfil
    • http://juank.io
Re: Cursor Del Mouse
« Respuesta #5 en: Martes 28 de Septiembre de 2004, 04:27 »
0
si son parecidos en principio,
sin embargo al plantar mi primera solucion (la cual como ya lo mencione es igual a la que me sugeriste) me encontre con muchos problemas,
principalmente porque el sistema aparenta ser solo cuestion de proporciones y ya ,
pero realmente cuando profundice un poco mas me di cuenta de que se trataba de un sistema de proporciones y variantes entre tres rectangulos:
tamaño de la superficie
tamaño de la ventana -o tamaño del area cliente
tamaño real del area cliente (es decir al escalarlo)

y con el otro planteamiento (por lo menos yo) no veia sino dos rectangulos
tamaño de la superficie
tamaño de la ventana

asi que ya se ponia como complicado pero lo de la proporcion porcentual relativa a la escala es mas sencillo.
[size=109]Juan Carlos Ruiz Pacheco
[/size]
Microsoft Technical Evangelist
@JuanKRuiz
http://juank.io

Ruben3d

  • Miembro HIPER activo
  • ****
  • Mensajes: 710
  • Nacionalidad: es
    • Ver Perfil
    • Web personal
Re: Cursor Del Mouse
« Respuesta #6 en: Viernes 1 de Octubre de 2004, 14:21 »
0
De acuerdo, en OpenGL funciona como te dije, pero esto es DirectX  :)

Un saludo.

Ruben3d

JuanK

  • Miembro de ORO
  • ******
  • Mensajes: 5393
  • Nacionalidad: co
    • Ver Perfil
    • http://juank.io
Re: Cursor Del Mouse
« Respuesta #7 en: Sábado 2 de Octubre de 2004, 16:11 »
0
lo tendre en cuenta si me pasa en OpenGL  :rolleyes:

Gracias Ruben
[size=109]Juan Carlos Ruiz Pacheco
[/size]
Microsoft Technical Evangelist
@JuanKRuiz
http://juank.io