ワーカー スレッドを持つ MFC アプリケーションがあります。やりたいことは、ワーカー スレッドからメイン GUI スレッドにメッセージを投稿して、GUI のステータス メッセージを更新することです。私がこれまでやってきたことは、Registered a new window message
//custom messages
static UINT FTP_APP_STATUS_UPDATE = ::RegisterWindowMessageA("FTP_APP_STATUS_UPDATE");
このメッセージをダイアログ クラスのメッセージ マップに追加しました
ON_MESSAGE(FTP_APP_STATUS_UPDATE, &CMFC_TestApplicationDlg::OnStatusUpdate)
の原型OnStatusUpdate
は
afx_msg LRESULT OnStatusUpdate(WPARAM, LPARAM);
そして定義は
LRESULT CMFC_TestApplicationDlg::OnStatusUpdate(WPARAM wParam, LPARAM lParam)
{
//This function is not called at all.
return 0;
}
ワーカースレッド呼び出しコードは
void CMFC_TestApplicationDlg::OnBnClickedMfcbutton1()
{
ThreadParams params;
params.m_hWnd = m_hWnd;
params.FTPHost = "test_host";
params.FTPUsername = "test";
params.FTPPassword = "test";
AfxBeginThread(FTPConnectThread,¶ms);
}
ワーカースレッドコードは
//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;
}
問題は、PostMessage 関数が呼び出されたときに呼び出されるOnStatusUpdate
はずですが、呼び出されておらず、例外やアサーションがスローされていないことです。何が間違っていますか? 私は試してみON_REGISTERED_MESSAGE
ましON_MESSAGE
たが、成功しませんでした。