Mam aplikację MFC, która ma wątek roboczy, chcę wysłać wiadomość z wątku roboczego do głównego wątku GUI, aby zaktualizować niektóre komunikaty o stanie w interfejsie GUI. Co mam zrobić tak daleko jest Registered a new window message
PostMessage z WorkerThread do głównego okna w MFC
//custom messages
static UINT FTP_APP_STATUS_UPDATE = ::RegisterWindowMessageA("FTP_APP_STATUS_UPDATE");
Dodany tę wiadomość na mapie komunikatów klasy dialogowym
ON_MESSAGE(FTP_APP_STATUS_UPDATE, &CMFC_TestApplicationDlg::OnStatusUpdate)
Prototyp OnStatusUpdate
jest
afx_msg LRESULT OnStatusUpdate(WPARAM, LPARAM);
i definicja jest
LRESULT CMFC_TestApplicationDlg::OnStatusUpdate(WPARAM wParam, LPARAM lParam)
{
//This function is not called at all.
return 0;
}
i oznaczeniem gwintu pracownik nazywając to
void CMFC_TestApplicationDlg::OnBnClickedMfcbutton1()
{
ThreadParams params;
params.m_hWnd = m_hWnd;
params.FTPHost = "test_host";
params.FTPUsername = "test";
params.FTPPassword = "test";
AfxBeginThread(FTPConnectThread,¶ms);
}
i kod gwint Pracownik jest
//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;
}
problem jest wtedy, gdy funkcja PostMessage jest nazywany OnStatusUpdate
powinien być nazywany, ale nie jest on nazywany, nie jest zgłaszany wyjątek ani asercja, co robię źle? Próbowałem ON_REGISTERED_MESSAGE
i ON_MESSAGE
, ale bez powodzenia, jakiejkolwiek pomocy?
Dzięki wielkie za pomoc, Twój kod z niewielką zmianą pracowali, ona pracowała kiedy użyłem go z 'ON_REGISTERED_MESSAGE' –