专栏首页包子的书架MFC的自定义控件之消息机制

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

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
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
 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(点击按下)
  void CMyControl::OnLButtonDown(UINT nFlags, CPoint point)
  {
     // TODO: 在此添加消息处理程序代码和/或调用默认值
     if (FALSE == flag) {
       oldPoint = point;
       flag = TRUE;
     }
     CWnd::OnLButtonDown(nFlags, point);
  }
  • 对应的消息ON_WM_LBUTTONUP(点击放开)
 void CMyControl::OnLButtonUp(UINT nFlags, CPoint point)
 {
     // TODO: 在此添加消息处理程序代码和/或调用默认值
    flag = FALSE;
    CWnd::OnLButtonUp(nFlags, point);
 }

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Java的JVM介绍以及java的值传递和引用传递

    面试的时候碰到的了一个java基础问题,竟然给问蒙了,回来之后感觉针对这个问题总结一下

    包子388321
  • TextView的setCompoundDrawables和setCompoundDrawablesWithIntrinsicBounds的区别

    我们都只TextView支持设置文字和图片同时显示,通常会联想到两种方法,一种是直接设置drawableXXX(Left, Top, Right, Bottom...

    包子388321
  • dagger2的学习

    依赖关系:如果在 Class A 中,有 Class B 的实例,则称 Class A 对 Class B 有一个依赖。例如 Man 中有用到一个 Car 对象...

    包子388321
  • 揭秘 | 一个轻量级分布式 RPC 框架 — EasyRPC

    RPC,即 Remote Procedure Call(远程过程调用),调用远程计算机上的服务,就像调用本地服务一样。RPC 可以很好的解耦系统,如 WebSe...

    京东技术
  • 树莓派 python 百度语音控制 gpio 控制开关灯

    最初拿到树莓派的时候测试过,没成功,后来发现一张华丽丽的说明图,顿时醒悟了..记录下来,

    十四君
  • A*寻路初探(转载)

    译者序:很久以前就知道了A*算法,但是从未认真读过相关的文章,也没有看过代码,只是脑子里有个模糊的概念。这次决定从头开始,研究一下这个被人推崇备至的简单方法,作...

    冰封一夏
  • 始于SDN,忠于IBN

    基于意图的网络是迈向未来自主运营数据中心的重大进展,已使用于越来越复杂的产品中。—— Apstra首席执行官Mansour Karam。‍

    SDNLAB
  • 使用puppeteer抓取受限网站

    不要相信前端是安全的,今天简单验证一下(但是希望大家支持正版,支持原作者,毕竟写书不易)。

    Jerremy
  • 如何成为一名优秀的iOS开发工程师

    如果你是一位专业的iOS开发工程师,你应该为自己感到自豪。因为你能在强大的iOS系统下,一展身手实现自己和他人的想法,这是一件令人无比激动的事情。 作为一名iO...

    BestSDK
  • HTML标记语言学习笔记

    本文内容大多粘贴自www.w3school.com.cn/html/index.asp,详情可打开该网站查看,本人仅做简化整理。

    Sidchen

扫码关注云+社区

领取腾讯云代金券