Como madres muevo un control en run-time?

Iniciado por Yoghurt, 13 Enero 2013, 20:52 PM

0 Miembros y 1 Visitante están viendo este tema.

Yoghurt

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.

x64core

MoveWindow para mover
ShowWindow para mostrar/ocultar
SendMessage para cambiar texto

solamente necesitas el handle al control

BlackZeroX

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 para cambiar texto.

Dulces Lunas!¡.
The Dark Shadow is my passion.

x64core

Cita de: BlackZeroX (Astaroth) 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 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.

BlackZeroX

#4
Cita de: x64Core en 15 Enero 2013, 08:14 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.


Cita de: BlackZeroX (Astaroth) 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 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.
The Dark Shadow is my passion.

x64core

#5
Cita de: BlackZeroX (Astaroth) en 15 Enero 2013, 08:19 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?


Cita de: BlackZeroX (Astaroth) en 15 Enero 2013, 08:19 AM
Al final esta API llama a sendmessage()

Seguro, eso dije.

Cita de: BlackZeroX (Astaroth) en 15 Enero 2013, 08:19 AM
pero no te "enredas" con los mensajes es un poco mas simple.

Enredarse al escribir esto:

SendMessageW(Hwnd,WM_SETTEXT,0,lpStr);

?

Cita de: BlackZeroX (Astaroth) en 15 Enero 2013, 08:19 AM
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.

BlackZeroX

#6
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!¡.
The Dark Shadow is my passion.

Yoghurt

Gracias! Vaya que manojo de variaciones. Probaré algunas =)