MFC 非模态对话框闪退问题

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

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

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

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

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

解决办法:

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

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

你可能感兴趣的:(mfc)