CComboBox *mComb = (CComboBox*)GetDlgItem(IDC_DuanCB);
CComboBox *mComb = (CComboBox*)::GetDlgItem(m_hWnd,IDC_DuanCB);
CComboBox控件又稱作組合框控件,其有三種形态可供選擇,1.簡單組合框(Simple)2.下拉組合框(Drop-down)3.下拉清單式組合框(Drop-down list).
CComboBox控件的常用設定屬性說明:
type屬性:裡面一共有三個選項.就是其三種形式, 我們常用的是後兩種形态,其差別就是Dropdown的編輯區為可編輯控件,而droplist為靜态控件.
Data屬性:當程式初始化的時候,下拉清單将顯示其屬性裡面的内容,内容用分号分隔.其屬性隻支援後2中形式,
Sort 屬性:對添加到下拉清單框中的資料自動進行排序,如果你不想他改變你的顯示序列,把他設定成False.
控件是一個視窗.其基類是為CWnd.是以CComboBox也可以使用CWnd的一些函數,它自己的函數有30幾種.我寫了一個示範程式,示範了一些常用的函數,你可以參考其代碼看到其功能.
注:m_cbox 為CComboBox控件的關聯變量,m_end為EDIT控件的關聯變量
1.GetCount() 函數:用以獲得清單框中的選項數目. int GetCount() const;(此乃函數原型,我會列在每條的後面) 下面的例子是程式中各個按鈕裡面的代碼
int i;
CString str;
i=m_cbox.GetCount();
str.Format ("%d",i);
m_end="一共有"+str+"個資料";
UpdateData(FALSE);
2.GetCurSel() 函數:用以得到使用者選中下拉清單框中資料的索引值.傳回的值是重0開始的,如果沒有選擇任何選項将會傳回-1 Int GetCurSel() const
i=m_cbox.GetCurSel ();
str.Format ("%d",i+1);
if (i==-1) m_end="你什麼都沒有選";
else m_end="你選的是第"+str+"項";
3.SetCurSel函數:選取清單框中的一個選項,索引從0開始,-1為什麼都不選.當你需要把清單框中已經選取的内容清空時就可以使用這個函數;
if(m_i<3) m_cbox.SetCurSel (m_i++);//m_i為int型變量 用以計數
else
{
m_cbox.SetCurSel (-1);
m_i=0;
}
4.SetEditSel函數:設定編輯區中藍色選中字段的長度, BOOL SetEditSel( intnStartChar, int nEndChar ); nStartChar是起始的位置,當設定為-1時為不選擇任何字段,nEndChar是結束位置.還有一個對應的函數GetEditSel是取得其位置,在此不詳解.
m_cbox.SetEditSel (3,5);//在編輯框中打入一串數字在按此按鈕就能看到效果
//其作用就是選中第3到第5個字元作為熱點
5.Clear() Cut() Paste() Copy() 這四個函數我放在一起說,因為他們都是針對編輯框中標明的文字進行編輯的函數,很多初學者很不明白這4個函數,使用這些函數沒有作用,其實不然,這些函數對于在編輯框中的内容不進行處理,他真正處理的是你用滑鼠選中的内容,對于Clear()函數很多書中解釋都是有誤的,很多書中對他的解釋是清除目前選中的文本,我認為這樣的解釋是有歧異的,真正的解釋是把你剛選中的文本釋放掉,也就是不選,而不是把選中的删除,真正的删除選中的文本的函數是Cut(),Copy()是複制選中的文本,Paste()是粘貼到光标處.其示範就不寫在程式中,有興趣的朋友可以自己試試.
6.LimitText()函數.其作用是限制在編輯框中鍵入的文本長度,BOOL LimitText(int nMaxChars); 當nMaxChars為0時,不是不能輸入,而是長度最大化為65535位元組
7.GetLBText()函數.其原型為void GetLBText( int nIndex, CString&rString ).nIndex為清單框中資料的索引值,rString 為字元串,其作用就是把索引号為nIndex的資料放到rString變量中.與其對應的GetLBTextLen(intnIndex)函數就是得到索引号為nIndex中資料的長度
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() 四個函數放在一起,他們都是針對下拉清單框的處理函數, AddString(LPCTSTR lpszString) 是在清單框的尾巴添加一條資料,參數為字元串. DeleteString(UINT nIndex)為删除指定索引為nIndex的資料. InsertString(int nIndex, LPCTSTR lpszString)在索引nIndex處插入IpszString的内容. ResetContent()是清除清單框中所有的内容.
9.SetDroppedWidth(UINT nWidth) 函數.用于設定下拉清單框的最小寬度,當下拉清單框中的資料很長不能完全顯示時,我們可以使用這個函數把清單框的寬度設定的大些.同樣GetDroppedWidth()是傳回清單框的寬度.
以下為總結了各大論壇中對CCombBox控件使用的問題.并給出了正解.
1.關于CComboBox在對話框中沒有下拉項目的問題
答: 資源編輯器中對話框中CComboBox元件的垂直範圍拉大了下,就看見字型了,看到那個向下的黑箭頭了嗎,點他下拉,嘿嘿就這麼簡單.
2.請問怎樣能讓CCombobox記住使用者的輸入.下次使用時還有
答: 要記住使用者的輸入必須用到檔案讀寫,或者把内容添加到系統資料庫中,我會在以後給出解決辦法.
3. CCOMBOBOX如何使它隻讀,不能編輯
答: 看了本文的介紹也許你現在知道了, CCOMBOBOX有三種類型的,選擇你需要的吧!
4. 我要讓界面一顯示,就能在Combo框中顯示預設的資料
答: 你要在OnInitDialog裡面加上我上面所提到的SetCurSel()函數就行了.
5. 如何把選好的内容賦給變量
答: 先給CCOMBOBOX設定一個CString關聯變量,再添加事件處理函數CBN_ Selchange.使用UpdateData(FALSE)就行了.
6. 在CComboBox組合框中,條目的對齊方式是左對齊,能設定為對中或者右對齊嗎?
答: 沒有直接的方法,你必須自己對齊, 比如最大長度是10
int i;
String.Format("%10d", i);
CComboBox->AddString