关于MFC下多线程,在线程中创建非模态对话框以及消息传递

本文介绍了在MFC环境下,如何创建一个脱离父对话框的非模态对话框,并在子线程中实现与主线程的通信。通过创建CMyThread类继承自CWinThread,在线程中创建CSearch对话框,利用PostMessage和SendMessage进行线程间消息传递,从而调用主线程中的方法。
摘要由CSDN通过智能技术生成

问题:

1.在子对话框中它的子对话框需要实现脱离父对话框的束缚.(因为A对话框需要B对话框搜索的结果.)

2.非模态对话框需要获得主对话框的句柄来调用主对话框类的方法.(因为B对话框需要主对话框的方法来实现底层通信.)

解决办法:

1.创建线程,在线程中创建对话框,使得多个窗口可以同时工作.

利用MFC中的UI线程实现:

a.CSearch为B对话框

b.创建CMyThread继承于CWinThread,修改其方法:

类中定义CSearch *m_dlg;(定义为指针因为后续要用.)

CMyThread::InitInstance():
       m_dlg=new CSearch(m_mainDlg);
       m_dlg->Create(IDD_Search,NULL);    

       m_dlg->ShowWindow(SW_SHOW);

CMyThread::ExitInstance():
       m_dlg->DestroyWindow();
(头文件等不细说!)

c.在A对话框的cpp中,

if(hasSearch){//用来限制只能打开一次
  return;
 }else{
  hasSearch=true;

  CWinThread * pThread = AfxBeginThread (RUNTIME_CLASS (CMyThread));

  //现在可以不看此3行
  //CWinThread * pThread = AfxBeginThread (RUNTIME_CLASS (CMyThread),0,0,CREATE_SUSPENDED,NULL);
  //((CMyThread*)pThread)->m_mainDlg=CClientInterfaceDlg::GetDialog();
  /

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值