CBN_EDITCHANGE和EN_CHANGE的區別

CEdit類提供了Windows編輯控件中的功能。編輯控件是一個子窗口矩形,用戶能夠向其中輸入文本;css

CComboBox類封裝了Windows組合框。組合框由一個列表框和一個靜態控件(或編輯控件)組成。markdown

在這兩個類中都有EditChange的控件事件,分別是編輯框的EN_CHANGE事件和CBN_EDITCHANGE事件,這兩個事件有所區別,下面逐一介紹。函數

EN_CHANGE

這個消息指示用戶對編輯框控件進行了一些操做,這個操做會引起編輯框中內容發生變化。在Edit控件中這個操做能夠是外部的,好比用戶輸入文字;也能夠是內部的,好比使用SetWindowText函數。這些行爲都會使編輯框控件向父窗口發出EN_CHANGE消息,咱們能夠父窗口類中響應這些控件事件。spa

Edit實例1
咱們建立一個這樣的對話框,以下圖所示;在對話框上有一個組框,由一個編輯框控件和三個RADIO按鈕控件組成,根據編輯框輸入的後綴名不一樣,RADIO控件所表明的格式就被選中。.net

具體代碼以下:code

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); 
    }

}

運行結果:
這裏寫圖片描述orm


CBN_EDITCHANGE

CBN_EDITCHANGE事件和EN_CHANGE事件都是指明編輯框中的文本發生了變化,控件向父窗口發送的對應的控件事件。而combobox控件的editchange只會響應外部用戶的輸入,對內部修改編輯框內容,不會向父窗口發送change事件。blog

若是咱們將上述的編輯框控件修改成combobox控件,用戶外部編輯能夠引起CBN_EDITCHANGE事件,從而改變Radio Button控件的狀態;若代碼中仍是使用SetWindowText方式來修改編輯框的內容,在combobox控件中間不會生效。想達到一樣的效果,則須要模擬發送CBN_EDITCHANGE消息才行。能夠參考這個文章:模擬鼠標點擊事件

相關文章
相關標籤/搜索