博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
MFC框架程序解析
阅读量:6819 次
发布时间:2019-06-26

本文共 969 字,大约阅读时间需要 3 分钟。

MFC的 程序框架:

WinMain函数:程序首先到达全局变量theApp,再到达theAPP的构造函数,最后到达WinMain函数处。

问:为何要定义一个全局对象theAPP,让其在WinMain函数之前执行?

答:在win32应用程序中,应用程序的实例是由实例句柄hInstance来标识的,对于MFC程序,通过产生一个应用程序的对象来唯一标识应用程序的实例,每一个MFC程序有且仅有一个从应用程序类CWinAPP派生的类,有且仅有一个从该派生类的实例化对象。

 

MFC消息映射机制的具体实现方法:在每个能接收和处理消息的类中,定义一个消息和消息函数静态对照表,在消息映射表中,消息与对应的消息处理函数指针式成对出现的。某个类能处理的所有消息及其对应的消息处理函数的地址都列在这个类所对应的静态表中。当有消息需要处理时,程序只要搜索该消息静态表,查看表中是否含有该消息,就可知道该类能否处理此消息,如果能处理该消息,则同样依据静态表能很容易的找到并调用对应的消息处理函数。

 

模态对话框和非模态对话框的区别:

按工作方式不同,可将对话框分成两类: 

1、模态对话框:在关闭模式对话框之前,程序不能进行其他工作(如一般的“打开文件”对话框)

创建模态对话框 

CTestDlg dlg; dlg.DoModal();

2、 非模态对话框:非模态对话框打开后,程序仍然能够进行其他工作(如一般的“查找与替换”对话框) 

CTestDlg * dlg = new CTestDlg; dlg->Create(IDD_TEST_DLG); dlg->ShowWindow(SW_SHOW);

因为是用new操作符构建非模态对话框对象,因此必须在对话框关闭后,用delete操作符删除对话框对象。在屏幕上一个窗口被删除后,框架会调用CWnd::PostNcDestroy,这是一个虚拟函数,程序可以在该函数中完成删除窗口对象的工作,具体代码如下:

void CModelessDialog::PostNcDestroy {          delete this;    //删除对象    CDialog::PosNcDestroy();}

这样,在删除屏幕上的对话框后,对话框对象将被自动删除。拥有者就不必显式地调用delete来删除对话框对象了。 

 

转载地址:http://rwpzl.baihongyu.com/

你可能感兴趣的文章
百度医疗事业部解散,并入人工智能团队
查看>>
try-catch 能否监听多线程中的错误?
查看>>
http缓存机制及其原理
查看>>
数据结构与算法-学习笔记(三)
查看>>
css半透明边框
查看>>
【本人秃顶程序员】996.ICU引发程序猿的集体高潮
查看>>
flutter 使用Bloc和refresh 进行搭建页面
查看>>
JS 创建对象
查看>>
音频编码
查看>>
Spire.Doc系列教程:C# Word 图片替换
查看>>
牛客网刷题(纯java题型 241~270题)
查看>>
node js MD5
查看>>
中国的人工智能应走向全球化发展
查看>>
AndroidStudio技巧
查看>>
Centos6.5 构建Tomcat
查看>>
Idea Debug多线程不进断点问题处理
查看>>
在谷歌地图上显示地名等信息,类似infowindow
查看>>
Android Studio - 查看依赖关系
查看>>
solaris10在vm8.0上安装
查看>>
项目售前的一些总结
查看>>