日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

MFC之ComboBox控件用法

發布時間:2025/3/12 编程问答 16 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MFC之ComboBox控件用法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

本文以實例形式較為詳細的講述了MFC中ComboBox控件的用法。分享給大家供大家參考之用。具體方法如下:

一、ComboBox簡介:

ComboBox控件是由一個文本輸入控件和一個下拉菜單組成的。用戶可以從一個預先定義的列表里選擇一個選項,同時也可以直接在文本框里面輸入文本。
從工具欄中拖一個Combo Box控件.右擊添加變量,變量名為cbBox.

二、用法:

1.為控件添加選項,指定默認選項

cbBox.AddString(_T("one")); cbBox.AddString(_T("two")); cbBox.AddString(_T("three"));

每個選項都有一個對應的索引號,跟數組下標一樣,從0開始.由于默認的排序方式是按字母先后順序所以one,two,three的索引為0,2,1

我們也可以把選項添加到指定的索引位置

cbBox.InsertString(0,_T("aaa")); //此時one,two,three的索引變為1,3,2

假如打開對話框時,我們要讓three選項為combo box的默認選項.

cbBox.SetCurSel(2); //不過我們不太可能去記住每個選項的索引,所以先查找下它的索引是多少 int index = cbBox.FindStringExact(0,_T("three")); //0表示從索引為0的選項開始查找.如果找到有叫three的選項就返回它的索引號,沒有找到返回CB_ERR也就是-1.

反過來我們已經有個選項顯示在那了要知道它的索引號是多少

int index = cbBox.GetCurSel();

2.選擇某個選項并獲取其值

先獲取索引號再根據索引號獲取值.

CString csValue; int index = cbBox.GetCurSel(); cbBox.GetLBText(index,csValue);//選項的值保存到csValues中

其實還有個更簡單的獲取值的方法,我們選項某個項之后它會顯示在文本輸入控件中.我們直接獲取就行

cbBox.GetWindowTextW(csValue);

3.查找列表中的選項

int index = cbBox.FindStringExact(0,_T("three")); //精確查找. int index = cbBox.FindString(0,_T("three")); //模糊查找.如果有選項threeabc也會返回索引值

假如下拉列表中的選項太多,你不愿意一個個的去選該怎么辦?

這時候你可以在文本框中輸入選項的前幾個字,如果匹配到個某個選項將會自動顯示在文本框中.這要用到模糊查詢

首先要添加一個ON_CBN_EDITCHANGE事件.ON_CBN_EDITCHANGE消息映射宏會把文本框中輸入值變化的消息綁定到一個函數中去處理

然后在消息處理函數中添加如下代碼:

CString temp; cbBox.GetWindowTextW(temp); //把文本框中輸入的值放到一個變量temp中 int n =cbBox.FindString(0,temp); //查找下拉列表中是否是哪個選項包含字符串temp if(n>=0) {cbBox.SetCurSel(n); //查找到的話就把選項名字顯示在文本框中 }

4.刪除選項

刪除所有選項,也可以把下拉列表置空

cbBox.ResetContent();

刪除某個選項.只能先查找到對應的索引號,再根據索引號刪除

int index = cbBox.FindStringExact(0,_T("three")); cbBox.DeleteString(index);

5.禁止在ComboBox中輸入

有時候我們希望只能在下拉框中選擇,而不允許在ComboBox中輸入。很簡單,只需把style改為Drop List即可

6.響應消息

有時候希望在ComboBox中選擇一個之后值之后,想響應一個消息。也很簡單,只需要對ComboBox的CBN_SELCHANG事件添加響應就可以了。

7.不能顯示下拉內容如何解決

在OnSize()函數中設置ComboBox的高度。
——注意要判斷窗口是否已經創建,可以用GetDlgItem(IDC_COMBO1)->GetSafeHwnd()判斷,為真表示已經創建。
然后使用MoveWindow()重新設置控件大小,高度盡量大,因為他會根據內容自動調節。這樣就可以完全顯示下拉列表的內容了。

8.Extended Combo Box選項前面帶個圖標

Extended Combo Box的功能比Combo Box更多一點.其中有個功能就是可以在選項前加個圖標.

先添加一個Extended Combo Box控件.并給它添加一個變量cbBoxE.

CImageList* pImageList; //相當于一個特殊數組,但是它保存的是圖片 pImageList = new CImageList(); pImageList->Create(32, 32, ILC_COLOR32, 0, 4); // //在資源中添加一個bmp圖片.id為IDB_BITMAP1 CBitmap bmp; bmp.LoadBitmap(IDB_BITMAP1); //加載資源中的圖片 pImageList->Add(&bmp, RGB(0, 0, 0)); //添加圖片到imagelist中 cbBoxE.SetImageList(pImageList); COMBOBOXEXITEM insItem; //添加圖片選項時的參數.它是一個結構體,下面是里面一些變量的初始化 insItem.mask = CBEIF_IMAGE|CBEIF_TEXT; insItem.iItem=0; insItem.iImage=0; insItem.pszText=_T("Line 1"); cbBoxE.InsertItem(&insItem);//在控件中添加一個選項,并且選項前面有圖片

相信本文所述對大家學習VC++的MFC程序設計有一定的借鑒價值。

特別補充: 在最初將 Combo Box 控件放置進你的窗口界面的時候,記得把下拉框的縱向尺寸向下拉得稍微大一些,否則將來運行的時候根本彈不出來,哪怕已經填充了足夠多的數據選項。



總結

以上是生活随笔為你收集整理的MFC之ComboBox控件用法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。