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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

组合框控件 -- CComboBox

發(fā)布時(shí)間:2024/8/26 综合教程 32 生活家
生活随笔 收集整理的這篇文章主要介紹了 组合框控件 -- CComboBox 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

組合框控件 -- CComboBox

組合框其實(shí)就是把一個(gè)編輯框和一個(gè)列表框組合到了一起,分為三種:簡易(Simple)組合框、下拉式(Dropdown)組合框和下拉列表式(Drop List)組合框。Properties面板中設(shè)置type屬性。在動(dòng)態(tài)創(chuàng)建時(shí),BOOLCreate(DWORDdwStyle,constRECT&rect,CWnd*pParentWnd,UINTnID); 在 dwStyle中添加CBS_DROPDOWNLIST參數(shù)即可。其顯示效果分別為:

常用通知消息

組合框被操作時(shí)會(huì)向父窗口發(fā)送通知消息,這些通知消息及其含義如下:

CBN_CLOSEUP:組合框的列表框組件被關(guān)閉,簡易組合框不會(huì)發(fā)送該通知消息
CBN_DBLCLK:用戶在某列表項(xiàng)上雙擊鼠標(biāo),只有簡易組合框才會(huì)發(fā)送該通知消息
CBN_DROPDOWN:組合框的列表框組件下拉,簡易式組合框不會(huì)發(fā)送該通知消息
CBN_EDITUPDATE:在編輯框準(zhǔn)備顯示改變了的正文時(shí)發(fā)送該消息,下拉列表式組合框不會(huì)發(fā)送該消息
CBN_EDITCHANGE:編輯框的內(nèi)容被用戶改變了,與CBN_EDITUPDATE不同,該消息是在編輯框顯示的正文被刷新后才發(fā)出的,下拉列表式組合框不會(huì)發(fā)送該消息
CBN_ERRSPACE:組合框無法申請足夠的內(nèi)存來容納列表項(xiàng)
CBN_SELENDCANCEL:表明用戶的選擇應(yīng)該取消,當(dāng)用戶在列表框中選擇了一項(xiàng),然后又在組合框控件外單擊鼠標(biāo)時(shí)就會(huì)導(dǎo)致該消息的發(fā)送
CBN_SELENDOK:用戶選擇了一項(xiàng),然后按了回車鍵或單擊了下滾箭頭,該消息表明用戶確認(rèn)了自己所作的選擇
CBN_KILLFOCUS:組合框失去了輸入焦點(diǎn)
CBN_SELCHANGE:用戶通過單擊或移動(dòng)箭頭鍵改變了列表的選擇
CBN_SETFOCUS:組合框獲得了輸入焦點(diǎn)

  其消息映射形如:

ON_CBN_SELCHANGE(IDC_COMBO_PRINTERS, &CPrintDlgAppDlg::OnCbnSelchangeComboPrinters)

ON_CBN_EDITCHANGE(IDC_COMBO_PRINTERS,
&CPrintDlgAppDlg::OnCbnEditchangeComboPrinters)

ON_CBN_CLOSEUP(IDC_COMBO_PRINTERS,
&CPrintDlgAppDlg::OnCbnCloseupComboPrinters)

ON_CBN_DROPDOWN(IDC_COMBO_PRINTERS,
&CPrintDlgAppDlg::OnCbnDropdownComboPrinters)

ON_CBN_EDITUPDATE(IDC_COMBO_PRINTERS,
&CPrintDlgAppDlg::OnCbnEditupdateComboPrinters)

ON_CBN_DBLCLK(IDC_COMBO_PRINTERS, &CPrintDlgAppDlg::OnCbnDblclkComboPrinters)

ON_CBN_ERRSPACE(IDC_COMBO_PRINTERS,
&CPrintDlgAppDlg::OnCbnErrspaceComboPrinters)

ON_CBN_SELENDCANCEL(IDC_COMBO_PRINTERS,
&CPrintDlgAppDlg::OnCbnSelendcancelComboPrinters)

ON_CBN_SELENDOK(IDC_COMBO_PRINTERS,
&CPrintDlgAppDlg::OnCbnSelendokComboPrinters)

ON_CBN_SETFOCUS(IDC_COMBO_PRINTERS,
&CPrintDlgAppDlg::OnCbnSetfocusComboPrinters)

ON_NOTIFY(NM_THEMECHANGED, IDC_COMBO_PRINTERS,
&CPrintDlgAppDlg::OnNMThemeChangedComboPrinters)

組合框控件的創(chuàng)建

MFC將組合框控件的所有操作都封裝到了CComboBox類中。

