Foros - Stratos

Programadores => General Programadores => Mensaje iniciado por: MChiz en 12 de Noviembre de 2002, 11:53:21 AM

Título: Hola! Windows malo... : (
Publicado por: MChiz en 12 de Noviembre de 2002, 11:53:21 AM
                                Hola a todos!

Estoy liado con la funcioncilla de Windows "SetWindowLong". Siempre me da error. Miro que el handle sea valido, esta en el mismo thread ( porque no uso mas ^_^ ), en fin... no se que hacer! Siempre me da 0 ( y el valor que yo le paso, no lo es ni lo puede ser nunca, ya que es una direccion de memoria ( of course que nunca es nulo ) ).
Si alguien tiene alguna idea, agradeceria mucho que me la diese!
Un saludote y gracias!                                
Título: Hola! Windows malo... : (
Publicado por: Juan Mellado en 12 de Noviembre de 2002, 09:11:30 PM
Hola MChiz.

Asi de entrada es dificil decir algo, con los datos que das. Sólo comentarte lo que dice la ayuda del API: que SetWindowLong() retorna el valor anterior al que tenía el long que estás modificando. Si el valor anterior es 0 entonces se debe mirar GetLastError(). Y para evitar problemas, resetear antes el último error con SetLastError(0).

A mi nunca me ha dado problemas. Es una función bastante "antigua", de las clásicas. Los programas más recientes deberían utilizar SetWindowLongPtr().

En fín, nada que no diga la ayuda.
Saludos.
Título: Hola! Windows malo... : (
Publicado por: MChiz en 12 de Noviembre de 2002, 09:37:38 PM
                                Si, perdon. He sido poco concreto.
Pues veras, el error que me devuelve es el 6 ( handle invalido ), pero no entiendo porque me dice eso... despues de hacer muchas pruebas, he encontrado en GameDev un articulo de esto, y lo hago bien ( en teoria, claro ). Hay algun factor al crear la ventana que intervenga? Tiene que ser WNDCLASSEX o puede ser WNDCLASS? Quizas la funcion CreateWindow en vez de CreateWindowEx? Aunque todo esto lo dudo...
Ah, como segundo parametro le doy GWL_USERDATA.
Probare la nueva funcion que me dices y lo del SetLastError.
Gracias!

PD: Estooo... acabo de ver que no tengo la funcion SetWindowLongPtr ^_^. No esta tampoco en las MSDN. Es algo nuevo del .NET? Tengo Visual C++ 6.                                
Título: Hola! Windows malo... : (
Publicado por: Juan Mellado en 12 de Noviembre de 2002, 11:00:20 PM
Lo de handle inválido parece indicar que el handle de la ventana no es válido. ¿?.

Prueba con un proyecto sencillo, que sólo haga eso. Crear una ventana y llamar a SetWindowLong(). A ver si el problema está por otro sitio, es un efecto lateral, y lo estás detectando ahí.

Hace poco posteé un link con un ejemplo en el que utilizaba SetWindowLong(), y no recuerdo que tuviera que hacer ninguna inicialización especial:
http://es.geocities.com/bou_bou_pe/win32_01.html

Lo del SetWindowLongPtr() lo leí directamente de la ayuda de un CD de MSDN. Era documentación sujeta a cambio, y se ve que finalmente decidieron no implementar (de momento) esa función.

En fin, no parece que te esté ayudando mucho.
Saludos y suerte.
Título: Hola! Windows malo... : (
Publicado por: MChiz en 12 de Noviembre de 2002, 11:11:04 PM
                                Hola!
Lo primero es darte las gracias por contestar mis dudas : )
He mirado el link que me has dado y... es lo que yo hago : (
Hare lo que me dices de crear un proyecto a parte y lo probare.
Muchas gracias!!
Un saludote!