zoukankan      html  css  js  c++  java
  • CBN_EDITCHANGE和EN_CHANGE的区别

    CEdit类提供了Windows编辑控件中的功能。编辑控件是一个子窗口矩形,用户可以向其中输入文本;

    CComboBox类封装了Windows组合框。组合框由一个列表框和一个静态控件(或编辑控件)组成。

    在这两个类中都有EditChange的控件事件,分别是编辑框的EN_CHANGE事件和CBN_EDITCHANGE事件,这两个事件有所区别,下面逐一介绍。

    EN_CHANGE

    这个消息指示用户对编辑框控件进行了一些操作,这个操作会引发编辑框中内容发生变化。在Edit控件中这个操作可以是外部的,比如用户输入文字;也可以是内部的,比如使用SetWindowText函数。这些行为都会使编辑框控件向父窗口发出EN_CHANGE消息,我们可以父窗口类中响应这些控件事件。

    Edit实例1
    我们创建一个这样的对话框,如下图所示;在对话框上有一个组框,由一个编辑框控件和三个RADIO按钮控件组成,根据编辑框输入的后缀名不同,RADIO控件所代表的格式就被选中。

    具体代码如下:

    BEGIN_MESSAGE_MAP(CExtensionShowDlg, CDialog)
        //父窗口响应控件事件
        ON_EN_CHANGE(IDC_EDIT_FILE_NAME, &CExtensionShowDlg::OnUpdateFileFormat)
    END_MESSAGE_MAP()
    
    /****************************************************************
    *函数名称:
    *功    能:对话框初始状态设置
    *作    者:Jin
    *日    期:2017年3月18日
    ****************************************************************/
    BOOL CExtensionShowDlg::OnInitDialog()
    {
        CDialog::OnInitDialog();
        //修改编辑框内容,发送EN_CHANGE控件事件,来自内部的
        m_editFileName.SetWindowText("ExtensionShow.txt");
    
        // TODO:  在此添加额外的初始化
        return TRUE;  
    }
    
    /****************************************************************
    *函数名称:
    *功    能: 响应EN_CHANGE控件事件
    *作    者:Jin
    *日    期:2017年3月18日
    ****************************************************************/
    void CExtensionShowDlg::OnUpdateFileFormat()
    {
        CString strFileName = _T("");
        m_editFileName.GetWindowText(strFileName);
        CString strFileExt = PathFindExtension(strFileName);
        //根据文件名格式的变化,相应的选中Button控件按钮
        if (0 == strFileExt.CompareNoCase(".doc"))
        {
            CheckDlgButton(IDC_RADIO_DOC,TRUE);
            CheckDlgButton(IDC_RADIO_TXT,FALSE);
            CheckDlgButton(IDC_RADIO_CPP,FALSE);
        } 
        else if (0 == strFileExt.CompareNoCase(".cpp"))
        {
            CheckDlgButton(IDC_RADIO_DOC,FALSE);
            CheckDlgButton(IDC_RADIO_TXT,FALSE);
            CheckDlgButton(IDC_RADIO_CPP,TRUE);
        }
        else
        {
            CheckDlgButton(IDC_RADIO_DOC,FALSE);
            CheckDlgButton(IDC_RADIO_TXT,TRUE);
            CheckDlgButton(IDC_RADIO_CPP,FALSE); 
        }
    
    }

    运行结果:
    这里写图片描述


    CBN_EDITCHANGE

    CBN_EDITCHANGE事件和EN_CHANGE事件都是指明编辑框中的文本发生了变化,控件向父窗口发送的对应的控件事件。而combobox控件的editchange只会响应外部用户的输入,对内部修改编辑框内容,不会向父窗口发送change事件。

    如果我们将上述的编辑框控件修改为combobox控件,用户外部编辑可以引发CBN_EDITCHANGE事件,从而改变Radio Button控件的状态;若代码中还是使用SetWindowText方式来修改编辑框的内容,在combobox控件中间不会生效。想达到同样的效果,则需要模拟发送CBN_EDITCHANGE消息才行。可以参考这个文章:模拟鼠标点击

  • 相关阅读:
    年末反思
    Flink运行时架构
    Phoenix 启动报错:Error: ERROR 726 (43M10): Inconsistent namespace mapping properties. Cannot initiate connection as SYSTEM:CATALOG is found but client does not have phoenix.schema.
    Clickhouse学习
    Flink简单认识
    IDEA无法pull代码到本地,Can't Update No tracked branch configured for branch master or the branch doesn't exist.
    第1章 计算机系统漫游
    简单的 Shell 脚本入门教程
    开源≠免费 常见开源协议介绍
    MySQL 视图
  • 原文地址:https://www.cnblogs.com/jinxiang1224/p/8468163.html
Copyright © 2011-2022 走看看