在對話框中加入組合框時(shí),可以往對話框模板中拖入Combo
Box控件,然后在Properties面板中可以配置各種屬性。如果在程序中動(dòng)態(tài)創(chuàng)建,則要使用CComboBox類的成員函數(shù)Create。Create函數(shù)的原型如下:

virtual
BOOL Create(
DWORD dwStyle,
const RECT& rect,
CWnd* pParentWnd,
UINT nID
);

其中,dwStyle指定組合框控件的風(fēng)格,rect為列表框彈出后組合框的位置和尺寸,pParentWnd是指向父窗口的指針,不能為NULL,nID指定組合框控件的ID。重點(diǎn)是dwStyle參數(shù),它可以指定組合框控件的風(fēng)格,包括以下幾種:


CBS_AUTOHSCROLL:使編輯框組件具有水平滾動(dòng)的風(fēng)格
CBS_DISABLENOSCROLL:使列表框在不需要滾動(dòng)時(shí)顯示一個(gè)禁止的垂直滾動(dòng)條
CBS_DROPDOWN:指定一個(gè)下拉式組合框
CBS_DROPDOWNLIST:指定一個(gè)下拉列表式組合框
CBS_HASSTRINGS:指定一個(gè)含有字符串的自繪式組合框
CBS_LOWERCASE:將編輯框和列表框中的所有文本都自動(dòng)轉(zhuǎn)換為小寫字符
CBS_NOINTEGRALHEIGHT:組合框的尺寸由應(yīng)用程序而不是Windows
指定,通常,由Windows指定尺寸會(huì)使列表項(xiàng)的某些部分隱藏起來
CBS_OEMCONVERT:使編輯框組件中的正文可以在ANSI
字符集和OEM字符集之間相互轉(zhuǎn)換。這在編輯框中包含文件名時(shí)是很有用的
CBS_OWNERDRAWFIXED:指定自繪式組合框,即由父窗口負(fù)責(zé)繪制列表框的內(nèi)容,并且列表項(xiàng)有相同的高度
CBS_OWNERDRAWVARIABLE:指定自繪式組合框,并且列表項(xiàng)有不同的高度
CBS_SIIMPLE:指定一個(gè)簡易組合框
CBS_SORT:自動(dòng)對列表框組件中的項(xiàng)進(jìn)行排序
CBS_UPPERCASE:將編輯框和列表框中的所有文本都自動(dòng)轉(zhuǎn)換為大寫字符

dwStyle參數(shù)可以是以上風(fēng)格的組合。跟其他控件一樣,創(chuàng)建時(shí)一般也還要指定WS_CHILD、WS_VISIBLE、WS_TABSTOP和WS_VSCROLL等風(fēng)格。

在對話框模板中直接添加組合框控件時(shí),其屬性頁中的屬性包含了以上風(fēng)格,例如屬性Uppercase設(shè)為True就相當(dāng)于指定了CBS_UPPERCASE風(fēng)格。

CComboBox類的主要成員函數(shù)

因?yàn)榻M合框是由編輯框和列表框組合而成的,所以組合框的操作和編輯框與列表框的操作有很多相似之處,同樣的,CComboBox類的成員函數(shù)也和CEdit類與CListBox類的成員函數(shù)有很多相似之處,不但功能相似,甚至函數(shù)名和參數(shù)也很相似。下面是CComboBox類的主要成員函數(shù),更詳細(xì)的內(nèi)容可以參見MSDN。

int GetCount( ) const;
獲取組合框控件的列表框中列表項(xiàng)的數(shù)量。

int GetCurSel( ) const;
獲取組合框控件的列表框中選中項(xiàng)的索引,如果沒有選中任何項(xiàng),該函數(shù)返回CB_ERR。

int SetCurSel(int nSelect);
在組合框控件的列表框中選擇某項(xiàng)。nSelect參數(shù)指定了要選擇的列表項(xiàng)的索引,如果為-1則列表框中當(dāng)前選擇項(xiàng)被取消選中,編輯框也被清空。

DWORD GetEditSel( ) const;
獲取組合框控件的編輯框中當(dāng)前選擇范圍的起始和終止字符的位置。該函數(shù)返回一個(gè)32位數(shù),低16位存放起始位置,高16位存放選擇范圍后第一個(gè)非選擇字符的位置。如果該函數(shù)用于下拉列表式組合框時(shí),會(huì)返回CB_ERR。

BOOL SetEditSel(int nStartChar,int
nEndChar);

用于在組合框控件的編輯框中選擇字符。nStartChar參數(shù)指定起始位置,nEndChar參數(shù)指定終止位置。

DWORD_PTR
GetItemData(int nIndex) const;

