Combo Box (組合框)控件很簡單,可以節省空間。從用戶角度來看,這個控件是由一個文本輸入控件和一個下拉菜單組成的。用戶可以從一個預先定義的列表里選擇一個選項,同時也可以直接在文本框里面輸入文本。下面的例子簡要說明如何利用 MFC CComboBox Class來操作字符串列表。
1、定義控件對應變量
假定已經創建了一個Dialog,并且給該Dialog建立了類,并且從控件工具箱將 Combo Box 控件拖放到上面。打開 Class Wizard,添加控件對應變量,如:CComboBox m_cbExamble;在后面的代碼中會不斷使用這個變量。
為該下拉框建立相應的響應函數,該響應函數應該是在Dialog建立的類下
2、向控件添加 Items
1) 在Combo Box控件屬性的Data標簽里面添加,一行表示Combo Box下拉列表中的一行。換行用ctrl+回車。
2) 利用函數 AddString() 向 Combo Box 控件添加 Items,如:
m_cbExample.AddString(“StringData1”);
m_cbExample.AddString(“StringData2”);
m_cbExample.AddString(“StringData3”);
3) 也可以調用函數 InsertString() 將 Item 插入指定位置 nIndex,如:
m_cbExample.InsertString( nIndex, “StringData” );
為了使添加Items后光標會停留在第一個Items上可以用m_cbExample.SetCurSel(0);來實現
3、從控件得到選定的Item
假設在控件列表中已經選定某項,現在要得到被選定項的內容,首先要得到該項的位置,然后得到對應位置的內容。這里會用到兩個函數,如:
int nIndex = m_cbExample.GetCurSel();
CString strCBText;
m_cbExample.GetLBText( nIndex, strCBText);
這樣,得到的內容就保存在 strCBText 中。
若要選取當前內容,可調用函數GetWindowText(strCBText)。
4、在控件中查找給定Item
這種操作一般用于在程序中動態修改控件中該項的值,可以用函數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
該操作可以利用函數DeleteString(),需要指定被刪除項的位置,如:
m_cbExample.DeleteString(nIndex);
也可以使用函數ResetContent(),清除目前的所有項,如:
m_cbExample.ResetContent();
6、顯示控件中的某項
int nIndex = m_cbExample.GetCurSel(); //當前選中的項
m_cbExample.SetCurSel(nIndex); //設置第nIndex項為顯示的內容
7、得到或設置輸入框中被選中的字符位置
DWORD GetEditSel( ) /BOOL SetEditSel( int nStartChar, int nEndChar );
BOOL LimitText( int nMaxChars ); 設置輸入框中可輸入的最大字符數。
8、列表框常用消息映射宏
ON_CBN宏 | 對應事件 |
ON_CBN_CLOSEUP | 關閉下拉列表。 |
ON_CBN_DBLCLK | 雙擊下拉列表中的項目。 |
ON_CBN_DROPDOWN | 下拉顯示列表框。 |
ON_CBN_EDITCHANGE | 編輯框中文本內容被改動。 |
ON_CBN_EDITUPDATE | 編輯框內容更新顯示。 |
ON_CBN_ERRSPACE | 組合框不能為某個特殊請求分配足夠的內存。 |
ON_CBN_SELENDCANCEL | 用戶的選擇被取消。 |
ON_CBN_SELENDOK | 用戶選擇了一個項目并且通過回車鍵或按下鼠標而隱藏組合框的下拉列表。 |
ON_CBN_KILLFOCUS | 組合框失去焦點。 |
ON_CBN_SELCHANGE | 選擇發生變化。 |
ON_CBN_SETFOCUS | 組合框獲得輸入焦點。
|
窗口風格
窗口風格 | 說明 |
CBS_AUTOHSCROLL | 當在行尾輸入字符時自動將編輯框中的文字向右滾動。 |
CBS_DROPDOWN | 同CBS_SIMPLE風格類似,只是只有在用戶點擊下拉圖標時才會顯示出下拉列表。 |
CBS_DROPDOWNLIST | 同CBS_DROPDOWN類似,只是顯示當前選項的編輯框為一靜態框所代替。 |
CBS_HASSTRINGS | 創建一個包含了由字串組成的項目的擁有者畫組合框。 |
CBS_OEMCONVERT | 將組合框中的ANSI字串轉化為OEM字符。 |
CBS_OWNERDRAWFIXED | 由下拉列表框的擁有者負責對內容的繪制;列表框中各項目高度相同。 |
CBS_OWNERDRAWVARIABLE | 由下拉列表框的擁有者負責對內容的繪制;列表框中各項目高度可以不同。 |
CBS_SIMPLE | 下拉列表始終顯示。 |
CBS_SORT | 自動對下拉列表中的項目進行排序。 |
CBS_DISABLENOSCROLL | 當下拉列表顯示內容過少時顯示垂直滾動條。 |
CBS_NOINTEGRALHEIGHT | 在創建控件時以指定的大小來精確設定組合框尺寸。
|