Combo Box(組合框)控件很簡單,可以節省空間。從使用者角度來看,這個控件是由一個文本輸入控件和一個下拉菜單組成的。使用者可以從一個預先定義的清單裡選擇一個選項,同時也可以直接在文本框裡面輸入文本。
1.改變下拉框大小
1)直接在控件上操作,先點向下的箭頭,就可以調整下拉框大小;
2)為了讓清單框變的更寬,可以用setdroppedwidth(int width)函數來調整清單框的寬度。
2.定義控件對應變量
假定已經建立了一個Dialog,并且從控件工具箱将Combo Box 控件拖放到上面。打開 Class Wizard,添加控件對應變量,如:CComboBox m_combo。
3.向控件添加 Items
1)在Combo Box控件屬性的Data标簽裡面添加,一行表示Combo Box下拉清單中的一行。換行用ctrl+回車。若在VS2005中,Items間用";"隔開即可; 2)利用函數 AddString()向 Combo Box 控件添加Items,如: m_combo.AddString(“StringData1”); m_combo.AddString(“StringData2”); m_combo.AddString(“StringData3”);
3) 也可以調用函數 InsertString() 将 Item 插入指定位置 nIndex,如: m_combo.InsertString(nIndex, “StringData” ); 4)int GetCount( )可以得到目前清單框中行的數量。 示例代碼:程式初始化時動态添加Items CString strTemp;
m_combo.ResetContent();//消除現有所有内容 for(inti=1;i<=100;i++) {
strTemp.Format("%d",i); m_combo.AddString(strTemp); }
4.從控件得到標明的Item
假設在控件清單中已經標明某項,現在要得到被標明項的内容,首先要得到該項的位置,然後得到對應位置的内容。這裡會用到兩個函數,如: int nIndex = m_combo.GetCurSel(); CString strText;
m_combo.GetLBText( nIndex, strText);
這樣,得到的内容就儲存在 strText 中。若要選取目前内容,可調用函數GetWindowText(strText)。
5.在控件中查找給定Item
這種操作一般用于在程式中動态修改控件中該項的值,可以用函數FindStringExact() 精确比對,如:
int nIndex = m_combo.FindStringExact( nStartAfter, “value to befound”); nStartAfter指明從哪一行開始查找。如果查找成功,傳回的是該項的位置;否則,傳回CB_ERR。
也可以選中包含指定字元串的項,如:
int nIndex = m_combo.SelectString( nStartAfter, “value to beselected”);
6.删除控件中的Item
該操作可以利用函數DeleteString(),需要指定被删除項的位置,如: m_combo.DeleteString(nIndex);
也可以使用函數ResetContent(),清除目前的所有項,如: m_combo.ResetContent();
7.顯示控件中的某項
int nIndex = m_combo.GetCurSel(); //目前選中的項
m_combo.SetCurSel(nIndex); //設定第nIndex項為顯示的内容
8.取得Combo Box框内容
1)取目前内容
m_combo.GetWindowText(strTemp); 2)取其他行内容
m_combo.GetLBText(n,strTemp);
9.獲得焦點
通常要判斷控件是否獲得了焦點,可以用GetFocus()函數,例如: if(GetFocus()==GetDlgItem(IDC_EDIT_VALUE2))//判斷焦點是否在編輯框IDC_EDIT_VALUE2内。
但是combobox 的焦點不同,因為它是由edit和listbox兩部分組成,是以獲得焦點要用GetParent(),例如:
if ((GetFocus()->GetParent())==GetDlgItem(IDC_COMBO_CF))。
10.設定控件屬性
1)Sort 屬性:設定為 true,則新添加項将按字母順序插入到清單中;否則,在清單的結尾處插入項。
2)Type屬性:設定為Drop List,則使ComboBox不能輸入隻能在下拉菜單中選擇;設定Dropdown,則ComboBox中允許輸入内容。
3)No integral height屬性,表示最大長度為設計長度,如果實際内容比設計長度多,就出現滾動條,少就以實際長度顯示。
11.得到或設定輸入框中被選中的字元位置
1)DWORD GetEditSel() /BOOL SetEditSel( int nStartChar, int nEndChar );//得到或設定輸入框中被選中的字元位置。
2)BOOL LimitText(int nMaxChars );//設定輸入框中可輸入的最大字元數。
12.常用的消息映射宏
ON_CBN_DBLCLK 滑鼠輕按兩下 ON_CBN_DROPDOWN 清單框被彈出
ON_CBN_KILLFOCUS /ON_CBN_SETFOCUS 在輸入框失去/得到輸入焦點時産生 ON_CBN_SELCHANGE 清單框中選擇的行發生改變
ON_CBN_EDITUPDATE 輸入框中内容被更新
使用以上幾種消息映射的方法為定義原型如:afx_msg void memberFxn( );的函數,并且定義形式如ON_Notification( id, memberFxn )的消息映射。如果在對話框中使用組合框,Class Wizard會自動列出相關的消息,并能自動産生消息映射代碼。