MFC 非模态对话框闪退问题

啊啊啊第一次写学习记录博客,写得好慢诶,需要足够的知识输入理解消化才能飞快地输出呢。。。跨了两天,因为昨晚去吃铁锅炖了(排骨筋头巴脑土豆豆角超好吃就是有点咸…),炖了快一个小时,八点才吃上,给孩子饿坏了,疯狂吃花卷,男朋友都怕我吃花卷吃饱了。。。(花卷凉了就不好吃了!)

写得不大行,感觉有些地方不太清晰,有错求指正呜呜呜
—————————我是分割线—————————

看黑马程序员的MFC教程…这个老师讲课的方式节奏声音我都很喜欢hhh。讲到了非模态对话框闪退的问题,因为我c++没有好好学,直接就上来做界面,所以老师的操作我也没太搞懂为什么,百度查了些大佬们的回答,记录一下,免得自己忘了。。。

老师总说我,学习没有积累呜呜呜。。。是的呢,接触了不少东西,还觉得自己啥也不会。

下面是B站大学截的图啦
错误的弹出非模式对话框的代码
闪退原因:点击按钮后弹出的非模态对话框dlg是创建在消息函数中的局部变量,消息函数执行完后退出该线程,局部变量就会被释放,非模态对话框自然就被释放啦。

解决办法:

①用new创建类对象,把对象创建到堆里(在堆区为实例对象分配内存,new申请的对象,只有调用到delete时会执行析构函数释放掉内存),但是反复调用的对象不能这样,据说是反复分配释放内存,分配的内存大小不一的话,会产生大量的内存碎片。(好像有个对象池的东西可以解决内存碎片的问题)

②将弹出的非模态对话框这个实例对象作为主对话框类的成员,再在消息函数中调用实例对象的函数(在类外定义的ShowWindow函数,通过类的对象调用ShowWindow函数)。下图是老师的操作。
消息函数里的局部对象变成类的私有成员了呢
还有就是创建非模态对话框的代码不能写消息函数里,因为只需要创建一次该窗口。可以在构造函数中创建,也可以在初始化函数OinitDialog()中创建。老师不建议在构造函数里创建…我也不知道为什么昂。。。等我懂了再来写写。

参与评论 您还未登录,请先 登录 后发表或查看评论

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

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:深蓝海洋 设计师:CSDN官方博客 返回首页

打赏作者

最喜欢木棉的大头菜

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值