Combo box的使用
CComboBox控件詳解
CComboBox控件又稱作組合框控件,其有三種形態(tài)可供選擇,1.簡單組合框(Simple)2.下拉組合框(Drop-down)3.下拉列表式組合框(Drop-down list).
    CComboBox控件的常用設(shè)置屬性說明:
    type屬性:里面一共有三個選項.就是其三種形式, 我們常用的是后兩種形態(tài),其區(qū)別就是Dropdown的編輯區(qū)為可編輯控件,而droplist為靜態(tài)控件.
    Data屬性:當(dāng)程序初始化的時候,下拉列表將顯示其屬性里面的內(nèi)容,內(nèi)容用分號分隔.其屬性只支持后2中形式,
    Sort 屬性:對添加到下拉列表框中的數(shù)據(jù)自動進(jìn)行排序,如果你不想他改變你的顯示序列,把他設(shè)置成False.
   控件是一個窗口.其基類是為CWnd.所以CComboBox也可以使用CWnd的一些函數(shù),它自己的函數(shù)有30幾種.我寫了一個示范程序,演示了一些常用的函數(shù),你可以參考其代碼看到其功能.
   注:m_cbox 為CComboBox控件的關(guān)聯(lián)變量,m_end為EDIT控件的關(guān)聯(lián)變量
    1.GetCount() 函數(shù):用以獲得列表框中的選項數(shù)目. int GetCount() const;(此乃函數(shù)原型,我會列在每條的后面) 下面的例子是程序中各個按鈕里面的代碼
   int i;
    CString str;
    i=m_cbox.GetCount();
    str.Format ("%d",i);
    m_end="一共有"+str+"個數(shù)據(jù)";
   UpdateData(FALSE);
    2.GetCurSel() 函數(shù):用以得到用戶選中下拉列表框中數(shù)據(jù)的索引值.返回的值是重0開始的,如果沒有選擇任何選項將會返回-1 Int GetCurSel() const
   int i;
    CString str;
    i=m_cbox.GetCurSel ();
    str.Format ("%d",i+1);
    if (i==-1) m_end="你什么都沒有選";
    else m_end="你選的是第"+str+"項";
   UpdateData(FALSE);
    3.SetCurSel函數(shù):選取列表框中的一個選項,索引從0開始,-1為什么都不選.當(dāng)你需要把列表框中已經(jīng)選取的內(nèi)容清空時就可以使用這個函數(shù);
   if(m_i<3) m_cbox.SetCurSel (m_i++);//m_i為int型變量用以計數(shù)
   else {
    m_cbox.SetCurSel (-1);
    m_i=0;
    }
    4.SetEditSel函數(shù):設(shè)置編輯區(qū)中藍(lán)色選中字段的長度, BOOL SetEditSel( intnStartChar,
    int nEndChar ); nStartChar是起始的位置,當(dāng)設(shè)置為-1時為不選擇任何字段,nEndChar是結(jié)束位置.還有一個對應(yīng)的函數(shù)GetEditSel是取得其位置,在此不詳解.
   m_cbox.SetEditSel (3,5);//在編輯框中打入一串?dāng)?shù)字在按此按鈕就能看到效果
    //其作用就是選中第3到第5個字符作為熱點(diǎn)
    5.Clear() Cut() Paste() Copy() 這四個函數(shù)我放在一起說,因為他們都是針對編輯框中選定的文字進(jìn)行編輯的函數(shù),很多初學(xué)者很不明白這4個函數(shù),使用這些函數(shù)沒有作用,其實不然,這些函數(shù)對于在編輯框中的內(nèi)容不進(jìn)行處理,他真正處理的是你用鼠標(biāo)選中的內(nèi)容,對于Clear()函數(shù)很多書中解釋都是有誤的,很多書中對他的解釋是清除當(dāng)前選中的文本,我認(rèn)為這樣的解釋是有歧異的,真正的解釋是把你剛選中的文本釋放掉,也就是不選,而不是把選中的刪除,真正的刪除選中的文本的函數(shù)是Cut(),Copy()是復(fù)制選中的文本,Paste()是粘貼到光標(biāo)處.其演示就不寫在程序中,有興趣的朋友可以自己試試.
    6.LimitText()函數(shù).其作用是限制在編輯框中鍵入的文本長度,BOOL LimitText(int nMaxChars); 當(dāng)nMaxChars為0時,不是不能輸入,而是長度最大化為65535字節(jié)
    7.GetLBText()函數(shù).其原型為void GetLBText( int nIndex, CString&rString ).nIndex為列表框中數(shù)據(jù)的索引值,rString 為字符串,其作用就是把索引號為nIndex的數(shù)據(jù)放到rString變量中.與其對應(yīng)的GetLBTextLen(intnIndex)函數(shù)就是得到索引號為nIndex中數(shù)據(jù)的長度
    m_cbox.GetLBText (2,m_end); // GetLBText按鈕
    UpdateData(0);
    CString str; //GetLBTextLen按鈕
    int i=m_cbox.GetLBTextLen (2);
    str.Format ("%d",i);
    m_end=str;
    UpdateData(FALSE);
    8.AddString() DeleteString() InsertString() ResetContent() 四個函數(shù)放在一起,他們都是針對下拉列表框的處理函數(shù), AddString(LPCTSTR lpszString) 是在列表框的尾巴添加一條數(shù)據(jù),參數(shù)為字符串. DeleteString(UINT nIndex)為刪除指定索引為nIndex的數(shù)據(jù). InsertString(int nIndex, LPCTSTR lpszString)在索引nIndex處插入IpszString的內(nèi)容. ResetContent()是清除列表框中所有的內(nèi)容.
    9.SetDroppedWidth(UINT nWidth) 函數(shù).用于設(shè)定下拉列表框的最小寬度,當(dāng)下拉列表框中的數(shù)據(jù)很長不能完全顯示時,我們可以使用這個函數(shù)把列表框的寬度設(shè)置的大些.同樣GetDroppedWidth()是返回列表框的寬度.
   以下為總結(jié)了各大論壇中對CCombBox控件使用的問題.并給出了正解.
   1.關(guān)于CComboBox在對話框中沒有下拉項目的問題
   答: 資源編輯器中對話框中CComboBox組件的垂直范圍拉大了下,就看見字體了,看到那個向下的黑箭頭了嗎,點(diǎn)他下拉,嘿嘿就這么簡單.
   2.請問怎樣能讓CCombobox記住用戶的輸入.下次使用時還有
   答: 要記住用戶的輸入必須用到文件讀寫,或者把內(nèi)容添加到注冊表中,我會在以后給出解決辦法.
   3. CCOMBOBOX如何使它只讀,不能編輯
   答: 看了本文的介紹也許你現(xiàn)在知道了, CCOMBOBOX有三種類型的,選擇你需要的吧!
   4. 我要讓界面一顯示,就能在Combo框中顯示默認(rèn)的數(shù)據(jù)
   答: 你要在OnInitDialog里面加上我上面所提到的SetCurSel()函數(shù)就行了.
   5. 如何把選好的內(nèi)容賦給變量
   答: 先給CCOMBOBOX設(shè)置一個CString關(guān)聯(lián)變量,再添加事件處理函數(shù)CBN_ Selchange.使用UpdateData(FALSE)就行了.
   6. 在CComboBox組合框中,條目的對齊方式是左對齊,能設(shè)置為對中或者右對齊嗎?
   答: 沒有直接的方法,你必須自己對齊, 比如最大長度是10
    int i;
    String.Format("%10d", i);
    CComboBox->AddString
