博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
MFC vs. SDK程序流程
阅读量:6445 次
发布时间:2019-06-23

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

大家都知道,windows API编程以及其消息处理,其过程都清晰可见,大体步骤如下:

1)声明消息窗口类

2)注册窗口类

3)createwindows

4)消息获得以及分派(windows procedure)。

但是,对于MFC同样是Windows程序,其流程却显得灰暗不明。先具体分析(备录)如下:

在MFC中有两个重要的类,CWinApp,CFrameWnd,它们两个的存在在某种意义上来说代替了WinMain 和 WinProc的存在。

对于任何一个MFC程序,都存在一个Application Object(theApp),由于它是一个全局对象,因此是一个程序的入口点,当TheApp构造完了以后,由链接器将WinMain加入到应用程序中,它调用了AfxWinMain()函数。之后在AfxWinMain中,执行了AfxWinInit(),pApp->InitApplication(),pApp->InitInstance(), pApp->Run();AfxWinTerm();完成程序的整个过程。

关于 InitInstance: 首先,它会new一个CFrameWnd成员,其构造函数调用了Create();create()里面调用了createEx(),CreateEx()调用了PreCreateWindows();这里面MFC默认注册了5种类型的窗口类型(Wnd,controlbar, mdiframe, FrameOrView, OleControl)。

消息过程的流程:主要是调用AfxWndProc-〉AfxCallWndProc-> Wnd.WindowProc().这里其实是程序真正的处理过程,首先判断是否为WM_COMMAND消息;不是就按照通常的方法,进行处理(查找消息映射表,由宏建立起来的内存表),是就按照MFC规定的路线进行处理。CWnd::OnCommand()调用的是OnCmdMsg(),这里MFC规定了其消息的路线(view ,document,framewnd,winapp)。

 

转自:

 

转载于:https://www.cnblogs.com/Dageking/p/4226030.html

你可能感兴趣的文章
一句话题解&&总结
查看>>
Android 写文件到手机
查看>>
NOIP201307货车运输
查看>>
[BZOJ2820]YY的GCD
查看>>
mongoDB 索引
查看>>
【SpringBoot】SpringBoot项目的The temporary upload location ***is not valid 问题
查看>>
jQuery 手风琴效果
查看>>
QT5提示can not find -lGL的解决方法
查看>>
把页面的Table直接输出到Excel文件中
查看>>
for...in的改进版for...of
查看>>
时间正则表达式小叙
查看>>
Linux获取当前用户信息函数
查看>>
访问网络共享时出现“拒绝访问”
查看>>
Bash shell
查看>>
2015移动安全挑战赛 第一题
查看>>
aspx页面@Page指令解析
查看>>
关于web项目中中文乱码问题的总结
查看>>
ios 之CGRectMake
查看>>
选择排序的算法和优化
查看>>
DataGridView 输入数据验证格式(实例)
查看>>