当前位置:首页 » 《随便一记》 » 正文

使用AfxGetApp()->GetMainWnd()而不是AfxGetMainWnd()使得MFC主程序接收辅助线程发送的消息

26 人参与  2022年11月30日 16:49  分类 : 《随便一记》  评论

点击全文阅读


MFC主程序接收辅助线程发送的消息

MFC辅助线程向主线程窗口发送消息

在子线程中调用AfxGetMainWnd()->m_hWnd返回NULL

报错信息还可能是: AfxGetMainWnd(…) 返回nullptr。

通常认为AfxGetMainWnd()会返回主窗口的指针。实际上有“前提条件”的。即返回当前调用AfxGetMainWnd()的线程的主窗口指针。
具体地,在子线程/辅助线程(CreateThread创建的线程)中调用AfxGetMainWnd(),返回的是辅助线程的窗口指针,如果辅助线程没有创建窗口,则返回NULL
所以如果在程序的主线程中调用AfxGetMainWnd(),则可以得到主程序主窗口的指针,可以用它来与主窗口通讯;
如果发现在子线程/辅助线程中调用AfxGetMainWnd(),则不能得到主线程窗口的指针,返回值为空或辅助线程的窗口指针。参考官方说明

解决方案1:使用AfxGetApp()->GetMainWnd()获得主窗口指针

辅助线程中的错误调用:

AfxGetMainWnd()->PostMessage( WM_OUTPUT_MSG,PROC_REOPEN,0 );

函数AfxGetApp()可以在辅助线程中获取最顶层窗口指针,因此可以将上面的错误调用修改为:

AfxGetApp()->GetMainWnd()->PostMessage( WM_OUTPUT_MSG,PROC_REOPEN,0 );

或者

PostMessage( AfxGetApp()->GetMainWnd()->m_hWnd,PROC_REOPEN,0 );

解决方案2

在辅助线程中保存一份主窗口指针,例如叫gs_mWnd,则在辅助线程中发消息事可直接用:

PostMessage( gs_mWnd,PROC_REOPEN,0 );

点击全文阅读


本文链接:http://m.zhangshiyu.com/post/49317.html

<< 上一篇 下一篇 >>

  • 评论(0)
  • 赞助本站

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

最新文章

  • 不见青山存完结(霍青秦兮霍宴)_不见青山存完结霍青秦兮霍宴
  • 他的干妹妹怀孕后,我闪婚了文集(林诺陆深)全书免费_(林诺陆深)他的干妹妹怀孕后,我闪婚了文集后续(林诺陆深)
  • 江先生,你要听话列表列表_江先生,你要听话列表(许清欢江砚舟)
  • 一抹斜阳相思泪后续+必读夏知微陆远川完本_一抹斜阳相思泪后续+必读(夏知微陆远川)
  • 「不当假少爷后,我娶了首富当老婆」免费试读_萧寒沈凌薇章节多结局预体验‌
  • 全书浏览我死后,数万网友对我进行审判火爆(董天华尹瑶)_我死后,数万网友对我进行审判火爆(董天华尹瑶)全书结局
  • 纨绔恶少抽盲盒选妻子,我换嫁绝嗣总裁后他发疯求原谅+免费+后续列表_纨绔恶少抽盲盒选妻子,我换嫁绝嗣总裁后他发疯求原谅+免费+后续(阮玉绵)
  • 完结文晚云为落日溺亡++后续列表_完结文晚云为落日溺亡++后续(裴念舒)
  • [修仙:我在云疆养仙蚕]章节多结局预体验‌_「林珂」小说无删减版在线阅读
  • 全书浏览我死后,数万网友对我进行审判++番外(董天华尹瑶)_我死后,数万网友对我进行审判++番外(董天华尹瑶)全书结局
  • 被兄弟俩接连当工具人后,我杀疯了后续+(贺云舟)全书免费_(贺云舟)被兄弟俩接连当工具人后,我杀疯了后续+后续(贺云舟)
  • [发现装穷老公的真面目后,我迎来美好人生]反转剧情碎片化试读_傅思瀚方知晓晓晓完结

    关于我们 | 我要投稿 | 免责申明

    Copyright © 2020-2022 ZhangShiYu.com Rights Reserved.豫ICP备2022013469号-1