Cont. Actualizar ventana desde otro hilo

17/06/2004 - 10:27 por sandra_soria81 | Informe spam
Bueno, sigo a vueltas con lo de actualizar una ventana desde otro hilo; En
este foro, Rodrigo me indico que tenia que pasarle al hilo, el handle de
la ventana que quiero actualizar; Pero aun tengo problemas;


La ventana que quiero actualizar esta en una clase llamada
CDescargarArchivo, he de saber el hanlde de dicha ventana, y lo obtengo de
esta manera, con FindWindow, e indicando el nombre de la ventana, aunque
no se si lo de NULL es correcto;

CWnd* pExplo = CWnd::FindWindow("DescargarArchivo", NULL);

Lo que me da problemas es a la hora de pasarle el handle al hilo;

UINT HiloDescarga (LPVOID pNulo); Esta era la funcion del hilo, si hay que
pasarle el handle, tendra que tomar como parametro
UINT HiloDescarga (CWnd* pExplo), pero me da error

Tambien cuando creo el hilo con:
AfxBeginThread(HiloDescarga(pExplo,this); me produce error;

Supongo que hare muchas cosas mal, pero es que mis conocimientos con el
Visual son muy limitados, y me esta costando mucho ir avanzando;
Supongo que luego utilizando pExplo, podre actualizar dichas ventanas con
SendMessage; Muchas gracias de nuevo;

Preguntas similare

Leer las respuestas

#6 Rodrigo Corral [MVP]
17/06/2004 - 15:41 | Informe spam
No te rindas Sandra!!!! Todo buen programador debe saber utilizar hilos!!!!
Animo!!!!


Rodrigo Corral González [MVP]

microsoft.public.es.vc FAQ
http://vcfaq.europe.webmatrixhosting.net
Respuesta Responder a este mensaje
#7 sandra_soria81
18/06/2004 - 12:37 | Informe spam
Ufff, muchas gracias, es que son ya muchos dias, y no avanzo nada de nada;
Y eso que gracias a vosotros puedo seguir intentando cosas que si no... En
el libro que tengo de Ceballos no viene nada; El problema es actualizar la
caja de texto que quiero actualizar; He intentado obtener el handle de ese
control y no puedo, y eso que segui los pasos; El control que quiero
actualizar yo es una caja de texto, que la tengo en la clase principal, en
CProyectoView, que es lo que se ve al ejecutar el programa; Tengo el
dialogo IDD_PROYECTO, y luego la caja de texto IDC_TEXTO, y una variable
asociada a esa caja de texto de tipo CString m_sTexto; No se si lo que
tengo que obtener es el handle de esa caja de texto, o la del dialogo
entero; De todas formas, no me deja; Porque he de actualizar varias cajas
de texto del mismo dialogo; me dice que no puede hacer la conversion, no
se... Es desesperante!!!!!!!!

HWND handleTuVentana = tuVentana->GetSaveHwnd();

Tambien he intentado hacerlo de otra forma, sin necesidad de tener que
actualizar la ventana desde otro hilo (viendo los problemas ke me esta
ocasionando...), para eso llamaba al hilo desde otro lado, pero claro,
para eso el hilo digamos padre, tenia ke permanecer en espera hasta ke el
otro terminaba, una vez ahi escribiria descarga completada; pero seria
absurdo, ademas no se como hacer ke espere a ke termine otro hilo; Como
veis, ya pruebo de todo; Perdonada por la parrafada, pero tenia ke
deshaogarme!!!






Rodrigo Corral [MVP] wrote:

No te rindas Sandra!!!! Todo buen programador debe saber utilizar hilos!!!!
Animo!!!!
Respuesta Responder a este mensaje
#8 sandra_soria81
21/06/2004 - 10:54 | Informe spam
Bueno, semana nueva vida nueva, despues de desconectar el fin de semana,
tengo animos renovados; Aunque sigue el calvario

//Obtengo el handle del control que quiero, que es IDC_EVOLUCIONDESCARGA

CWnd* pBoton = GetDlgItem(IDC_EVOLUCIONDESCARGA);
HWND handleTuVentana = pBoton->GetSafeHwnd();

//Se lo paso en los parametros del hilo

AfxBeginThread(HiloDescarga, (LPVOID)handleTuVentana)
y una vez aqui se lo paso a la funcion que es la que va a realizar la
descarga y la posterior actualizacion

DescargarArchivo(Url,Directorio,Nombre, (LPVOID)handleTuVentana)

Y ya aqui es donde hago

HWND handleTuVentana = (HWND)pParams;
CDescargarArchivo* tuVentana = CWnd::FromHandle(handleTuVentana);

Para posteriormente actualizar ese dichoso control, pues bien me da el
siguiente error:

error C2440: 'initializing' : cannot convert from 'class CWnd *' to 'class
CDescargarArchivo *'
Respuesta Responder a este mensaje
#9 Sergio
21/06/2004 - 11:44 | Informe spam
Sandra escribió:
Bueno, semana nueva vida nueva, despues de desconectar el fin de semana,
tengo animos renovados; Aunque sigue el calvario

//Obtengo el handle del control que quiero, que es IDC_EVOLUCIONDESCARGA

CWnd* pBoton = GetDlgItem(IDC_EVOLUCIONDESCARGA);
HWND handleTuVentana = pBoton->GetSafeHwnd();

//Se lo paso en los parametros del hilo

AfxBeginThread(HiloDescarga, (LPVOID)handleTuVentana)
y una vez aqui se lo paso a la funcion que es la que va a realizar la
descarga y la posterior actualizacion

DescargarArchivo(Url,Directorio,Nombre, (LPVOID)handleTuVentana)

Y ya aqui es donde hago

HWND handleTuVentana = (HWND)pParams;
CDescargarArchivo* tuVentana = CWnd::FromHandle(handleTuVentana);

Para posteriormente actualizar ese dichoso control, pues bien me da el
siguiente error:

error C2440: 'initializing' : cannot convert from 'class CWnd *' to 'class
CDescargarArchivo *'







CDescargarArchivo* tuVentana =
(CDescargarArchivo*)CWnd::FromHandle(handleTuVentana);
Respuesta Responder a este mensaje
#10 sandra_soria81
21/06/2004 - 12:02 | Informe spam
Gracias Sergio, si eso lo hice nada mas escribir el mensaje, y no da el
error de de antes, pero da el mismo error de ejecucion que me daba cuando
no pasaba el handle y todo eso; No se, lo mismo estamos ante un expediente
x
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida