总想认真的学习一下mfc,可一直没有时间,今天下载了一个《深入浅出mfc》,准备好好研究一下,可这本书太长了,pdf文档翻到66页了,还没有进整体,所以从今天起一遍读侯捷先生的书,一变给写些笔记,给这本厚厚的数做个简化。
第一部分:windows程序原理
windows程序最重要的概念是什么事件驱动。应用程序响应事件。
比如点击了鼠标,敲击了键盘,都是事件,windows程序是基于事件和用户进行交互。时间处理过程是怎么样的呢?
一、创建一个窗口。设定窗口的消息处理过程
二、进行消息循环。windows 是使用一个消息循环来维持应用程序的生命周期。这个循环不断的检索系统的消息队列,这些消息就包含了鼠标,键盘等事件
三、消息循环中,把消息进行二次分发,把消息发送到了子窗口,这个过程是借助系统来完成的,实际上系统回调了窗口的回调函数
四、回调函数中处理消息,比如在窗口上画控件,弹出消息框等,或者执行其他操作。
为了便于理解,我们使用伪代码来描述这个过程。
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
switch (message)
{
......................;
}
return 0;
}
WINAPI int winmain(){
//1.创建一个windows窗口
// 2.设置窗口的消息处理函数
// 3.想系统注册windows窗口
// 3.显示窗口
while (GetMessage(&msg, NULL, 0, 0)) {
if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg)) //翻译加速键表
{
TranslateMessage(&msg); //该函数将虚拟键消息转换为字符消息
DispatchMessage(&msg); //分发消息
}
}
以上就是一个windows应用程序的框架,核心是消息循环,不断的从系统中获取消息,DispatchMessage是个关键,他把消息发送给系统,然后系统调用窗口的窗口过程。
有几点需要注意:
1.我们的程序只有一个窗口,实际上可以有多个窗口,每个窗口有一个窗口过程,但消息循环只有一个
2. 控件也是一个窗口(VC中的静态控件除外),也有自己的消息处理过程,不过如button等系统提供的控件,系统已经为他们预设了一个过程,这个过程收到消息后,把消息发送到了父窗口。