Combo Box (組合框)控件很簡單,可以節(jié)省空間。從用戶角度來看,這個控件是由一個文本輸入控件和一個下拉菜單組成的。用戶可以從一個預先定義的列表里選擇一個選項,同時也可以直接在文本框里面輸入文本。下面的例子簡要說明如何利用 MFC CComboBox Class來操作字符串列表。
1、定義控件對應(yīng)變量
假定已經(jīng)創(chuàng)建了一個Dialog,并且從控件工具箱將 Combo Box 控件拖放到上面。打開 Class Wizard,添加控件對應(yīng)變量,如:CComboBox m_cbExamble;
在后面的代碼中會不斷使用這個變量。
2、向控件添加 Items
1) 在Combo Box控件屬性的Data標簽里面添加,一行表示Combo Box下拉列表中的一行。換行用ctrl+回車。
2) 利用函數(shù) AddString() 向 Combo Box 控件添加 Items,如:
m_cbExample.AddString(“StringData1”);
m_cbExample.AddString(“StringData2”);
m_cbExample.AddString(“StringData3”);
3) 也可以調(diào)用函數(shù) InsertString() 將 Item 插入指定位置 nIndex,如:
m_cbExample.InsertString( nIndex, “StringData” );
3、從控件得到選定的Item
假設(shè)在控件列表中已經(jīng)選定某項,現(xiàn)在要得到被選定項的內(nèi)容,首先要得到該項的位置,然后得到對應(yīng)位置的內(nèi)容。這里會用到兩個函數(shù),如:
int nIndex = m_cbExample.GetCurSel();
CString strCBText;
m_cbExample.GetLBText( nIndex, strCBText);
這樣,得到的內(nèi)容就保存在 strCBText 中。
若要選取當前內(nèi)容,可調(diào)用函數(shù)GetWindowText(strCBText)。
4、在控件中查找給定Item
這種操作一般用于在程序中動態(tài)修改控件中該項的值,可以用函數(shù)FindStringExact() 精確匹配,如:
int nIndex = m_cbExample.FindStringExact( nStartAfter, “value to be found”);
nStartAfter指明從哪一行開始查找。如果查找成功,返回的是該項的位置;否則,返回CB_ERR。
也可以選中包含指定字符串的項,如:
int nIndex = m_cbExample.SelectString( nStartAfter, “value to be selected”);
5、刪除控件中的Item
該操作可以利用函數(shù)DeleteString(),需要指定被刪除項的位置,如:
m_cbExample.DeleteString(nIndex);
也可以使用函數(shù)ResetContent(),清除目前的所有項,如:
m_cbExample.ResetContent();
6、顯示控件中的某項
int nIndex = m_cbExample.GetCurSel(); //當前選中的項
m_cbExample.SetCurSel(nIndex); //設(shè)置第nIndex項為顯示的內(nèi)容
7、得到或設(shè)置輸入框中被選中的字符位置
DWORD GetEditSel( ) /BOOL SetEditSel( int nStartChar, int nEndChar );
BOOL LimitText( int nMaxChars ); 設(shè)置輸入框中可輸入的最大字符數(shù)。
8、列表框常用消息映射宏
ON_CBN_DBLCLK 鼠標雙擊
ON_CBN_DROPDOWN 列表框被彈出
ON_CBN_KILLFOCUS / ON_CBN_SETFOCUS 在輸入框失去/得到輸入焦點時產(chǎn)生
ON_CBN_SELCHANGE 列表框中選擇的行發(fā)生改變
ON_CBN_EDITUPDATE 輸入框中內(nèi)容被更新