Visual C++.NET技术内幕(第6版)学习笔记5

Visual C++.NET技术内幕(第6版)学习笔记5 Ex09a:ActiveX控件对话框容器 这里要编辑控件类处理消息,要有三个步骤,以下是原理: 视类增加一个消息相应函数后,在源文件中都会增加三处代码。 (1)消息相应函数原型。 在视图类.h文件会增加下述代码: //生成的消息映射函数 protected: DECLARE_MESSAGE_MAP() public: afx_msg void OnLButtonDown(UINT nFlags, CPoint point); 函数声明的前部有一个afx_msg限定符,这也是一个宏。该宏表明这个函数是一个消息响应函数的声明。 (2)ON_WM_LBUTTONDOWN()消息映射宏 在视图类.cpp中,有如下代码: BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd) ON_WM_LBUTTONDOWN() END_MESSAGE_MAP() 在上述代码中,BEGIN_MESSAGE_MAP()和END_MESSAGE_MAP() 这两个宏之间定义了CDrawView类的消息映射表,其中有一个ON_WM_LBUTTONDOWN()这消息映射宏,这个宏的作用就是:把鼠标左键按下消息WM_LBUTTONDOWN与一个消息相应函数关联起来。通过这种机制,一旦有消息产生,程序就会调用相应的消息相应函数来进行处理。 (3)消息响应函数的定义 在CDrawView的源文件中,可以看到OnLButtonDown函数的定义。 MFC消息映射机制的具体实现方法是: 在每个能接收和处理消息的类中,定义一个消息和消息函数静态对照表,即消息映射表。在消息映射表中,消息和对应的消息处理指针是成对出现的。某个类能处理的所有消息及其对应的消息处理函数的地址都列在这个类所对应的静态表中。当有消息需要处理时,程序只要搜索该消息静态表,查看表中是否含有该消息,就可知道该类能否处理该消息,如果能处理该消息,则同样依照静态表能很容易找到并调用对应的消息处理函数。 MFC消息映射的具体实现过程。MFC在后台维护了一个窗口句柄和对应的C++对象的对照表,以一个实例CDrawView类为例,与它的对象相关的有一个窗口,窗口当然有它的窗口句柄,该句柄与CDrawView对象的一个指针存在这意义对应关系,在窗口句柄与C++对招标中就维护了这种对应关系。当收到某一消息时,消息的第一个参数就指明该消息与那个窗口句柄相关,通过对照表,就可以找到与之相关的C++对象指针。然后把这个指针传递给应用程序框架窗口类的基类,后者会调用一个名为WindowProc的函数
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值