从零开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

微信登录

微信扫码,快速开始

搜索
查看: 1904|回复: 0

关于CWinApp::m_pMainWnd

[复制链接]
  • TA的每日心情
    郁闷
    2019-9-30 18:03
  • 签到天数: 33 天

    [LV.5]常住居民I

    25

    主题

    62

    帖子

    7576

    积分

    VIP会员

    Rank: 10Rank: 10Rank: 10

    积分
    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
    回复

    使用道具 举报

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

    本版积分规则

    QQ|小黑屋|手机版|Archiver|一切从零开始 ( 蜀ICP备15031375号-3 )

    GMT+8, 2024-4-19 12:23 , Processed in 0.317055 second(s), 11 queries , File On.

    Powered by Discuz! X3.4

    © 2001-2017 Comsenz Inc.

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