CComboBox类的成员

来源:互联网 发布:淘宝网包真包老袁大头 编辑:程序博客网 时间:2024/05/06 10:31

CComboBox类的成员

初始化函数
Create 创建一个组合框并应用到CComboBox对象上  
InitStorage 预先为组合框的列表框中的项和字符串分配内存  

通用操作 
GetCount 取得组合框的列表框中项的个数  
GetCurSel 取得组合框的列表框中当前选中项(如果有的话)的下标  
SetCurSel 在组合框的列表框中选择一个字符串  
GetEditSel 取得组合框的编辑控件中当前选项的起止字符位置  
SetEditSel 选中组合框的编辑控件中的字符  
SetItemData 设置组合框中指定项的32位值  
SetItemDataPtr 把组合框中指定项的32位值设置成一个指定的void型指针  
GetItemData 检索应用为组合框的项提供的32位值  
GetItemDataPtr 检索应用为组合框的项提供的32位值,返回一个void型指针  
GetTopIndex 返回组合框中列表框的第一个可见项的下标  
SetTopIndex 让组合框的列表框显示指定下标所在的项  
SetHorizontalExtent 设置组合框中列表框的水平宽度(以像素为单位),如果列表超过该宽度,将需要用滚动条  
GetHorizontalExtent 返回组合框中列表框的水平宽度(以像素为单位)  
SetDroppedWidth 设置组合框中下拉列表允许的最小宽度  
GetDroppedWidth 返回组合框中下拉列表允许的最小宽度  
Clear 删除编辑控件中的当前选择(如果有的话)  
Copy 以CF_TEXT格式拷贝编辑控件中的当前选择(如果有的话)到剪贴板  
Cut 删除编辑控件中的选择项(如果有的话),并把删除的内容以CF_TEXT格式拷贝到剪贴板  
Paste 在编辑控件中的当前位置粘贴剪贴板中的内容。仅当剪贴板中的数据是CF_TEXT格式的才会真正插入  
LimitText 设置用户可以在组合框的编辑控件中输入的文本的最大长度  
SetItemHeight 设置组合宽中列表框的项的高度或编辑控件(或静态控件)中文本的高度  
GetItemHeight 取得组合框中列表项的高度  
GetLBText 从组合框的列表框中取得一个字符串  
GetLBTextLen 取得组合框的列表框中某个字符串的长度  
ShowDropDown 显示或者隐藏风格为CBS_DROPDOWN或CBS_DROPDOWNLIST的组合框的列表框  
GetDroppedControlRect 取得组合框中可见(已经下拉)的列表框的屏幕坐标  
GetDroppedState 检测组合框的列表框是否可见(是否已经下拉)  
SetExtendedUI 选择风格为CBS_DROPDOWN或CBS_DROPDOWNLIST的组合框中的列表框的缺省用户接口或扩展用户接口  
GetExtendedUI 检测组合框的用户接口是缺省的还是扩展的  
GetLocale 取得组合框的定位标记  
SetLocale 设置组合框的定位标记  

字符串操作
AddString 在组合框的列表框的列表末尾添加一个字符串,或在具有CBS_SORT风格的的列表框中按次序所在的位置插入一个字符串  
DeleteString 删除组合框中的列表框中的一个字符串  
InsertString 在组合框的列表框中插入一个字符串  
ResetContent 删除组合框的列表框和编辑控件中的所有项  
Dir 在组合框的列表框中添加文件名的列表  
FindString 在组合框的列表框中查找具有指定前缀的第一个字符串  
FindStringExact 在组合框的列表框中查找具有与指定字符串完全匹配的第一个字符串  
SelectString 在组合框的列表框中查找字符串,找到后选中它,并把它拷贝到编辑控件中  

 

 

VC中Combo Box控件使用大全(转)

一、如何添加/删除Combo Box内容
1,在Combo Box控件属性的Data标签里面添加,一行表示Combo Box下拉列表中的一行。换行用ctrl+回车。
2,在程序初始化时动态添加

如:
//控件内容初始化
CStringstrTemp;
((CComboBox*)GetDlgItem(IDC_COMBO_CF))->ResetContent();//消除现有所有内容
for(inti=1;i<=100;i++)
{
   strTemp.Format("%d",i);
    ((CComboBox*)GetDlgItem(IDC_COMBO_CF))->AddString(strTemp);
}

