关闭

Windows编程基础--第4节 MFC消息映射机制

标签: mfcwindows
1925人阅读 评论(0) 收藏 举报
分类:

对于MFC程序最重要的响应机制就是消息映射机制,这节我们就来一起尝试一下MFC的消息映射机制。
(操作系统:win10 64位 IDE:vc++ 6.0)
1、新建一个MFC对话框项目,参见上节,
2、编译代码运行,效果图如下:
这里写图片描述
3、现在我们删除对话框上的《确定》和《取消》按钮,如图:
这里写图片描述
4、现在我们添加自己的“OK”和“CANCEL”按钮,接下来我们就来看看“OK”按钮的按下消息是怎么进行处理的?
这里写图片描述
4、执行View->Class Wizard,打开类向导;(或者直接用ctrl + W)

此时就能看到我们创建的对话框,OK按钮,CANCEL按钮对象,点击它们可以看见它们分别的拥有的消息,如图:

这里写图片描述
5、我们选择Cday03Dlg,MESSAGES选择WM_MOUSEMOVE消息,点击Add Function,下部Member function就会出现与WM_MOUSEMOVE对应的OnMouseMove函数,接下来点击Edit Code,编辑OnMouseMove函数的内容:
这里写图片描述
这里写图片描述
6、我们来修改OnMouseMove(UINT nFlags, CPoint point) 函数,参数中point为鼠标的坐标位置,我们可以通过point.x, point.y来获取鼠标的位置,nFlags主要是标志一些控制键是否按下,然后MK_LBUTTON、MK_RBUTTON、MK_CONTROL、MK_SHIFT、MK_MBUTTON 分别对应鼠标左键,右键,CTRL ,SHIFT ,鼠标中间(转轮):

void CDay03Dlg::OnMouseMove(UINT nFlags, CPoint point) 
{
    // TODO: Add your message handler code here and/or call default
    CString strText;
    strText.Format("坐标 x = %d ,y = %d ",point.x, point.y);

    if (nFlags & MK_LBUTTON)
    {
        strText += " 鼠标左键DOWN";
    }
    if (nFlags & MK_RBUTTON)
    {
        strText += " 鼠标右键DOWN";
    }
    if (nFlags & MK_CONTROL)
    {
        strText += " CTRL DOWN";
    }
    if (nFlags & MK_SHIFT)
    {
        strText += " SHIFT DOWN";
    }
    if (nFlags & MK_MBUTTON)
    {
        strText += " MIDBUTTON DOWN";
    }
    SetWindowText(strText);  // 设置对话框标题文本

    CDialog::OnMouseMove(nFlags, point);
}

效果图:
这里写图片描述

7、同样,我们可以通过类向导分别设置“OK”,“CANCEL”按钮的消息触发函数;
这里写图片描述
这里写图片描述
这里写图片描述

8、这是我们其实可以看到在day03Dlg.cpp中MESSAGE_MAP总下方就有我们新增的三个MFC消息,并且可以直观的看出是属于哪个控件ID的;

BEGIN_MESSAGE_MAP(CDay03Dlg, CDialog)
    //{{AFX_MSG_MAP(CDay03Dlg)
    ON_WM_SYSCOMMAND()
    ON_WM_PAINT()
    ON_WM_QUERYDRAGICON()
    ON_WM_MOUSEMOVE()
    ON_BN_CLICKED(IDC_BUTTON_OK, OnButtonOk)
    ON_BN_CLICKED(IDC_BUTTON_CACEL, OnButtonCacel)
    //}}AFX_MSG_MAP
END_MESSAGE_MAP()

9、接下来我们切换到day03Dlg.h头文件中,所有afx_msg 开头的都是消息对应的处理函数:

    // Generated message map functions
    //{{AFX_MSG(CDay03Dlg)
    afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
    afx_msg void OnPaint();
    afx_msg HCURSOR OnQueryDragIcon();
    afx_msg void OnMouseMove(UINT nFlags, CPoint point);
    afx_msg void OnButtonOk();
    afx_msg void OnDoubleclickedButtonCacel();
    afx_msg void OnButtonCacel();
    //}}AFX_MSG
    DECLARE_MESSAGE_MAP()

10、由以上例子可以看出,MFC程序的消息映射机制是创建一个与窗口相关联的派生类,用于消息关联的成员函数来接收和处理窗口的消息。在类向导中选择对应的消息,添加与该消息关联的成员函数来处理该消息,这就是MFC的消息映射机制。具体控件或窗口支持哪些消息及消息对应的函数参数等,请参见MSDN;
11、最终效果图:
这里写图片描述

项目源码可以访问我的码云来fork

0
0
查看评论

