前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >MFC的自定义控件之消息机制

MFC的自定义控件之消息机制

作者头像
包子388321
发布2020-06-16 19:24:58
1.6K0
发布2020-06-16 19:24:58
举报
文章被收录于专栏:包子的书架包子的书架

MFC消息机制

MFC是使用一种消息映射机制来处理消息,在应用程序框架中的表现就是一个消息与消息处理函数一一对应的消息映射表,以及消息处理函数的声明和实现等代码。 当窗口接收到消息时,会到消息映射表中查找该消息对应的消息处理函数,然后由消息处理函数进行相应的处理。SDK编程时需要在窗口过程中一一判断消息值进行相应的处理,相比之下MFC的消息映射机制要方便好用的多。

消息结构
消息结构

以窗口消息为例:

如下是消息的动态添操作图,在类向导直接添加,vs会自动在类的头文件和源文件中自动添加。

并且会添加消息到源文件的map中

BEGIN_MESSAGE_MAP(CMyControl, CWnd) ON_WM_PAINT() ON_WM_MOUSEMOVE() ON_WM_LBUTTONDOWN() ON_WM_LBUTTONUP() END_MESSAGE_MAP()

  • 对应消息ON_WM_PAINT
代码语言:javascript
复制
void CMyControl::OnPaint()
{
 CPaintDC dc(this); // device context for painting
                   // TODO: 在此处添加消息处理程序代码
                   // 不为绘图消息调用 CWnd::OnPaint()
 CRect rect;
 this->GetClientRect(rect);

 dc.MoveTo(0, 0);
 dc.LineTo(rect.right, rect.bottom);

 dc.MoveTo(rect.right, 0);
 dc.LineTo(0, rect.bottom);
}
  • 对应的消息ON_WM_MOUSEMOVE
代码语言:javascript
复制
 void CMyControl::OnMouseMove(UINT nFlags, CPoint point)
 {
     // TODO: 在此添加消息处理程序代码和/或调用默认值
    if (TRUE == flag) {
      CDC *dc = GetDC();
      dc->MoveTo(oldPoint);
      dc->LineTo(point);
      oldPoint = point;
      ReleaseDC(dc);
  }
  CWnd::OnMouseMove(nFlags, point);
}
  • 对应的消息ON_WM_LBUTTONDOWN(点击按下)
代码语言:javascript
复制
  void CMyControl::OnLButtonDown(UINT nFlags, CPoint point)
  {
     // TODO: 在此添加消息处理程序代码和/或调用默认值
     if (FALSE == flag) {
       oldPoint = point;
       flag = TRUE;
     }
     CWnd::OnLButtonDown(nFlags, point);
  }
  • 对应的消息ON_WM_LBUTTONUP(点击放开)
代码语言:javascript
复制
 void CMyControl::OnLButtonUp(UINT nFlags, CPoint point)
 {
     // TODO: 在此添加消息处理程序代码和/或调用默认值
    flag = FALSE;
    CWnd::OnLButtonUp(nFlags, point);
 }
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • MFC消息机制
    • 以窗口消息为例:
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档