獲取組合框中指定項(xiàng)所關(guān)聯(lián)的32位數(shù)據(jù)。nIndex參數(shù)指定組合框控件的列表框某項(xiàng)的索引(從0開始)。

int
SetItemData(int nIndex,DWORD_PTR dwItemData);

為某個(gè)指定的組合框列表項(xiàng)設(shè)置一個(gè)關(guān)聯(lián)的32位數(shù)。nIndex參數(shù)指定要進(jìn)行設(shè)置的列表項(xiàng)索引。dwItemData參數(shù)指定要關(guān)聯(lián)的新值。

void
GetLBText(int nIndex,CString& rString) const;

從組合框控件的列表框中獲取某項(xiàng)的字符串。nIndex參數(shù)指定要獲取字符串的列表項(xiàng)的索引,CString參數(shù)用于接收取到的字符串。

int GetLBTextLen(int nIndex) const;
獲取組合框控件的列表框中某項(xiàng)的字符串長度。nIndex參數(shù)指定要獲取字符串長度的列表項(xiàng)的索引。

int GetTopIndex( ) const;
獲取組合框控件的列表框中第一個(gè)可見項(xiàng)的索引。

int SetTopIndex(int nIndex);
將組合框控件的列表框中某個(gè)指定項(xiàng)設(shè)置為可見的。nIndex參數(shù)指定了該列表項(xiàng)的索引。該函數(shù)成功則返回0,有錯(cuò)誤發(fā)生則返回CB_ERR。

BOOL
LimitText(int nMaxChars);

用于限制用戶在組合框控件的編輯框中能夠輸入的最大字節(jié)長度。nMaxChars參數(shù)指定了用戶能夠輸入文字的最大字節(jié)長度,如果為0則長度被限制為65535個(gè)字節(jié)。

int
AddString(LPCTSTR lpszString);

為組合框控件中的列表框添加新的列表項(xiàng)。lpszString參數(shù)是指向要添加的字符串的指針。該函數(shù)的返回值如果大于等于0,那么它就是新列表項(xiàng)的索引,而如果有錯(cuò)誤發(fā)生則會(huì)返回CB_ERR,如果沒有足夠的內(nèi)存存放新字符串則返回CB_ERRSPACE。

int
DeleteString(UINT nIndex);

刪除組合框中某指定位置的列表項(xiàng)。nIndex參數(shù)指定了要?jiǎng)h除的列表項(xiàng)的索引。該函數(shù)的返回值如果大于等于0,那么它就是組合框中剩余列表項(xiàng)的數(shù)量。如果nIndex指定的索引超出了列表項(xiàng)的數(shù)量則返回CB_ERR。

int
FindString(int nStartAfter,LPCTSTR lpszString) const;

在組合框控件的列表框中查找但不選中第一個(gè)包含指定前綴的列表項(xiàng)。nStartAfter參數(shù)指定了第一個(gè)要查找的列表項(xiàng)之前的那個(gè)列表項(xiàng)的索引。lpszString指向包含要查找的前綴的字符串。該函數(shù)的返回值如果大于等于0,那么它是匹配列表項(xiàng)的索引,如果查找失敗則返回CB_ERR。

int InsertString(int nIndex,LPCTSTR lpszString);
向組合框控件的列表框中插入一個(gè)列表項(xiàng)。nIndex參數(shù)指定了要插入列表項(xiàng)的位置,lpszString參數(shù)則指定了要插入的字符串。該函數(shù)返回字符串被插入的位置,如果有錯(cuò)誤發(fā)生則會(huì)返回CB_ERR,如果沒有足夠的內(nèi)存存放新字符串則返回CB_ERRSPACE。

int SelectString(int nStartAfter,LPCTSTR lpszString);
在組合框控件的列表框中查找一個(gè)字符串,如果查找到則選中它,并將其顯示到編輯框中。參數(shù)同F(xiàn)indString。如果字符串被查找到則返回此列表項(xiàng)的索引,如果查找失敗則返回CB_ERR,并且當(dāng)前選擇項(xiàng)不改變。


此外,CComboBox類還繼承了CWnd類的成員函數(shù)GetWindowText、SetWindowText等。

    一般在使用此控件時(shí),初始化時(shí)需要添加相應(yīng)的信息:
        for (int i = 0; i < printers.size(); i++)
        {
            m_comboPrinters.AddString(printers.at(i));
        }
        m_comboPrinters.SetCurSel(0);

    需要清空所有的信息時(shí),使用
        while (m_comboPrinters.GetCount() > 0)
        {
            m_comboPrinters.DeleteString(0);
        }

參考資料

http://www.jizhuomi.com/software/189.html

總結(jié)

以上是生活随笔為你收集整理的组合框控件 -- CComboBox的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。