1.问题描述

在进行MFC开发时,希望将界面变得美观。因而调整了一下对话框上的字体与颜色。如果仅有一个对话框,那么直接把这些初始化的代码放到OnInitDialog()函数中就好。然而,我们会发现,利用MFC自动搭建的子对话框类包含的函数非常稀少!下面记录一下,我的思路例程:
字体代码如下:
font.CreatePointFont(150,"宋体");//选择字体
GetDlgItem(IDC_M1_STATIC_ORIG)->SetFont(&font);
GetDlgItem(IDC_M1_STATIC_FFT)->SetFont(&font);
GetDlgItem(IDC_M1_START)->SetFont(&font);
GetDlgItem(IDC_M1_END)->SetFont(&font);
GetDlgItem(IDC_M1_CANCEL)->SetFont(&font);
GetDlgItem(IDC_M1_X2)->SetFont(&font);
GetDlgItem(IDC_M1_2)->SetFont(&font);
GetDlgItem(IDC_M1_1)->SetFont(&font);

1.1 放在子对话框构造函数中

结果:直接报错!
这个原因很好想,子对话框还在生成的过程中,你突然横插一脚,要晚上子对话框面板上的功能,这肯定是不现实的!!!
那好,换个地方!!!

1.2 重载WM_PAINT消息

这其实也是我的一个小想法,既然不能放在对话框的初始化过程,那好吧~辛苦点,一点点画出来。
结果,又报错!
这个错比上一个轻点,至少生成了子对话框(!废话!)。这个错在于每次移动子对话框的时候,会报断言错误~~哪里的问题?仔细想想,我们每次移动对话框都会触发WM_PAINT消息,就会触发OnPaint()函数。这就简单了。。。肯定是我们的这几条语句放在OnPaint()函数中不合适,具体就是控件多次动态(WM_PAINT消息)激发是不被允许的。

2.我的解决方案

静一静~
Q:我想做什么???
A:初始化对话框啊!!!
Q:如果仅有一个对话框,我会把这段代码放在哪个位置???
A:对话框初始化函数中(OnInitDialog0)啊!!!
问题简单了,现在的问题就是子对话框类中没有初始化对话框函数,我们是否能重写一个?对,这个思路是没问题的~
OnInitDialog()函数重写:

3.经验总结

这个Bug我调试了将近半天,最大的感受就是要冷静思考。再父对话框中能做的事,在子对话框中是否可以采用相同的方法?到底是涉及到WM消息的重载?还是相关函数的重写(Override)?
MFC的设计理念就是傻白甜,所以冷静的想一想,很多细节是完全可以掌握的!

MFC子对话框初始化问题_从一个“断言”报警说起相关推荐

  1. MFC 子对话框多了任务栏图标?

    在编写对话框程序时,增加了个子对话框,想使用主对话框的界面直接拿来修改,于是直接复在左边的资源管视图(ResourceView)里面直接按Ctrl键拖拉复制了一个,更改对话框标题.ID,一切顺利. 但 ...

  2. MFC 基础知识:主对话框与子对话框(一)

    (仅供使用VS MFC初学者学习,高手莫见笑) 在MFC中通常会使用点击一个按钮,弹出一个子对话框的基础知识,这些都是学习MFC的基础知识,也是非常重要的知识,这里我就简单的讲讲这些知识. 一. 设置 ...

  3. MFC 基础知识:主对话框与子对话框(二)

    (仅供使用VS MFC初学者学习,高手莫见笑) 接"MFC 基础知识:主对话框与子对话框(一)"的内容 在"MFC 基础知识:主对话框与子对话框(一)"中Edi ...

  4. dialog对话框初始化 mfc_MFC添加子对话框及如何初始化

    一.建立子对话框 1.建立一个基于对话框的MFC工程 2.在资源视图中右键单击.rc文件,然后选择添加添加资源->Dialog 3.第二步新建的Dialog对话框中默认的会有确认和取消两个按钮( ...

  5. MFC TabControl插件 子对话框调用主对话框功能函数和变量

    前言 在子对话框中调用主对话框的功能函数和变量的方法,大多都是通过获取主对话框指针实现的. 一.创建TabControl控件和子对话框 链接: HisinWang写的MFC:TabCtrl使用教程 二 ...

  6. MFC Windows 程序设计[五十六]之开启子对话框(附源码)

    MFC Windows 程序设计[五十六]之开启子对话框 程序之美 前言 主体 运行效果 核心代码 逻辑分析 结束语 程序之美 前言 MFC是微软公司提供的一个类库(class libraries), ...

  7. 《MFC如何添加子对话框》

    问题描述 当MFC应用程序的主对话框有其他功能需要,但不能显示在主对话框时,通常会通过点击一个功能按钮弹出一个字对话框来实现.最常见的就是登录界面,点击登录按钮,然后弹出一个登录对话框让你输入登录信息 ...

  8. MFC中如何给子对话框添加图标

    1.先打开类向导为子对话框添加OnInitDialog()成员虚函数 2.子对话框属性中选中style->Title bar改为true 3.导入对应的图标到文件中: 4.在子对话框OnInit ...

  9. C++MFC基于对话框的编程——模态(非模态)对话框

    目录 一.添加MFC功能 二.创建基于MFC的应用程序框架 三.初识界面 四.上案例 1.拖控件button(两个) 2.改控件名字 2.1改名方法1 2.2改名方法2 3.添加两个新的对话框(Dia ...

最新文章

  1. ICLR 2021论文接收统计出炉!Top20 机构,国内仅清华在榜!
  2. MongoDB操作命令
  3. shiro +spring + spring mvc+ mybatis整合【转】
  4. startindex 不能大于字符串长度_「12」学习MySQL第二类函数:字符串函数
  5. 用GDB排查Python程序故障
  6. Pytorch——把Numpy转化为Torch
  7. Python基础学习(二)
  8. NumPy学习笔记之argsort()函数
  9. win10找回windows照片查看器的方法
  10. 大数据技术之Hadoop(入门)
  11. IDEA 不检查语法错误问题
  12. 微信支付 unmatched order appid and payment appid
  13. 编程中的源代码是什么?
  14. 基于Levy飞行和FDB的郊狼优化算法(matlab代码实现)
  15. 使用 Apple Watch S6 测量血氧教程
  16. 语法分析器(c++)
  17. shell eval
  18. 阿里巴巴真的会收购雅虎吗?
  19. python kil 掉子进程
  20. java 傅里叶变换 频谱_傅里叶变换分析频谱(FFT)

热门文章

  1. 太热了,谈机房空调散散热
  2. Linux系统软件信息内核,系统,目录,防火墙等
  3. VIM中常用的替换模式总结
  4. 黄聪:如何使用CodeSmith批量生成代码(原创系列教程)
  5. HD 2048 数塔 DP(简单递推)
  6. 微信小程序~自定义属性设置和获取(data-)
  7. Django与CSRF 、AJAX
  8. 局内网用户访问wamp本地站点
  9. PHP中文件操作基础:文件路径基础
  10. 【转】jQuery.ajax向后台传递数组问题