Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Yoghurt en 13 Enero 2013, 20:52 pm



Título: Como madres muevo un control en run-time?
Publicado por: Yoghurt en 13 Enero 2013, 20:52 pm
Hola buenos días. He buscado en muchos lugares y muy pocas webs hablan de como mover controles en tiempo de ejecución mas encima la web esta plagado de C# FoxPro .Net y otas variaciones que ni me interesan.  Lo que yo uso es el estandart C99 o C11 que es el más nuevo.

PellesC es mi IDE. Usando Windows.h

Bueno, como muevo un insignificante boton? ...tambien debo ocultar otro boton, un textbox y un label además de cambiarle el texto al boton que voy a mover de posición.

La ayuda se agradece muchísimo pues estoy aprendiendo recien C99.


Título: Re: Como madres muevo un control en run-time?
Publicado por: x64core en 14 Enero 2013, 06:51 am
MoveWindow (http://msdn.microsoft.com/es-es/library/windows/desktop/ms633534(v=vs.85).aspx) para mover
ShowWindow  (http://msdn.microsoft.com/en-us/library/windows/desktop/ms633548(v=vs.85).aspx) para mostrar/ocultar
SendMessage  (http://msdn.microsoft.com/en-us/library/windows/desktop/ms644950(v=vs.85).aspx) para cambiar texto

solamente necesitas el handle al control


Título: Re: Como madres muevo un control en run-time?
Publicado por: BlackZeroX en 15 Enero 2013, 06:46 am
SendMessage tiene una infinidad de funciones (Te podría "sustituir" MoveWindow(), ShowWindow() emular clicks, pulsaciones, etc ya que se especia-lisa en mandar mensajes).

SetWindowText (http://msdn.microsoft.com/en-us/library/windows/desktop/ms633546(v=vs.85).aspx) para cambiar texto.

Dulces Lunas!¡.


Título: Re: Como madres muevo un control en run-time?
Publicado por: x64core en 15 Enero 2013, 08:14 am
SendMessage tiene una infinidad de funciones (Te podría "sustituir" MoveWindow(), ShowWindow() emular clicks, pulsaciones, etc ya que se especia-lisa en mandar mensajes).

SetWindowText (http://msdn.microsoft.com/en-us/library/windows/desktop/ms633546(v=vs.85).aspx) para cambiar texto.

Dulces Lunas!¡.


SendMessage no puede "sustituir" como dices, si se utiliza SendMessage se estara saltando Mensajes de proceso de Windows tales como actualización de tamaño de
objetos de Ventanas, actualización de la region del cliente, mensajes que son usados por aplicaciones ( incluso por otros procesos ). por ejemplo
WM_PAINT para redibujar el area que ha sido cubierta por otra ventana/control de otros proceso. Crees que Microsoft creo tales funciones para nada? 
Así que porque implementar un ShowWindow o MoveWindow y hacer todo el trabajo manualmente?

Además, no hay razon de usar SetWindowText debido a que esta funcion termina usando los mensajes de windows. SendMessage es mejor
debido a que no solo puede cambiar el texto ( en este caso ) de un control del llamador sino también de otra aplicación/proceso.
Aprender muy bien a usar las funciones que ofrece Windows.


Título: Re: Como madres muevo un control en run-time?
Publicado por: BlackZeroX en 15 Enero 2013, 08:19 am

SendMessage no puede "sustituir" como dices, si se utiliza SendMessage se estara saltando Mensajes de proceso de Windows tales como actualización de tamaño de
objetos de Ventanas, actualización de la region del cliente, mensajes que son usados por aplicaciones ( incluso por otros procesos ). por ejemplo
WM_PAINT para redibujar el area que ha sido cubierta por otra ventana/control de otros proceso. Crees que Microsoft creo tales funciones para nada?  
Así que porque implementar un ShowWindow o MoveWindow y hacer todo el trabajo manualmente?

Además, no hay razon de usar SetWindowText debido a que esta funcion termina usando los mensajes de windows. SendMessage es mejor
debido a que no solo puede cambiar el texto ( en este caso ) de un control del llamador sino también de otra aplicación/proceso.
Aprender muy bien a usar las funciones que ofrece Windows.


SendMessage tiene una infinidad de funciones (Te podría "sustituir" MoveWindow(), ShowWindow() emular clicks, pulsaciones, etc ya que se especia-lisa en mandar mensajes).

SetWindowText (http://msdn.microsoft.com/en-us/library/windows/desktop/ms633546(v=vs.85).aspx) para cambiar texto.

Dulces Lunas!¡.

¿¿??

SetWindowText() también requiere el handle (de cualquier ventana accesible). Al final esta API llama a sendmessage() pero no te "enredas" con los mensajes es un poco mas simple.

P.D.: Cuando se manda el mensaje con SendMessage() me PARECE que se tiene que repintar el DC...

Dulces Lunes.


Título: Re: Como madres muevo un control en run-time?
Publicado por: x64core en 15 Enero 2013, 08:28 am
¿¿??

SetWindowText() también requiere el handle (de cualquier ventana accesible).

Dulces Lunes.

Bien entonces no siempre es bueno solo usar SendMessage no crees?
En cuanto a SetWindowtext La verdad que veo una función inútil, lo único que comprueba si es una handle valido y es perteneciente
al proceso del llamador de lo contrario no lo envía. pero si insistes con SetWindowtext porque crees que es mejor SetWindowText para cambiar el
texto de un Control o ventana hija ( como limitación ) en lugar de SendMessage con WM_SETTEXT?


Al final esta API llama a sendmessage()

Seguro, eso dije.

pero no te "enredas" con los mensajes es un poco mas simple.

Enredarse al escribir esto:

SendMessageW(Hwnd,WM_SETTEXT,0,lpStr);

?

P.D.: Cuando se manda el mensaje con SendMessage() me PARECE que se tiene que repintar el DC...

El texto no es una propiedad grafica nativa , no es necesario actualizar el area del cliente, no encontré algun texto que dijera incluso en la documentación oficial que era necesario actualizar el cliente. incluso se puede comprobar simplemente usando SendMessage + WM_SETTEXT .
de todas maneras si fuera necesario repintar es lo mismo que decir que usando SetWindowText tambien se necesita hacerlo.


Título: Re: Como madres muevo un control en run-time?
Publicado por: BlackZeroX en 15 Enero 2013, 08:36 am
Total ya tienes dos opciones define tu vertiente:

SetWindowtext().
SendMessage() con WM_SETTEXT.

Solo mencione una alternativa. Lo del DC creo que me exprese mal quería decir que se auto pintaba pero da igual no es el caso este tema le servira a mas de una persona.

P.D.: Me parece que el caso o problema es en la propia instancia del programa.
P.D.: Se nota que sabes bastante pero no hay necesidad de restregar cada palabra que necesidad de demostrar, me pregunto que diría un psicologo.

Dulces Lunas!¡.


Título: Re: Como madres muevo un control en run-time?
Publicado por: Yoghurt en 18 Enero 2013, 20:18 pm
Gracias! Vaya que manojo de variaciones. Probaré algunas =)