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

  • 相关阅读:
    Leetcode Plus One
    Leetcode Swap Nodes in Pairs
    Leetcode Remove Nth Node From End of List
    leetcode Remove Duplicates from Sorted Array
    leetcode Remove Element
    leetcode Container With Most Water
    leetcode String to Integer (atoi)
    leetcode Palindrome Number
    leetcode Roman to Integer
    leetcode ZigZag Conversion
  • 原文地址:https://www.cnblogs.com/jinxiang1224/p/8468163.html
Copyright © 2011-2022 走看看