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消息才行。可以参考这个文章:模拟鼠标点击

  • 相关阅读:
    解决margin 外边距合并问题
    tsx 校验 以及写法
    tsx 引入文件找不到
    Ubuntu 16.04安装和卸载软件命令
    Java8 中使用Stream 让List 转 Map使用总结
    Java8 Stream流式编程浅析
    浅析IOC 和 DI
    [ Java面试题 ]Java 开发岗面试知识点解析
    Intellij Idea 常用快捷键总结+实用小技巧
    Intellij Idea基础设置
  • 原文地址:https://www.cnblogs.com/jinxiang1224/p/8468163.html
Copyright © 2011-2022 走看看