CEdit類提供了Windows編輯控件中的功能。編輯控件是一個子窗口矩形,用戶能夠向其中輸入文本;css
CComboBox類封裝了Windows組合框。組合框由一個列表框和一個靜態控件(或編輯控件)組成。markdown
在這兩個類中都有EditChange的控件事件,分別是編輯框的EN_CHANGE事件和CBN_EDITCHANGE事件,這兩個事件有所區別,下面逐一介紹。函數
這個消息指示用戶對編輯框控件進行了一些操做,這個操做會引起編輯框中內容發生變化。在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事件和EN_CHANGE事件都是指明編輯框中的文本發生了變化,控件向父窗口發送的對應的控件事件。而combobox控件的editchange只會響應外部用戶的輸入,對內部修改編輯框內容,不會向父窗口發送change事件。blog
若是咱們將上述的編輯框控件修改成combobox控件,用戶外部編輯能夠引起CBN_EDITCHANGE事件,從而改變Radio Button控件的狀態;若代碼中仍是使用SetWindowText方式來修改編輯框的內容,在combobox控件中間不會生效。想達到一樣的效果,則須要模擬發送CBN_EDITCHANGE消息才行。能夠參考這個文章:模擬鼠標點擊事件