組合框被操作時會向父視窗傳送通知訊息,這些通知訊息及其含義如下:cbn_closeup:組合框的列表框元件被關閉,簡易組合框不會傳送該通知訊息
cbn_dblclk:使用者在某列表項上雙擊滑鼠,只有簡易組合框才會傳送該通知訊息
cbn_dropdown:組合框的列表框元件下拉,簡易式組合框不會傳送該通知訊息
cbn_editchange:編輯框的內容被使用者改變了,與cbn_editupdate不同,該訊息是在編輯框顯示的正文被重新整理後才發出的,下拉列表式組合框不會傳送該訊息
cbn_errspace:組合框無法申請足夠的記憶體來容納列表項
cbn_selendcancel:表明使用者的選擇應該取消,當使用者在列表框中選擇了一項,然後又在組合框控制項外單擊滑鼠時就會導致該訊息的傳送
cbn_selendok:使用者選擇了一項,然後按了回車鍵或單擊了下滾箭頭,該訊息表明使用者確認了自己所作的選擇
cbn_killfocus:組合框失去了輸入焦點
cbn_selchange:使用者通過單擊或移動箭頭鍵改變了列表的選擇
cbn_setfocus:組合框獲得了輸入焦點
組合框控制項的建立
mfc將組合框控制項的所有操作都封裝到了ccombobox類中。
我們在對話方塊中加入組合框時,可以往對話方塊模板中拖入combo box控制項,而後新增ccombobox型別的控制項變數使用,但如果我們想在程式中動態建立的話,就要使用ccombobox類的成員函式create了。create函式的原型如下:
virtual
bool create(
dword dwstyle,
const rect&rect,
cwnd*pparentwnd,
uint nid
); 大家可以看出,ccombobox類的create成員函式同前面幾個控制項類的create成員函式非常類似,dwstyle指定組合框控制項的風格,rect為列表框彈出後組合框的位置和尺寸,pparentwnd是指向父視窗的指標,不能為null,nid指定組合框控制項的id。最後還是重點講講dwstyle引數。組合框控制項的風格包括以下幾種,並給出了相應說明:
cbs_disablenoscroll:使列表框在不需要滾動時顯示乙個禁止的垂直滾動條
cbs_dropdown:指定乙個下拉式組合框
cbs_dropdownlist:指定乙個下拉列表式組合框
cbs_hasstrings:指定乙個含有字串的自繪式組合框
cbs_nointegralheight:組合框的尺寸由應用程式而不是windows 指定,通常,由windows指定尺寸會使列表項的某些部分隱藏起來
cbs_ownerdrawfixed:指定自繪式組合框,即由父視窗負責繪製列表框的內容,並且列表項有相同的高度
cbs_ownerdrawvariable:指定自繪式組合框,並且列表項有不同的高度
cbs_siimple:指定乙個簡易組合框
cbs_sort:自動對列表框元件中的項進行排序
dwstyle引數可以是以上風格的組合。跟其他控制項一樣,建立時一般也還要指定ws_child、ws_visible、ws_tabstop和ws_vscroll等風格。
在對話方塊模板中直接新增組合框控制項時,其屬性頁中的屬性包含了以上風格,例如屬性uppercase設為true就相當於指定了cbs_uppercase風格。
ccombobox類的主要成員函式
因為組合框是由編輯框和列表框組合而成的,所以組合框的操作和編輯框與列表框的操作有很多相似之處,同樣的,ccombobox類的成員函式也和cedit類與clistbox類的成員函式有很多相似之處,不但功能相似,甚至函式名和引數也很相似。雞啄公尺下面大概講解下ccombobox類的主要成員函式,更詳細的內容可以參見msdn。
int getcount( ) const
; 獲取組合框控制項的列表框中列表項的數量。
int getcursel( ) const
; 獲取組合框控制項的列表框中選中項的索引,如果沒有選中任何項,該函式返回cb_err。
int setcursel(int
nselect);
在組合框控制項的列表框中選擇某項。nselect引數指定了要選擇的列表項的索引,如果為-1則列表框中當前選擇項被取消選中,編輯框也被清空。
dword geteditsel( )
const
; 獲取組合框控制項的編輯框中當前選擇範圍的起始和終止字元的位置。該函式返回乙個32位數,低16位存放起始位置,高16位存放選擇範圍後第乙個非選擇字元的位置。如果該函式用於下拉列表式組合框時,會返回cb_err。
bool seteditsel(
int nstartchar,int
nendchar);
用於在組合框控制項的編輯框中選擇字元。nstartchar引數指定起始位置,nendchar引數指定終止位置。
dword_ptr getitemdata(
int nindex) const
; 獲取組合框中指定項所關聯的32位資料。nindex引數指定組合框控制項的列表框某項的索引(從0開始)。
int setitemdata(int
nindex,dword_ptr dwitemdata);
為某個指定的組合框列表項設定乙個關聯的32位數。nindex引數指定要進行設定的列表項索引。dwitemdata引數指定要關聯的新值。
void getlbtext(int nindex,cstring& rstring) const
; 從組合框控制項的列表框中獲取某項的字串。nindex引數指定要獲取字串的列表項的索引,cstring引數用於接收取到的字串。
int getlbtextlen(int nindex) const
; 獲取組合框控制項的列表框中某項的字串長度。nindex引數指定要獲取字串長度的列表項的索引。
int gettopindex( ) const
; 獲取組合框控制項的列表框中第乙個可見項的索引。
int settopindex(int
nindex);
將組合框控制項的列表框中某個指定項設定為可見的。nindex引數指定了該列表項的索引。該函式成功則返回0,有錯誤發生則返回cb_err。
bool limittext(
intnmaxchars);
用於限制使用者在組合框控制項的編輯框中能夠輸入的最大位元組長度。nmaxchars引數指定了使用者能夠輸入文字的最大位元組長度,如果為0則長度被限制為65535個位元組。
intaddstring(lpctstr lpszstring);
為組合框控制項中的列表框新增新的列表項。lpszstring引數是指向要新增的字串的指標。該函式的返回值如果大於等於0,那麼它就是新列表項的索引,而如果有錯誤發生則會返回cb_err,如果沒有足夠的記憶體存放新字串則返回cb_errspace。
intdeletestring(uint nindex);
刪除組合框中某指定位置的列表項。nindex引數指定了要刪除的列表項的索引。該函式的返回值如果大於等於0,那麼它就是組合框中剩餘列表項的數量。如果nindex指定的索引超出了列表項的數量則返回cb_err。
int findstring(int nstartafter,lpctstr lpszstring) const
; 在組合框控制項的列表框中查詢但不選中第乙個包含指定字首的列表項。nstartafter引數指定了第乙個要查詢的列表項之前的那個列表項的索引。lpszstring指向包含要查詢的字首的字串。該函式的返回值如果大於等於0,那麼它是匹配列表項的索引,如果查詢失敗則返回cb_err。
int insertstring(int
nindex,lpctstr lpszstring);
向組合框控制項的列表框中插入乙個列表項。nindex引數指定了要插入列表項的位置,lpszstring引數則指定了要插入的字串。該函式返回字串被插入的位置,如果有錯誤發生則會返回cb_err,如果沒有足夠的記憶體存放新字串則返回cb_errspace。
int selectstring(int
nstartafter,lpctstr lpszstring);
在組合框控制項的列表框中查詢乙個字串,如果查詢到則選中它,並將其顯示到編輯框中。引數同findstring。如果字串被查詢到則返回此列表項的索引,如果查詢失敗則返回cb_err,並且當前選擇項不改變。
此外,ccombobox類還繼承了cwnd類的成員函式getwindowtext、setwindowtext等。
MFC 組合框,列表框
組合框 ccombobox 列表框 clistbox 組合框 combo box 列表框 list box 屬性中 sort 支援自動排序 1.新增如圖空間,並聲稱對應的組合框和列表框 編輯框的控制項。2.新增 新增 刪除 函式 void clb007dlg onbnclickedbtnadd vo...
下拉列表框指令碼
目錄 一 概述 二 select標籤 三 option標籤 四 新增移除選項 下拉列表框是通過select和option標籤建立的,為了方便與這個控制項互動,除了所有表單字段共有的屬性和方法外,js還提供了一些屬性和方法。select標籤用來定義下拉列表,包含任意數量的option和optgroup...
C 列表框 複選列表框 組合框的使用
功能實現效果 實現 1 宣告相關變數儲存專業 課程設定及相關資訊 csharp string gr,msg,xy string spec,cour1,cour2,cour3,cour4,cour5 2 在form1類中自定義函式bool checkgr 檢查學生資訊 csharp private b...