(转)MFC 模态对话框创建过程

简介: http://blog.csdn.net/peterpan19890802/article/details/5569743 创建非模态对话框时,首先程序最先开始调用CreateDialogIndirectParam函数来创建对话框  ,  在CreateDialogIndirectParam中调用CreateWindowEx函数创建对话框主框架, 这时 CreateWindowEx函数发出WM_CREATEX消息,开始调用OnCreate函数。

http://blog.csdn.net/peterpan19890802/article/details/5569743

创建非模态对话框时,首先程序最先开始调用CreateDialogIndirectParam函数来创建对话框  ,
 在CreateDialogIndirectParam中调用CreateWindowEx函数创建对话框主框架,
这时 CreateWindowEx函数发出WM_CREATEX消息,开始调用OnCreate函数。
注意这时所有对话框的子控件都还没创建 ,所以在OnCreate函数中对子控件所作的任何操作都会导致内存非法访问。
 OnCreate函数成功返回后,创建主对话框的CreateWindowEx接着返回。 注意:这时才开始创建对话框子窗口控件。
 接着根据对话框模板中子控件的信息,开始依次调用CreateWindowEx创建子控件,
 比如这时,对话框模板中的子控件的位置和大小信息将作为CreateWindowEx函数的参数被传进函数, 子控件的默认位置,就在这时被确定下来了。
这里对话框模板中有几个子控件,CreateDialogIndirectParam就将调用几次CreateWindowEx函数。
等所有子控件创建完毕后,CreateDialogIndirectParam发出WM_INITDIALOG消息, 调用对话框的OnInitDialog的函数,
这时仍需注意: 否则极易出错,比如这时你将对话框基类的OnInitDialog函数注释掉, 那么这时你对子控件的操作将会失败,
 因为在对话框基类的OnInitDialog函数中调用了UpdateData,UpdateData又调用了DoDataExchange,DoDataExchange又调用了DDX_Control,来子类化控件。
 所以如果对话框基类的OnInitDialog函数没有得到调用,控件就无法完成子类化, (Toto我猜想你昨天说的控件句柄为NULL,估计是这种情况),
那么这时如果你通过控件的包装类来操作子控件比如MoveWindow移动子控件,
你会发现 控件句柄为NULL当然还有可能是你把对话框基类的OnInitDialog函数放在了后面来调用了,
在这个函数之前操作 子控件,那么也会出现控件句柄为NULL的现象。
最后OnInitDialog返回.

 

目录
打赏
0
0
0
0
2
分享
相关文章
利用C++构建PC端监控软件:实时屏幕录制
在今天的数字化世界中,监控软件变得越来越重要。无论是家庭用户需要监控他们的孩子,还是企业需要监控员工的电脑活动,实时屏幕录制是一种有效的方法。本文将向您介绍如何使用C++构建PC端监控软件,实现实时屏幕录制功能。此外,我们还将讨论如何自动提交监控到的数据到一个网站上。
677 0
Nginx极简实战—Nginx服务器高性能优化配置,轻松实现10万并发访问量
如何使Nginx轻松实现10万并发访问量。通常来说,一个正常的 Nginx Linux 服务器可以达到 500,000 – 600,000 次/秒 的请求处理性能,如果Nginx服务器经过优化的话,则可以稳定地达到 904,000 次/秒 的处理性能,大大提高Nginx的并发访问量。
Nginx极简实战—Nginx服务器高性能优化配置,轻松实现10万并发访问量
教你如何把域名解析到自己的服务器上
今天无事说一说如何把自己的域名解析绑定到自己的服务器上。让访客们可以通过你的域名来访问你的网站。
28571 1
.NET 9 AOT的突破 - 支持老旧Win7与XP环境
【10月更文挑战第30天】在.NET 9 中,AOT(Ahead-of-Time)编译技术在支持老旧的 Windows 7 和 XP 系统方面取得了显著进展。主要突破包括:性能提升(启动速度加快、执行效率提高)、部署优化(无需安装.NET 运行时、减小应用程序体积)、兼容性保障(编译策略优化、依赖项管理改进)以及安全性增强(代码保护机制)。这些改进使得应用程序在老旧系统上运行更加流畅、高效和安全。
294 2
C# 一分钟浅谈:WebSocket 协议应用
【10月更文挑战第6天】在过去的一年中,我参与了一个基于 WebSocket 的实时通信系统项目,该项目不仅提升了工作效率,还改善了用户体验。本文将分享在 C# 中应用 WebSocket 协议的经验和心得,包括基础概念、C# 实现示例、常见问题及解决方案等内容,希望能为广大开发者提供参考。
543 0
内核态的文件操作函数:filp_open、filp_close、vfs_read、vfs_write、set_fs、get_fs
内核态的文件操作函数:filp_open、filp_close、vfs_read、vfs_write、set_fs、get_fs
1264 0
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等