新建线程发送消息问题

cokeliu 2014-09-22 05:39:01
我一个主对话框A中使用了tab控件加了3个页面对话框B.C.D.
我在B中发送消息给A(CTester_ConsoleDlg).
void MyWIFI::Refresh()
{
CTester_ConsoleDlg* m_Host;
m_Host = (CTester_ConsoleDlg*)AfxGetMainWnd();
m_Host->SendMessage(WM_MY_MESSAGE, 0, 0);
}
没有问题,在C,D中也可以使用同样方式发送给A,但是在B.C.D新建的线程中
UINT ThreadFunc(LPVOID lpParam)
{

pthis->Refresh();
}
就出错, 请问在B.C.D对话框类的新线程中如何发送消息给A对话框
...全文
358 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
Rockismej 2014-12-09
  • 打赏
  • 举报
回复
线程中设置主对话框中的一个按钮文本,你可以参考下 SetDlgItemText(AfxGetApp()->m_pMainWnd->m_hWnd,IDC_BUTTON1,_T("开始线程")); SendMessage(GetDlgItem(AfxGetApp()->m_pMainWnd->m_hWnd,IDC_BUTTON1),WM_SETTEXT,0,(LPARAM)"开始线程");
赵4老师 2014-12-09
  • 打赏
  • 举报
回复
Multiple Threads in the User Interface http://msdn.microsoft.com/zh-cn/library/ms810439.aspx
boygo1982 2014-12-09
  • 打赏
  • 举报
回复
是出错,还是没达到效果? 我认为问题可能出在你创建线程时传递的参数问题,也就是1楼提到的 pThis的值是否正确。 不妨把你创建线程的那段代码贴出来。 如果指针传对了不需要传递句柄值。用这个sendmessage就可以。
洗洗睡去 2014-12-01
  • 打赏
  • 举报
回复
线程里refresh算不算线程里对界面操作?我觉得应该sendmessage给A A自己内部刷新
mysz_2361014883 2014-11-30
  • 打赏
  • 举报
回复
利用线程通讯问题 //设置全局变量值按钮获取编辑框的值传递全局变量 void CThreadMsgDlg::OnButton3() { CString edit1; GetDlgItem(IDC_EDIT1)->GetWindowText(edit1); ::WaitForSingleObject(hMutex,INFINITE); global=edit1; ReleaseMutex(hMutex); } //启动线程读取变量值 void CThreadMsgDlg::OnButton1() { AfxBeginThread(reproc,&global); } static UINT reproc(LPVOID pParam) { CString *p=(CString *)pParam; AfxMessageBox(*p); return 0; } //启动线程写入全局变量 void CThreadMsgDlg::OnButton2() { AfxBeginThread(wrproc,this); } static UINT wrproc(LPVOID pParam) { CThreadMsgDlg *p=(CThreadMsgDlg *)pParam; ::WaitForSingleObject(p->hMutex,INFINITE); p->global=""; ReleaseMutex(p->hMutex); p->GetDlgItem(IDC_EDIT1)->SetWindowText(""); return 0; }
zhouxiaofeng1021 2014-10-31
  • 打赏
  • 举报
回复
通过创建线程时提供主对话框A句柄为参数,然后在线程中向A发送消息即可。SendMessage(句柄值,WM_MY_MESSAGE, 0, 0);
bsnry 2014-09-22
  • 打赏
  • 举报
回复
引用 楼主 cokeliu 的回复:
我一个主对话框A中使用了tab控件加了3个页面对话框B.C.D. 我在B中发送消息给A(CTester_ConsoleDlg). void MyWIFI::Refresh() { CTester_ConsoleDlg* m_Host; m_Host = (CTester_ConsoleDlg*)AfxGetMainWnd(); m_Host->SendMessage(WM_MY_MESSAGE, 0, 0); } 没有问题,在C,D中也可以使用同样方式发送给A,但是在B.C.D新建的线程中 UINT ThreadFunc(LPVOID lpParam) { pthis->Refresh(); } 就出错, 请问在B.C.D对话框类的新线程中如何发送消息给A对话框
pthis 的值是否对? 还有, pthis->Refresh(); 这里设置个断点

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