MFC六大机制之三:消息映射机制

上篇我们通过重写WindowProc函数来处理消息,今天我们采用下面的方法实现同样的功能  1.建一个win32简单应用程序,不要认为这样就不能写出MFC程序,因为是不是MFC程序取决于调没调MFC函数。 2. 删除入口函数,只留下#include "stdafx.h"...
  • meetings
  • meetings
  • 2015-06-28 23:12
  • 2389

Windows-消息映射机制原理和简单的绘图技术

Windows-消息映射机制原理和简单的绘图技术 1.MFC消息映射机制 众所周知,Windows程序是基于消息编程的,但是在MFC中已经为我们封装好了这个框架的消息机制,我们需要了解它的实现原理,才能深入的学习和精通Visual C++。**(1).消息映射机制的原理: MFC消息映射机制的...
  • qq_22075977
  • qq_22075977
  • 2016-04-24 16:21
  • 2548

VC----MFC消息映射机制详解

Windows程序和MFC程序是靠消息驱动的,他们对于消息的处理本质上是相同的。只是Windows程序对于消息处理的过程十分清晰明了,MFC程序则掩盖了消息处理的过程,以消息映射的方式呈现在开发者面前,使得开发消息的处理十分简单。用多了mfc就想对它的消息映射机制有一个本质的了解,下面将对消息映射做...
  • yiziweiyang
  • yiziweiyang
  • 2016-09-08 13:41
  • 419

MFC之消息映射机制实现方法

本文分析了完成消息映射的的应有步骤以及消息映射机制的原理性分析。
  • xiao3404
  • xiao3404
  • 2016-09-04 19:04
  • 780

MFC消息映射机制的理解

何谓消息、消息处理函数、消息映射? 消息简单的说就是指通过输入设备向程序发出指令要执行某个操作。具体的某个操作是你的一系列代码。称为消息处理函数。 在SDK中消息其实非常容易理解,当窗口建立后便会有一个函数(窗口处理函数)开始执行一个消息循环,我们还可以清楚的看到消息处理的脉络。一个switch...
  • chenjie863
  • chenjie863
  • 2013-12-22 11:43
  • 1280

MFC——3.MFC消息映射机制

本文通过绘图程序向读者介绍了MFC程序的消息映射机制,并对比了前面所讲的消息循环机制。通过消息映射能进一步理解MFC程序的响应流程,对后面可以不用向导而手动修改MFC程序打下基础工作。
  • u010757264
  • u010757264
  • 2016-03-01 09:33
  • 427

Windows编程基础--第3节 初探MFC

前言 win32程序属于早期windows软件,已经逐渐被淘汰,但它的设计模式和方法大部分都被MFC所继承,并且MFC开始使用C++语言进行开发,借助C++比C语言的强大特性,使得开发windws程序更加简便、高效,更加多元化。 创建第一个MFC程序(操作系统:win10 64位 IDE:vc+...
  • qq_25549309
  • qq_25549309
  • 2017-10-19 22:17
  • 1881

MFC消息映射笔记

大家有没有思考过当一个消息出现,应用程序框架是如何将消息与对象建立关系的?1.消息宏\quad为了支持消息映射,MFC提供了3种宏。1.1消息映射的声明和分解宏消息映射的声明和分界宏包含在CCmdTarget类中,如下表: 就是这3个宏组织了一张庞大的消息映射网络。所有继承与CCmdTarge...
  • q__y__L
  • q__y__L
  • 2016-05-03 19:45
  • 1336

孙鑫MFC笔记教程(4)--MFC消息映射机制的剖析

<br />1.      对应用程序(单文档程序)的窗口进行操作的时候,如点击鼠标,拖动鼠标等,所有的窗口消息应该在CView中捕获,而不能在MainFrame进行捕获,因为在文档-视图结构中,CView类总是覆盖在CMainFrm框架...
  • liufei_learning
  • liufei_learning
  • 2010-09-24 15:02
  • 1359

MFC消息映射机制实现

Windows程序的本质是依靠消息来维持运行的。每一个消息都有一个代码,并以WM_开头的常量表示。 MFC把消息分为三大类: 1.命令消息(WM_COMMAND):命令消息意味着“使用者命令程序做某些操作”。凡由UI对象产生的消息都是这种命令消息,可能来自菜单或加速键或工具栏按钮,并且都以WM_...
  • wzxq123
  • wzxq123
  • 2016-07-23 16:49
  • 986
    个人资料
    • 访问:40686次
    • 积分:697
    • 等级:
    • 排名:千里之外
    • 原创:28篇
    • 转载:6篇
    • 译文:0篇
    • 评论:1条
    文章分类