VC combobox 使用大全? ---------------------------------------------------
一、如何添加/刪除Combo Box內(nèi)容
1. 在Combo Box控件屬性的Data標(biāo)簽里面添加,一行表示Combo Box下拉列表中的一行。換行用ctrl+回車。
 2. 在程序初始化時動態(tài)添加
 ??? 如: //控件內(nèi)容初始化
 ?? CString strTemp;
 ?? ((CComboBox*)GetDlgItem(IDC_COMBO_CF))->ResetContent();//消除現(xiàn)有所有內(nèi)容
 ??? for(int i=1;i<=100;i++)
 ?? {
 ?????? strTemp.Format("%d",i);
 ?????? ((CComboBox*)GetDlgItem(IDC_COMBO_CF))->AddString(strTemp);
 ?? }
 3. 下拉的時候添加
 ??? 如: CString strTemp;
 ??? int iCount=((CComboBox*)GetDlgItem(IDC_COMBO_CF))->GetCount();//取得目前已經(jīng)有的行數(shù)
 ??? if(iCount<1)//防止重復(fù)多次添加
 ?? {
 ?????? ((CComboBox*)GetDlgItem(IDC_COMBO_CF))->ResetContent();
 ?????? for(int i=1;i<=100;i++)
 ????? {
 ????????? strTemp.Format("%d",i);
 ????????? ((CComboBox*)GetDlgItem(IDC_COMBO_CF))->AddString(strTemp);
 ?????? }
 ??? }
 4. 刪除
 ?? DeleteString( UINT nIndex )//刪除指定行,
 5. 插入
 ?? InsertString( int nIndex, LPCTSTR lpszItem )//將行插入到指定位置
 6. 查找
 ?? FindString( int nStartAfter, LPCTSTR lpszItem )//可以在當(dāng)前所有行中查找指定的字符傳的位置,nStartAfter指明從那一行開始進(jìn)行查找。
 ?? int SelectString( int nStartAfter, LPCTSTR lpszItem )//可以選中包含指定字符串的行
