MFC杂症记事——(1)m_pMainWnd

记事缘由:虽接触良久,但一直不求甚解,关键也没开源,大概开源我也懒得看吧。不求甚解带来了很多恶果就是,诡异情况频出,鬼知道我怎么会碰到这么多问题。

一同事为了解决程序主窗口启动前的登录窗口显示期间也显示任务栏图标,于是就在登录前把AfxGetApp()->m_pMainWnd设为了登录窗口,登录完毕后再重置为主窗口。乍听没啥问题,后面我在Initinstance中DoModal()返回-1,才发现了此处的问题。

原因:用该成员变量m_pMainWnd 去存储你的线程主窗口对象。当和m_pMainWnd 相关的窗口被关闭后,MFC会自动终止你的线程。如果该线程是应用程序主线程,程序也将会被终止。如果该数据成员为NULL,应用程序CWinApp对象的主窗口将用来决定什么时候去终止线程。也就是说我的ui线程被终止了,后面再进行Domodal(),都不会成功了,顺带的其他用到AfxGetApp()->m_pMainWnd的地方例如打印等功能也无法使用。

 MSDN上的原文解释:

  CWinThread::m_pMainWnd                                
  Use this data member to store a pointer to your thread’s main window object. The Microsoft Foundation Class Library will automatically terminate your thread when the window referred to by m_pMainWnd is closed. If this thread is the primary thread for an application, the application will also be terminated. If this data member is NULL, the main window for the application’s CWinApp object will be used to determine when to terminate the thread. m_pMainWnd is a public variable of type CWnd*.
  Typically, you set this member variable when you override InitInstance. In a worker thread, the value of this data member is inherited from its parent thread.

找到原因,要改只能给前任填坑了,登录框也显示图标,话说直接修改登录对话框的Application Window置为true不久行了=  =

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值