zoukankan      html  css  js  c++  java
  • 027.MFC_映射消息

    映射消息
    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

  • 相关阅读:
    [书目20130415]改变:28天让自己内心强大
    [引]软件著作权登记申请所需文件
    [转]动软代码生成器之模板功能介绍
    [转]C# 冒泡排序你还会吗?
    [转]细说ASP.NET Forms身份认证
    [转]listview加载性能优化ViewHolder
    [转]App for Android (2) —— Python篇
    [转]sqlserver 创建分区表
    [转]c# 四舍五入、上取整、下取整
    常用 Java 静态代码分析工具的分析与比较
  • 原文地址:https://www.cnblogs.com/Malphite/p/10836061.html
Copyright © 2011-2022 走看看