求助:关于子线程创建非模态对话框的问题

Awang_126 2014-03-20 07:08:28
新手求助,谢谢!我的问题是:
在主线程中创建了子线程A(继承CWinThread),然后我在重写A的InitInstance,创建一个非模态对话框B,代码如下:
BOOL CNewWinThread::InitInstance()
{
// TODO: perform and per-thread initialization here

m_pDlg = new CCreateThreadDlg;//(CCreateThreadDlg * m_pDlg)
m_pDlg->Create(IDD_DIALOG1); //创建非模态对话框
m_pDlg->ShowWindow(SW_SHOW); //显示对话
return TRUE;
}
请问,子线程A是否在创建非模态对话框之后就自动退出?
如果不自动退出,那么当关闭对话框B后,子线程A会被自动结束吗? 如不能,如何在关闭对话框B后结束子线程A呢?
...全文
251 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq676506196 2014-03-26
  • 打赏
  • 举报
回复
这个不错,对我的学习很有分借鉴
Awang_126 2014-03-26
  • 打赏
  • 举报
回复
问题解决了,原因是对话框的默认关闭方式模式对话框关闭,而现在是以非模式对话框方式打开,所以关闭的时候要把模式对话框的处理屏蔽。 解决方案如下: 重写对话框的PostNcDestroy,OnClose,OnDestroy,具体代码如下: void CMyDlg::PostNcDestroy() { // TODO: 在此添加专用代码和/或调用基类 delete this; CDialog::PostNcDestroy(); } void CMyDlg::OnClose() { // TODO: 在此添加消息处理程序代码和/或调用默认值 this->DestroyWindow(); /*CDialog::OnClose();*/ } void CMyDlg::OnDestroy() { CDialog::OnDestroy(); PostQuitMessage(0); // TODO: 在此处添加消息处理程序代码 } 另外默认的Ok,Cancel按钮换成 void CMyDlg::OnBnClickedOk() { // TODO: 在此添加控件通知处理程序代码 //OnOK(); this->DestroyWindow(); } void CMyDlg::OnBnClickedCancel() { // TODO: 在此添加控件通知处理程序代码 //OnCancel(); this->DestroyWindow(); }
xiaohuh421 2014-03-24
  • 打赏
  • 举报
回复
窗口的消息循环必需在创建线程内, 否则不能正常工作 .
worldy 2014-03-23
  • 打赏
  • 举报
回复
引用 5 楼 Awang_126 的回复:
打开的对话框中不是有windows消息循环处理的吗?
domodal才有消息循环,showWindow的没有,你要自己创建
Awang_126 2014-03-23
  • 打赏
  • 举报
回复
打开的对话框中不是有windows消息循环处理的吗?
worldy 2014-03-21
  • 打赏
  • 举报
回复
引用 楼主 Awang_126 的回复:
新手求助,谢谢!我的问题是: 在主线程中创建了子线程A(继承CWinThread),然后我在重写A的InitInstance,创建一个非模态对话框B,代码如下: BOOL CNewWinThread::InitInstance() { // TODO: perform and per-thread initialization here m_pDlg = new CCreateThreadDlg;//(CCreateThreadDlg * m_pDlg) m_pDlg->Create(IDD_DIALOG1); //创建非模态对话框 m_pDlg->ShowWindow(SW_SHOW); //显示对话 return TRUE; } 请问,子线程A是否在创建非模态对话框之后就自动退出? 如果不自动退出,那么当关闭对话框B后,子线程A会被自动结束吗? 如不能,如何在关闭对话框B后结束子线程A呢?
在子线程创建窗口,必须创建消息循环,因为Window的消息循环只投递消息给该线程创建的窗口 因此,创建子线程必须有一个标准Window消息循环
oyljerry 2014-03-21
  • 打赏
  • 举报
回复
线程函数加一个消息循环。防止线程退出
zgl7903 2014-03-21
  • 打赏
  • 举报
回复
CWinThread::m_pMainWnd = m_pDlg; return TRUE;
Awang_126 2014-03-21
  • 打赏
  • 举报
回复
放到哪里?

15,471

社区成员

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

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