二、如何控制Combo Box的下拉長度
1. 首先要知道兩點(diǎn):一、那就是在設(shè)計界面里,點(diǎn)擊一下Combo Box的下拉箭頭,此時出現(xiàn)的調(diào)整框就是Combo Box的下拉調(diào)整框。
 2. 二、屬性里有個 No integral height 鉤選項,表示最大長度為設(shè)計長度,如果實際內(nèi)容比設(shè)計長度多,就出現(xiàn)滾動條,少就以實際長度顯示。
三、選擇其中的某行
 1. 選中:
 int iPos=((CComboBox*)GetDlgItem(IDC_COMBO_CF))->GetCurSel();//當(dāng)前選中的行。
 2. 設(shè)置
 ((CComboBox*)GetDlgItem(IDC_COMBO_CF))->SetCurSel(n)//設(shè)置第n行內(nèi)容為顯示的內(nèi)容。
四、取得Combo Box框內(nèi)容
 1. 取當(dāng)前內(nèi)容
 ((CComboBox*)GetDlgItem(IDC_COMBO_CF))->GetWindowText(strTemp);
 
 2. 取其他行內(nèi)容
 ((CComboBox*)GetDlgItem(IDC_COMBO_CF))->GetLBText(n,strTemp);
四、獲得焦點(diǎn)
通常要判斷控件是否獲得了焦點(diǎn),可以用GetFocus()函數(shù)
例如:if(GetFocus()==GetDlgItem(IDC_EDIT_VALUE2))//判斷焦點(diǎn)是否在編輯框IDC_EDIT_VALUE2內(nèi)。
但是combobox 的焦點(diǎn)不同,因為它是由edit和listbox兩部分組成的
所以獲得焦點(diǎn)要用GetParent():if ((GetFocus()->GetParent())==GetDlgItem(IDC_COMBO_CF))
 
特別補(bǔ)充: 在最初將 Combo Box 控件放置進(jìn)你的窗口界面的時候,記得把下拉框的縱向尺寸向下拉得稍微大一些,否則將來運(yùn)行的時候根本彈不出來,哪怕已經(jīng)填充了足夠多的數(shù)據(jù)選項。
 
 
總結(jié)
以上是生活随笔為你收集整理的Combo box的使用的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: c语言中foreach的用法,详解Jav
- 下一篇: parseInt(string, rad
