映射消息
MFC中的消息映射宏
  DECLARE_MESSAGE_MAP
  BEGIN_MEASSAGE_MAP
  END_MESSAGE_MAP
向导自动映射消息
手动添加映射消息

MFC会帮我们自动映射大部分消息,当MFC不能自动映射消息时就需要我们手动映射消息

一、建立名为message的MFC工程,并添加如图组件

1、双击清空-自动button进入messageDlg.cpp,MFC会自动向导映射消息产生OnBnClickedButton1()函数

在函数中添加清空消息函数SetDlgItemText(IDC_EDIT1,_T(""));

//向导自动映射消息
//ON_BN_CLICKED(IDC_BUTTON1, &CmessageDlg::OnBnClickedButton1)
void CmessageDlg::OnBnClickedButton1()
{
// TODO: 在此添加控件通知处理程序代码
SetDlgItemText(IDC_EDIT1,_T(""));
}

2、不要点击清空-手动button,防止自动向导映射消息

(1)在messageDlg.h添加红色部分

public:
afx_msg void OnBnClickedButton1();
afx_msg void OnBnClickedButton2();

(2)messageDlg.cpp添加红色部分

BEGIN_MESSAGE_MAP(CmessageDlg, CDialogEx)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_BN_CLICKED(IDC_BUTTON1, &CmessageDlg::OnBnClickedButton1)
ON_BN_CLICKED(IDC_BUTTON2, &CmessageDlg::OnBnClickedButton2)
END_MESSAGE_MAP()

//手动映射消息
void CmessageDlg::OnBnClickedButton2()
{
SetDlgItemText(IDC_EDIT1,_T(""));
}

二、自动映射消息举例

1、修改对话框背景颜色

messageDlg.cpp添加红色部分

BOOL CmessageDlg::OnEraseBkgnd(CDC* pDC)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
CRect rect;
GetClientRect(rect);
CBrush brush; //创建画刷
brush.CreateSolidBrush(RGB(100,150,200)); //画刷属性实心rgb
pDC->FillRect(&rect,&brush);
return TRUE;

//return CDialogEx::OnEraseBkgnd(pDC);
}

2、统计文本框中字符个数并在static text中显示

messageDlg.cpp添加红色部分

void CmessageDlg::OnEnChangeEdit1()
{
// TODO: 如果该控件是 RICHEDIT 控件,它将不
// 发送此通知,除非重写 CDialogEx::OnInitDialog()
// 函数并调用 CRichEditCtrl().SetEventMask(),
// 同时将 ENM_CHANGE 标志“或”运算到掩码中。

// TODO: 在此添加控件通知处理程序代码
HWND hEdit = ::GetDlgItem(m_hWnd,IDC_EDIT1);
int nLen = ::SendMessage(hEdit,WM_GETTEXTLENGTH,0,0);//计算文本框字符个数
TCHAR szBuf[128] = {0};
_stprintf(szBuf,_T("已输入:%d"),nLen);
//_stprintf(szBuf,_T("已输入 : %d"),nLen);
SetDlgItemText(IDC_STATIC,szBuf);
}

遇到错误:error C4996: '_swprintf': This function or variable may be unsafe. Consider using _swprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.

在stdafx.h中添加
#define _CRT_SECURE_NO_DEPRECATE

#define _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES 1

027.MFC_映射消息的更多相关文章

  1. create()创建的控件不能映射消息函数的解决

    有时,使用create()在运行时创建的控件不能将消息映射到父窗口内,此时需要使用消息转发的机制,主要原理:注册一个全局的消息,针对接收消息的控件编写继承类,在该继承类中响应消息,并将已注册的全局消息 ...

  2. MFC入门

    目录 001.MFC_应用程序类型    002.MFC_对话框_静态文本_编辑框  003.MFC_对话框_访问控件_7种方法_A   004.MFC_对话框_访问控件_7种方法_B   005.M ...

  3. ActiveMQ发消息和收消息

    来自:http://blog.163.com/chengwei_1104/blog/static/53645274201382315625329/ ActiveMQ 是Apache出品,最流行的,能力 ...

  4. windows消息机制(MFC)

    消息分类与消息队列 Windows中,消息使用统一的结构体(MSG)来存放信息,其中message表明消息的具体的类型, 而wParam,lParam是其最灵活的两个变量,为不同的消息类型时,存放数据 ...

  5. Apache Kafka:下一代分布式消息系统

    [http://www.infoq.com/cn/articles/apache-kafka/]分布式发布-订阅消息系统. Kafka是一种快速.可扩展的.设计内在就是分布式的,分区的和可复制的提交日 ...

  6. MFC用PostMessage传递消息

    1.自定义消息ID. #define WM_MY_MESSAGE (WM_USER+100)         WM_USER为windows系统为非系统消息保留的ID,这里至少要用100,因为其它控件 ...

  7. 【转载】JAVA消息服务JMS规范及原理详解

    转载:https://www.cnblogs.com/molao-doing/articles/6557305.html 作者: moyun- 一.简介 JMS即Java消息服务(Java Messa ...

  8. JAVA消息服务JMS规范及原理详解

    JAVA消息服务JMS规范及原理详解 一.简介 JMS即Java消息服务(Java Message Service)应用程序接口,是一个Java平台中关于面向消息中间件(MOM)的API,用于在两个应 ...

  9. django 消息框架 message

    在网页应用中,我们经常需要在处理完表单或其它类型的用户输入后,显示一个通知信息给用户. 对于这个需求,Django提供了基于Cookie或者会话的消息框架messages,无论是匿名用户还是认证的用户 ...

随机推荐

  1. 微信小程序左滑显示按钮demo

    wxml结构(删除部分代码): <view class="chapter-item" wx:for="{{klgData}}" data-index=&q ...

  2. SpringMVC method属性与http请求方法一致

    在springMVC中,@requestMapping注解有method属性,在没有指定method的值时,默认映射所有http请求方法,如果仅想接收一种请求方法,需用method=RequestMe ...

  3. 如何在WPF控件上应用简单的褪色透明效果?

    原文 https://dailydotnettips.com/how-to-create-simple-faded-transparent-controls-in-wpf/ 使用OpacityMask ...

  4. 关于使用JavaMail发送邮件

    import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import javax.activati ...

  5. js+canvas五子棋人机大战ai算法

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  6. mybatis-generator1.3.6的使用

    下载地址: http://blog.mybatis.org/2017/12/mybatis-generator-version-136-released.html 参考了 http://blog.cs ...

  7. L05 Laravel 教程 - 电商实战

    https://laravel-china.org/courses/laravel-shop https://laravel-china.org/topics/13206/laravel-shop-c ...

  8. 如何使用jmeter调用soap协议

  9. npm镜像及配置方法

    npm全称Node Package Manager,是node.js的模块依赖管理工具.由于npm的源在国外,所以国内用户使用起来各种不方便.下面整理出了一部分国内优秀的npm镜像资源,国内用户可以选 ...

  10. win10 uwp 在 Canvas 放一个超过大小的元素会不会被裁剪

    我尝试在一个宽度200高度200的 Canvas 放了一个宽度 300 高度 300 的元素,这个元素会不会被 Canvas 裁剪了? 经过我的测试,发现默认是不会被裁剪 火火问了我一个问题,如果有一 ...