1. (SDK消息处理机制)当有产生消息——————>>”操作系统”——————>>”操作系统消息队列”——————>>”由应用程序调用getmessage函数从操作系统消息队列中取得消息”——————>>”应用程序由dispatchmessage路由到操作系统”————>>”操作系统调用窗口过程(窗口过程函数)处理”
2. MFC是对消息进行处理的方式是消息映射机制
消息映射的实现的方式:
1).在基类中针对每一种消息做一个虚函数(c++的多态性);(消息太多如果利用这种方式太浪费内存MFC并没有使用这种方式)。
2)后台维护窗口类的对象的指针和句柄有一个对照表 当我们收到一个消息的时候(消息结构体的第一个参数就是与那个窗口有关的句柄) 通过句柄可以找到c++类的对象的指针 把指针传给基类 然后基类调用WindowProc();对消息进行处理
3.(MFC)当有产生消息——————>>”相关的窗口句柄”——————>>” 通过句柄和对象的指针对照表”——————>>”交给基类”——————>>”基类调用WindowProc()”————>>” WindowProc()调用OnWndMsg()”——————>>”查看窗口是否有DECLARE_MESSAGE_MAP() 和 它的构造函数是否有相关的注释宏
BEGIN_MESSAGE_MAP(CDraw1View, CView)
//{{AFX_MSG_MAP(CDraw1View)
// NOTE - the ClassWizard will add and remove mapping macros here.
// DO NOT EDIT what you see in these blocks of generated code!
//}}AFX_MSG_MAP
// Standard printing commands
ON_COMMAND(ID_FILE_PRINT, CView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_DIRECT, CView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_PREVIEW, CView::OnFilePrintPreview)
END_MESSAGE_MAP()
”。————>>”如果没有则由基类处理”
MFC中类的对象与窗口
1、对象与窗口是怎么相互关联的?m_handle
2、对象与窗口的生命周期一样么?不一定
3、窗口是由谁操作的?对象
4、窗口的创建过程?设计、创建、显示、更新、消息循环。