[Help]子线程中怎么想主窗体发消息
[Help]子线程中如何想主窗体发消息?
------解决方案--------------------
创建线程的时候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);
红色的位置就是参数啊
吧句柄通过这个位置传进去就可以了
- C/C++ code
下面的代码想在线程中用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);
红色的位置就是参数啊
吧句柄通过这个位置传进去就可以了