3,下拉的时候添加
如:
CStringstrTemp;intiCount=((CComboBox*)GetDlgItem(IDC_COMBO_CF))->GetCount();//取得目前已经有的行数if(iCount<1)//防止重复多次添加{
    ((CComboBox*)GetDlgItem(IDC_COMBO_CF))->ResetContent();for(inti=1;i<=100;i++)
    {strTemp.Format("%d",i);
        ((CComboBox*)GetDlgItem(IDC_COMBO_CF))->AddString(strTemp);
    }
}
4,删除
DeleteString(UINTnIndex)//删除指定行,
5,插入
InsertString(intnIndex,LPCTSTRlpszItem)//将行插入到指定位置
6,查找
FindString(int nStartAfter,LPCTSTRlpszItem)//可以在当前所有行中查找指定的字符传的位置,nStartAfter指明从那一行开始进行查找。intSelectString(int nStartAfter,LPCTSTRlpszItem)//可以选中包含指定字符串的行
二、如何控制Combo Box的下拉长度
1,首先要知道两点:一、那就是在设计界面里,点击一下Combo Box的下拉箭头,此时出现的调整框就是Combo Box的下拉调整框。
2,二、属性里有个 No integral height 钩选项,表示最大长度为设计长度,如果实际内容比设计长度多,就出现滚动条,少就以实际长度显示。
三、选择其中的某行
1,选中:
intiPos=((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))

通过调用intGetCount( )得到当前列表框中行的数量。
如果需要得到/设置当前被选中的行的位置,可以调用intGetCurSel( )/intSetCurSel(intiIndex)
通过调用intGetLBText(intnIndex,LPTSTRlpszText)得到列表框内指定行的字符串。
此外通过调用intFindString(int nStartAfter,LPCTSTRlpszItem)可以在当前所有行中查找指定的字符传的位置,nStartAfter指明从那一行开始进行查找。
int SelectString( int nStartAfter, LPCTSTR lpszItem )可以选中包含指定字符串的行。
此外输入框的功能都能够使用,如可以利用:
DWORD GetEditSel( ) /BOOL SetEditSel( int nStartChar, int nEndChar )得到或设置输入框中被选中的字符位置。
BOOL LimitText( int nMaxChars )设置输入框中可输入的最大字符数。
输入框的剪贴板功能Copy,Clear,Cut,Paste动可以使用。
最后介绍一下列表框几种常用的消息映射宏:
ON_CBN_DBLCLK 鼠标双击
ON_CBN_DROPDOWN 列表框被弹出
ON_CBN_KILLFOCUS / ON_CBN_SETFOCUS 在输入框失去/得到输入焦点时产生
ON_CBN_SELCHANGE 列表框中选择的行发生改变
ON_CBN_EDITUPDATE 输入框中内容被更新
使用以上几种消息映射的方法为定义原型如:afx_msg void memberFxn( );的函数,并且定义形式如ON_Notification( id, memberFxn )的消息映射。如果在对话框中使用组合框,Class Wizard会自动列出相关的消息,并能自动产生消息映射代码。
在MFC 4.2中对组合框进行了增强,你可以在组合框中使用ImageList,有一个新的类CComboBoxEx(由CComboBox派生)来实现这一功能。在CComboBoxEx类中添加了一些新的成员函数来实现新的功能:首先你需要调用CImageList* SetImageList( CImageList* pImageList );来设置ImageList,然后调用
int InsertItem( const COMBOBOXEXITEM* pCBItem );来添加行,其中COMBOBOXEXITEM定义如下:
typedef struct {      
UINT mask;      
int iItem;      
LPTSTR pszText;     
int cchTextMax;      
int iImage;      
int iSelectedImage;      
int iOverlay;      
int iIndent;      
LPARAM lParam;
} COMBOBOXEXITEM, *PCOMBOBOXEXITEM;
你需要设置mask=CBEIF_IMAGE CBEIF_TEXT,并设置iItem为插入位置,设置pszText为显示字符串,设置iImage为显示的图标索引。下面的代码演示了如何进行插入:
/*m_cbeWnd 为已经创建的CComboBox对象
m_list 为CImageList对象IDB_IMG 为16*(16*4)的位图,每个图片为16*16共4个图标*/
m_list.Create(IDB_IMG,16,4,RGB(0,0,0));
m_cbeWnd.SetImageList(&m_list);
COMBOBOXEXITEM insItem;insItem.mask=CBEIF_IMAGE CBEIF_TEXT;insItem.iItem=0; insItem.iImage=0;insItem.pszText="Line 1";m_cbeWnd.InsertItem(&insItem);insItem.iItem=1;insItem.iImage=1;insItem.pszText="Line 2";m_cbeWnd.InsertItem(&insItem);
通过调用int DeleteItem( int iIndex );来删除行,并指明行的位置。
通过调用BOOL GetItem( COMBOBOXEXITEM* pCBItem )/BOOL SetItem( const COMBOBOXEXITEM* pCBItem );来得到/设置行数据。