MFC框架程序解析

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来删除对话框对象了。 

 

posted @   温布利往事  阅读(1051)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
· AI Agent开发,如何调用三方的API Function,是通过提示词来发起调用的吗
点击右上角即可分享
微信分享提示