最近开始研究MFC,教材是《深入浅出MFC》(第二版),现记录下学习过程中的心得体会,算是对自己知识的总结,也希望能给他人以帮助~
第一课
1.缩略词解释
MFC:这是一个建立在Windows API之上的C++类库
API:应用程序接口
SDK:软件开发工具(现凡以windows raw API撰写的程序我们通常也称为SDK程序)
OWL:这也是一个具备Application Framework架势的C++类库
2.知识点
1)"动态链接"是在执行时期才链上的。(.exe、.dll、.fon、.mod、.drv、.ocx都是所谓的动态链接函数库)
2)对应用程序获得的各种"输入"进行分类,可以分为①由硬件装置产生的消息,放在系统队列中;②由windows系统或其它windows程序传送过来的消息,放在程序队列中。
3)main是C程序的进入点,WinMain则是windows程序的进入点。
WinMain的调用流程:shell侦测到欲执行一个Windows程序->调用加载器->调用C startup code->调用WinMain->开始执行程序
(WinMain的四个参数由操作系统传递进来)
4)窗口的注册与创建:先是利用API函数RegisterClass(注册窗口类)设定属性,再利用API函数CreateWindow创建窗口(只创建,不显示,ShowWindow才显示窗口)。
RegisterClass被封装在InitApplication函数之中,该函数只用第一个实例才会进入,是否是第一实例由WinMain的参数hPrevInstance判断;CreateWindow封装在InitInstance函数之中,该函数任何实例都会进入。
5)消息循环:
while(GetMessage(&msg,...)){
TranslateMessage(&msg); //转换键盘消息
DispatchMessage(&msg); //分派消息
}
6)call back函数是指程序中被Windows系统调用的函数
7)窗口函数:无论什么消息,都必须被处理,所以switch/case指令中default:处必须调用DefWindowProc。这是Windows内部默认的消息处理函数。
8)消息映射Message Map
struct MSGMAD_ENTRY _messageEntries[] //消息与处理例程的对照表格
struct MSGMAD_ENTRY _commandEntries[] //Command-ID与处理例程之对照表格
9)对话框
两类:①使父窗口无效,直到对话框结束,称为modal②与父窗口共同运行,称为modeless
为做出对话框,程序员必须准备两样东西:①对话框模板(dialog template)②对话框函数(dialog procedure)
Modal对话框的激活与结束,靠的是DialogBox和EndDialog两个API函数。
10)模块定义文件.DEF
将模块名称、程序段和数据段的内存特性、模块堆(heap)大小、堆栈(stack)大小、所有call back函数名称等等登记下来 。