VC/MFC中的CComboBox控制項使用詳解

來源:互聯網
上載者:User

標籤:事件   const   ted   指定   tle   對話方塊   參考   UI   解決   

CComboBox控制項詳解

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
  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函數:選取列表框中的一個選項,索引從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

VC combobox 使用大全  ---------------------------------------------------

一、如何添加/刪除Combo Box內容

1. 在Combo Box控制項屬性的Data標籤裡面添加,一行表示Combo Box下拉式清單中的一行。換行用ctrl+斷行符號。
2. 在程式初始化時動態添加
    如: //控制項內容初始化
   CString strTemp;
   ((CComboBox*)GetDlgItem(IDC_COMBO_CF))->ResetContent();//消除現有所有內容
    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();//取得目前已經有的行數
    if(iCount<1)//防止重複多次添加
   {
       ((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 )//可以在當前所有行中尋找指定的字元傳的位置,nStartAfter指明從那一行開始進行尋找。
   int SelectString( int nStartAfter, LPCTSTR lpszItem )//可以選中包含指定字串的行

二、如何控制Combo Box的下拉長度

1. 首先要知道兩點:一、那就是在設計介面裡,點擊一下Combo Box的下拉式箭頭,此時出現的調整框就是Combo Box的下拉調整框。
2. 二、屬性裡有個 No integral height 鉤選項,表示最大長度為設計長度,如果實際內容比設計長度多,就出現捲軸,少就以實際長度顯示。

三、選擇其中的某行
1. 選中:
int iPos=((CComboBox*)GetDlgItem(IDC_COMBO_CF))->GetCurSel();//當前選中的行。
2. 設定
((CComboBox*)GetDlgItem(IDC_COMBO_CF))->SetCurSel(n)//設定第n行內容為顯示的內容。

四、取得Combo Box框內容
1. 取當前內容
((CComboBox*)GetDlgItem(IDC_COMBO_CF))->GetWindowText(strTemp);

2. 取其他行內容
((CComboBox*)GetDlgItem(IDC_COMBO_CF))->GetLBText(n,strTemp);

四、獲得焦點

通常要判斷控制項是否獲得了焦點,可以用GetFocus()函數

例如:if(GetFocus()==GetDlgItem(IDC_EDIT_VALUE2))//判斷焦點是否在編輯框IDC_EDIT_VALUE2內。

但是combobox 的焦點不同,因為它是由edit和listbox兩部分組成的

所以獲得焦點要用GetParent():if ((GetFocus()->GetParent())==GetDlgItem(IDC_COMBO_CF))

VC/MFC中的CComboBox控制項使用詳解

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.