最新消息:

VC++复习笔记3-MFC消息映射机制

C/C++ admin 2771浏览 0评论

在WINDOWS程序中消息的处理是通过一个消息队列来管理的,但在实际的MFC编程的时候,我们要对程序进行一个消息响应的时候并不清楚ClassWizard具体为程序添加了什么,只看到了一个消息处理函数的实现接口.具体ClassWizard做了什么工作呢?

现在以一个例子说明一下MFC消息映射的原理.新建一个MFC工程,取名为Test,选择单文档就行.

打开ClassWizard,为类CTestView增加一个响应鼠标左键按下的消息.除了消息响应的实现处,我们发现以下2个地方加入了代码:

  • 在类CTestView的头文件TestView.h中:
1
2
3
4
5
<span style="color: #666666;">//{{AFX_MSG(CTestView)</span>

afx_msg <span style="color: #0000ff;">void</span> OnLButtonDown<span style="color: #008000;">(</span>UINT nFlags,CPoint point<span style="color: #008000;">)</span><span style="color: #008080;">;</span><span style="color: #666666;">//这里为增加内容.声明消息响应的函数原型.</span>

<span style="color: #666666;">//}}AFX_MSG</span>
  • 在源文件TestView.cpp中:
1
2
3
4
5
6
7
8
9
10
BEGIN_MESSAGE_MAP<span style="color: #008000;">(</span>CTestView, CView<span style="color: #008000;">)</span>
 <span style="color: #666666;">//{{AFX_MSG_MAP(CTestView)</span>
 ON_WM_LBUTTONDOWN<span style="color: #008000;">(</span><span style="color: #008000;">)</span>         <span style="color: #666666;">//新增加部分,用于关联OnLButtonDown和WM_LBUTTONDOWN</span>

 <span style="color: #666666;">//}}AFX_MSG_MAP</span>
 <span style="color: #666666;">// Standard printing commands</span>
 ON_COMMAND<span style="color: #008000;">(</span>ID_FILE_PRINT, CView<span style="color: #008080;">::</span><span style="color: #007788;">OnFilePrint</span><span style="color: #008000;">)</span>
 ON_COMMAND<span style="color: #008000;">(</span>ID_FILE_PRINT_DIRECT, CView<span style="color: #008080;">::</span><span style="color: #007788;">OnFilePrint</span><span style="color: #008000;">)</span>
 ON_COMMAND<span style="color: #008000;">(</span>ID_FILE_PRINT_PREVIEW, CView<span style="color: #008080;">::</span><span style="color: #007788;">OnFilePrintPreview</span><span style="color: #008000;">)</span>
END_MESSAGE_MAP<span style="color: #008000;">(</span><span style="color: #008000;">)</span>

在程序运行时消息的具体实现过程是这样的:

MFC维护了一个句柄与C++指针类的映射。通过句柄可以找到对应的类指针,把这个指针交给基类,调用函数WindowProc,再由函数WindowProc调用函数OnWndMsg,通过查找头文件里响应函数原型的声明和源文件的消息映射,进行消息处理.

转载请注明:爱开源 » VC++复习笔记3-MFC消息映射机制

您必须 登录 才能发表评论!