天天看點

MFC_Combo_Box_用法(下拉框)

 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會自動列出相關的消息,并能自動産生消息映射代碼。

MFC