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

#1 Sergio
17/06/2004 - 10:48 | Informe spam
Sandra escribió:
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;







puedes hacer lo siguiente

UINT HiloDescarga(LPVOID pVentana)
{
CDlg *dlg = (CDlg*) pVentana); //Así ya tienes el puntero a la ventana
..
}

CWnd* pExplo = CWnd::FindWindow("DescargarArchivo", NULL);
AfxBeginThread(HiloDescarga,(LPVOID)pExplo);
Respuesta Responder a este mensaje
#2 sandra_soria81
17/06/2004 - 11:25 | Informe spam
En primer lugar, muchas gracias por contestarme; No se que puede ser, me
pasa igual que antes, no me da fallo al compilar, pero en tiempo de
ejecucion, cuando llega a la linea donde intento actualizar me produce una
excepcion;

Sergio wrote:

puedes hacer lo siguiente

UINT HiloDescarga(LPVOID pVentana)
{
CDlg *dlg = (CDlg*) pVentana); //Así ya tienes el puntero a la ventana
..
}

CWnd* pExplo = CWnd::FindWindow("DescargarArchivo", NULL);
AfxBeginThread(HiloDescarga,(LPVOID)pExplo);
Respuesta Responder a este mensaje
#3 Sergio
17/06/2004 - 12:48 | Informe spam
Sandra escribió:
En primer lugar, muchas gracias por contestarme; No se que puede ser, me
pasa igual que antes, no me da fallo al compilar, pero en tiempo de
ejecucion, cuando llega a la linea donde intento actualizar me produce una
excepcion;

Sergio wrote:

puedes hacer lo siguiente


UINT HiloDescarga(LPVOID pVentana)
{
CDlg *dlg = (CDlg*) pVentana); //Así ya tienes el puntero a la ventana
..
}




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








Me imagino que la ventana existe antes de que llames al proceso y no la
destruyes en ningun momento y luego la vuelves a abrir no?
Otra cosa que no entiendo, porque no la llamas desde el propio proceso?
Has comprobado que no te devuelve un NULL FindWindow?
Así en frio no se me ocurre nada más.
Respuesta Responder a este mensaje
#4 Rodrigo Corral [MVP]
17/06/2004 - 12:48 | Informe spam
Hola Sandra!!

No necesitas para nada hacer un FindWindow

En pseudo codigo

//Obtener el handle de la ventana a la que mandar mensajes (tuVentana) que
deriva de CWnd

HWND handleTuVentana = tuVentana->GetSaveHwnd();

//Pasarselo al hilo
//UINT HiloDescarga (LPVOID pParams);

AfxBeginThread(HiloDescarga, (LPVOID)handleTuVentana);


//Dentro de la función HiloDescarga
UINT HiloDescarga (LPVOID pParams)
{
HWND handleTuVentana = (HWND)pParams;
CClaseTuVentana* tuVentana = CWnd::FromHandle(handleTuVentana);

//Llama a las funciones necesarias para actuar sobre la ventana
//Tengo dudas sobre si esto sirve
tuVentana->FuncionDeTuVentana();

//Si lo anterior no sirve
//Manda mensajes de usuario a la ventana
::PostMessage(WM_TUMENSAJE, handleTuVentana);
}
Respuesta Responder a este mensaje
#5 sandra_soria81
17/06/2004 - 14:37 | Informe spam
Gracias, me pondre con ello, estos hilos me estan dando dolor de cabeza;
Si no veo la luz, intentare hacerlo de otro modo; Muchas gracias, ya les
volvere a molestar; Voy a dejar imagen de preguntona!!!!!! jejejejeej
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida