[Help]子线程中怎么向主窗体发消息 www.MyException.Cn 发布于:2012-06-20 20:37:21 浏览:151次 [Help]子线程中如何向主窗体发消息?
下面的代码想在线程中用PostMessage,向主窗体发消息,但是编译有错误。。。 //////////////////////////////////////////// //VoiceManager.cpp 线程所在的类 #define WM_DISPLAY WM_USER+2 //接收消息 //线程功能函数 void CVoiceManager::ReceivingLoop(void) { while(bFlag) { //向主窗体发送消息 ::PostMessage((HWND)(AfxGetApp()->m_pMainWnd),WM_DISPLAY,123,NULL); } } //////////////////////////////////////////// //voiceRecordDlg.h 主窗体对话框所在的类 #define WM_DISPLAY WM_USER+2 //接收消息 //voiceRecordDlg.cpp BEGIN_MESSAGE_MAP(CVoiceRecordDlg, CDialog) //{{AFX_MSG_MAP(CVoiceRecordDlg) ON_MESSAGE(WM_DISPLAY,OnDisplay) //}}AFX_MSG_MAP END_MESSAGE_MAP() int k = 0; LRESULT CVoiceRecordDlg::OnDisplay(WPARAM wParam,LPARAM lParam) { CString tmp = (CString)wParam; m_List.InsertItem(k,tmp); k++; return 0; } //////////////////////////////////////////// ------解决方案-------------------- 创建线程的时候AfxBeginThread线程的参数传递为GetSafeHwnd();主窗口的HWND窗口句柄 AfxBeginThread(ReceivingLoop, (LPVOID)GetSafeHwnd()); ------解决方案-------------------- C、C++技术交流:53271408 ------解决方案-------------------- ::PostMessage(AfxGetMainWnd()->GetSafeHwnd(),WM_DISPLAY,123,NULL); ------解决方案-------------------- 实在不行记得c++不是纯的面象对象,可以用全局变量嘛?全局窗口句柄和全局窗口指针都是可以的 ------解决方案-------------------- ON_MESSAGE(WM_DISPLAY,OnDisplay) 写的不对吧 ON_MESSAGE(WM_DISPLAY,&CVoiceRecordDlg::OnDisplay)试试 ------解决方案-------------------- 创建线程时把主窗体的句柄传进去,然后使用::PostMessage ------解决方案-------------------- ------解决方案-------------------- hThrd = CreateThread(NULL, 0, ReceivingThrd, this, 0, &dwID); 红色的位置就是参数啊 吧句柄通过这个位置传进去就可以了 |
|