Tengo una aplicación MFC, que tiene un subproceso de trabajo, lo que quiero hacer es publicar un mensaje desde el subproceso de trabajo al subproceso de GUI principal para actualizar algunos mensajes de estado en la GUI. Lo que he hecho hasta ahora es Registered a new window message
PostMessage desde WorkerThread a la ventana principal en MFC
//custom messages
static UINT FTP_APP_STATUS_UPDATE = ::RegisterWindowMessageA("FTP_APP_STATUS_UPDATE");
añadido este mensaje al mapa de mensajes de la clase de diálogo
ON_MESSAGE(FTP_APP_STATUS_UPDATE, &CMFC_TestApplicationDlg::OnStatusUpdate)
El prototipo de OnStatusUpdate
es
afx_msg LRESULT OnStatusUpdate(WPARAM, LPARAM);
y definición es
LRESULT CMFC_TestApplicationDlg::OnStatusUpdate(WPARAM wParam, LPARAM lParam)
{
//This function is not called at all.
return 0;
}
y el código de subproceso de trabajo llamando es
void CMFC_TestApplicationDlg::OnBnClickedMfcbutton1()
{
ThreadParams params;
params.m_hWnd = m_hWnd;
params.FTPHost = "test_host";
params.FTPUsername = "test";
params.FTPPassword = "test";
AfxBeginThread(FTPConnectThread,¶ms);
}
y el código de hilo trabajador es
//child thread function
UINT FTPConnectThread(LPVOID pParam)
{
if(pParam == NULL)
{
return 0;
}
ThreadParams *params = (ThreadParams*)pParam;
OutputDebugString(params->FTPHost);
Sleep(4000); //simulating a network call
CString * message = new CString("Conencted");
PostMessage(params->m_hWnd,FTP_APP_STATUS_UPDATE,0,(LPARAM)message);
//PostMessage do nothing? what I am doing wrong?
return 1;
}
el problema es cuando la función PostMessage se llama el OnStatusUpdate
debería ser llamado, pero no se está llamando, ninguna excepción o afirmación es arrojada, ¿Qué estoy haciendo mal? He intentado ON_REGISTERED_MESSAGE
y ON_MESSAGE
pero sin éxito, ¿alguna ayuda?
Muchas gracias por su ayuda, su código con un cambio menor funcionó, funcionó cuando lo usé con 'ON_REGISTERED_MESSAGE' –