天天挂茶馆

 找回密码
 立即注册
搜索
热搜: C++
查看: 4203|回复: 0

关于CWinApp::m_pMainWnd

[复制链接]

25

主题

37

回帖

7576

积分

VIP会员

积分
7576
发表于 2018-9-25 15:44:07 | 显示全部楼层 |阅读模式
m_pMainWnd存放主窗口指针,今天学习是遇到一个问题,我在CWinApp的InitInstance()函数里写了2个创建窗口代码,发现当第一个窗口退出后,第二个窗口不会显示,程序会直接退出
[mw_shl_code=cpp,true]
// Cceshi2App 初始化

BOOL Cceshi2App::InitInstance()
{


                Cceshi2Dlg dlg ;
                m_pMainWnd = &dlg;
                INT_PTR nResponse = dlg.DoModal();
               
       
                CAdmin dlg1;
                m_pMainWnd = &dlg1;
                dlg1.DoModal();


        return FALSE;
}[/mw_shl_code]

查了半天资料,终于到问题
“用该成员变量去存储你的线程主窗口对象。当和m_pMainWnd 相关的窗口被关闭后,MFC会自动终止你的线程。如果该线程是应用程序主线程,程序也将会被终止。如果该数据成员为NULL,应用程序CWinApp对象的主窗口将用来决定什么时候去终止线程。m_pMainWnd是一个CWnd*类型的public变量。     很明显,你需要在重载InitInstance时为m_pMainWnd赋值。在工作线程中,m_pMainWnd自动继承其父线程的值。
简单说就是和m_pMainWnd相关的窗口被关闭后,MFC会自动终止和m_pMainWnd相关的线程,正好m_pMainWnd所在的窗口是主线程,所以程序会直接退出


解决办法:方法1:模态窗口前不要给m_pMainWnd赋值   方法2:在主窗口关闭前给m_pMainWnd复制为0
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表