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

  • 相关阅读:
    git rebase 还是 merge的使用场景最通俗的解释
    漏洞复现:Struts2 远程代码执行漏洞(S2-033)
    linux临时网络配置
    漏洞复现:Struts2 S2-032 漏洞环境
    XXE攻击学习
    启用了不安全的HTTP方法【转】
    HTTP参数污染【转】
    逻辑漏洞挖掘方式
    大漏洞时代下的僵尸网络追踪-笔记
    markdown入门杂记
  • 原文地址:https://www.cnblogs.com/Malphite/p/10836061.html
Copyright © 2011-2022 走看看