一、关于两个窗口的消息处理
要在一个MFC的项目中画图,我们知道任何windows程序都是靠消息来进行处理的。所以在新建一个单文档窗口的时候,我们会得到两个窗口,一个框架窗口,一个视图窗口,视图窗口会覆盖在框架窗口上面。这也就是说,我们一切对框架窗口的操作都只能够被视图窗口捕获。
二、MFC消息映射机制
在任何一个类中如果要添加一个消息响应函数之后,都会在三个地方产生代码。首先会在相应类的头文件中添加函数原型,函数原型前面有afx_msg关键字修饰,表明这是一个消息处理函数。
其次,会在该类的源文件中BEGIN_MESSAGE_MAP宏之间定义的消息映射表中出现wm_lbuttondown,该类中的这个消息映射表,就是把一些消息与一些相应的消息处理函数关联起来,通过这种机制,一旦有消息映射表中的消息出现,那么就立刻调用相应的消息处理函数来进行处理。第三处,就是消息函数在该类的源文件中的定义了。具体的实现也在那里。
MFC的消息映射机制和WIN32程序的消息映射机制有所不同,win32程序中,产生一个消息时,首先这个消息被操作系统放置到程序的消息队列中,之后程序通过getmessage这个函数在消息队列中依次取出消息,然后通过dispatchmessage函数交给操作系统处理,操作系统会调用相应的wndproc窗口过程函数对消息进行分类处理。