CComboBox

CComboBox
2009-09-17 11:01

类CComboBox封装了Windows组合框。组合框由一个列表框和一个静态控件(或编辑控件)组成。列表框部分可以是一直显示的,也可以是隐藏的,在用户单击编辑控件边上的按钮(下拉箭头)时下拉该列表框。列表框中当前选中的项(如果有的话)显示在静态控件或编辑控件中。如果组合框带有下拉风格,则当用户在编辑框中输入列表项的开始字符时,对应项(如果有的话)中的第一个将会加亮显示。下表列出了组合框的三种风格:
风格 列表框何时可见 静态控件还是编辑控件
Simple 总是可见 编辑控件
Drop-down 当用户单击控件边上的下拉箭头时 编辑控件
Drop-down list 当用户单击控件边上的下拉箭头时 静态控件
可以从对话框模板中建立一个CComboBox对象,也可以直接在代码中创建。无论采用哪种方法,都要先调用CComboBox的构造函数构造一个CComboBox对象,然后调用成员函数Create创建控件并在CComboBox对象上应用它。消息映射入口的格式如下:ON_Notification( id, memberFxn )其中id指定了发送通知的组合框控件的子窗口ID,而memberFxn是用于处理该通知的父成员函数的名字。父窗口的函数原型的格式如下:afx_msg void memberFxn( );通知发送的次序是不能预先确定的。例如,通知CBN_SELCHANGE既可能在CBN_CLOSEUP之前也可能在它之后出现。可能的消息映射入口如下:
 ON_CBN_CLOSEUP(Windows 3.1及更高版本) 组合框的列表已被关闭。对于风格为CBS_SIMPLE的组合框来说,不会发送该通知消息。
 ON_CBN_DBCLICK 用户双击了列表框中的一个字符串。只对风格为CBS_SIMPLE的组合框发送。对于风格为CBS_DROPDOWN或CBS_DROP-DOWNLIST的组合框来说,不会出现双击的消息,因为一次单击就会使下拉列表隐藏或显示了。
 ON_CBN_DROPDOWN 下拉出下拉列表(变为可见)。只对风格为CBS_DROPDOWN或CBS_DROPDOWNLIST的组合框起作用。
 ON_CBN_EDITCHANGE 用户发出了一个可能改变编辑控件中文本的动作。与消息CBN_EDITUPDATE不同,本消息是在Windows刷新屏幕之后发出的。风格为CBS_DROPDOWNLIST的组合框没有该通知。
 ON_CBN_EDITUPDATE 编辑控件部分将显示变化了的文本。本通知消息在控件已经格式化了文本但没有显示时发送。风格为CBS_DROPDOWNLIST的组合框没有该通知。
 ON_CBN_ERRSPACE 不能为组合框分配足够的内存进行响应某个请求。
 ON_CBN_SELENDCANCEL(Wndows 3.1及更高版本) 表明用户的选择将被忽略。用户在单击了一个项之后,又单击了另外一个窗口或控件隐藏了组合框的下拉列表。此通知消息在CBN_CLOSEUP消息之前发送,以表明用户的选择将被忽略。即使没有发送CBN_CLOSEUP通知消息,也会发送CBN_SELENDCANCEL或CBN_SELENDOK消息(例如风格为CBS_SIMPLE的组合框)。
 ON_CBN_SELENDOK 用户在选择了一项以后,要么按了ENTER键,要么按了向下箭头键,从而隐藏了组合框的列表。此通知消息在CBN_CLOSEUP之前发送,表明用户的选择将不被认为是有效的。即使没有发送CBN_CLOSEUP通知消息,也会发送CBN_SELENDCANCEL或CBN_SEL-ENDOK消息(例如风格为CBS_SIMPLE的组合框)。
 ON_CBN_KILLFOCUS 组合框将失去输入焦点。
 ON_CBN_SELCHANGE 用户在列表中单击或者利用箭头键选择了另一个项,从而引起了选中项的改变。在处理此消息时,编辑控件中的文本只能通过GetLBText或者类似的某个函数存取。不能使用GetWindowText函数。
 l ON_CBN_SETFOCUS 组合框获得输入焦点。
如果在对话框中创建了一个CComboBox对象,在关闭对话框时该CComboBox对象将自动撤消。如果在另外一个窗口对象中嵌入了一个CComboBox对象,不需要显式地撤消它。如果在堆栈中创建了一个CComboBox对象,它也会被自动地撤消。如果采用new在内存堆中创建了一个CComboBox对象,则必须调用delete来撤消它。
#include <afxwin.h>
请参阅 CWnd, CButton, CEdit, CListBox, CScrollBar, CStatic,CDialog

CComboBox类的成员
构造函数
CcomboBox构造一个CComboBox对象
初始化函数
Create创建一个组合框并应用到CComboBox对象上
InitStorage预先为组合框的列表框中的项和字符串分配内存
通用操作
GetCount取得组合框的列表框中项的个数
GetCurSel取得组合框的列表框中当前选中项(如果有的话)的下标
SetCurSel在组合框的列表框中选择一个字符串
GetEditSel取得组合框的编辑控件中当前选项的起止字符位置
SetEditSel选中组合框的编辑控件中的字符
SetItemData设置组合框中指定项的32位值
SetItemDataPtr把组合框中指定项的32位值设置成一个指定的void型指针
GetItemData检索应用为组合框的项提供的32位值
GetItemDataPtr检索应用为组合框的项提供的32位值,返回一个void型指针
GetTopIndex返回组合框中列表框的第一个可见项的下标
SetTopIndex让组合框的列表框显示指定下标所在的项
SetHorizontalExtent设置组合框中列表框的水平宽度(以像素为单位),如果列表超过该宽度,将需要用滚动条
GetHorizontalExtent返回组合框中列表框的水平宽度(以像

CComboBox::DrawItem
virtual void DrawItem( LPDRAWITEMSTRUCT lpDrawItemStruct );
参数
lpDrawItemStruct指向一个LPDRAWITEMSTRUCT结构的指针,结构中包含了有关项的绘制的信息。
说明
本函数在自定义的组合框的某个可视属性发生改变时由框架调用。结构DRAWITEMSTRUCT中的成员itemAction指明了要进行的绘制动作。缺省时,此函数什么也不做。可以覆盖此函数以实现对自定义组合框的绘制。在此成员函数终止之前,应用必须重设置所有为lpDrawItemStruct中的显示上下文选中的GDI对象。
请参阅 CComboBox::CompareItem,
WM_DRAWITEM,
CComboBox::MeasureItem,
CComboBox::DeleteItem,

CComboBox::FindString
int FinsString( int nStartAfter, LPCTSTR lpszString )const;
返回值
大于等于0时,是找到的匹配字符串的下标。查找未命中时返回CB_ERR。
参数
nStartAfter指定了查找开始的下标。当查到列表的结尾处时,又继续找到它标志的位置。如果设为-1,则从列表的开始处开始查找匹配的串。
lpszString指向一个以null结尾的字符串,该字符串就是待查找的匹配前缀。查找过程是不区分大小写的。
说明
查找组合框的列表中匹配指定前缀的第一个字符串,但不把它选为当前项。
请参阅 CComboBox::SelectString,CComboBox::SetCursel,CB_FINDSTRING

CComboBox::FindStringExact
int FindStringExact( int nIndexStart, LPCTSTR lpszFind ) const;
返回值
返回匹配的项的下标。未查找到匹配串时返回CB_ERR。
参数
nIndexStart指定了查找开始的下标。当查到列表的结尾处时,又继续找到它标志的位置。如果设为-1,则从列表的开始处开始查找匹配的串。
lpszFind指向一个以null结尾的字符串,该字符串中可以包括完整的文件名(包括扩展名)。查找过程是不区分大小写的。
说明
本函数用于查找组合框的列表中匹配指定字符串的第一个项,但不把它选为当前项。如果组合框是自定义的,但未设置CBS_HASSTRING风格,FindStringExact会试图匹配双字值。
请参阅 CComboBox::FindString, CB_FINDSTRINGEXACT

CComboBox::GetCount
int GetCount( ) const;
返回值
返回项的个数。该值比最后一项的下标要大1(因为下标是从0开始计算的)。出错时返回CB_ERR。
说明
本函数用于取得组合框中列表框中项的个数。
请参阅 CB_GETCOUNT

CComboBox::GetCurSel
int GetCursor( ) const;
返回值
返回组合框中列表框中当前选中的项的下标。如果没有选中项,则返回CB_ERR。
说明
本函数用于取得组合框中当前选中的项的下标。
请参阅 CComboBox::SetCurSel, CB_GETCURSEL

CComboBox::GetDroppedControlRect
void GetDroppedControlRect( LPRECT lprect ) const;
参数
lprect指向RECT结构的一个指针,该结构用于接收取得的坐标。
说明
本函数用于取得下拉组合框中可见(已经下拉)的列表框的屏幕坐标。
请参阅 CB_GETDROPPEDCONTROLRECT

CComboBox::GetDroppedState
BOOL GetDroppedState( ) const;
返回值
列表框可见时返回非零值,否则为0。
说明
本函数用于判断下拉组合框的列表框是否可见(是否已经下拉)。
请参阅 CB_SHOWDROPDOWN, CB_GETDROPPEDSTATE

CComboBox::GetDroppedWidth
int GetDroppedWidth( ) const;
返回值
调用成功时,返回允许的最小宽度,否则返回CB_ERR。
说明
本函数用于取得组合框中的列表框所允许的最小宽度(以像素为单位)。它只对风格为CBS_DROPDOWN或CBS_DROPDOWNLIST的组合框有效。缺省时,下拉列表框允许的最小宽度为0。可以调用函数SetDroppedWidth来设置这个值。当组合框的列表框部分显示时,它的宽度是二者中大的那个或组合框的宽度。
请参阅 CComboBox::SetDroppedWidth, CB_GETDROPPEDWIDTH

CComboBox::GetEditSel
DWORD GetEditSel( ) const;
返回值
返回一个32位的值。低字记录了编辑控件中选中的字符串中起始位置,高字记录了紧接着选中的字符串的第一个字符的位置。如果组合框上没有编辑控件,则返回CB_ERR。
说明
本函数取得组合框的编辑控件中当前被选中的字符串的起止位置。
请参阅 CComboBox::SetEditSel, CB_GETEDITSEL

CComboBox::GetExtendedUI
BOOL GetExtendedUI( ) const;
返回值
如果组合框有扩展的用户接口,则返回非零值,否则为0。
说明
调用GetExtendedUI成员函数,确定组合框是具有缺省用户界面,还是扩展的用户界面。扩展的用户界面可用下列方法指定:
 单击组合框的静态控件(只适用于CBS_DROPDOWNLIST风格的组合框)。
 按向下的箭头以显示列表框(功能键F4被禁止了)。当项的列表不可见时,是不能在静态控件中滚动的(箭头键被禁止了)。
请参阅 CComboBox::SetExtendedUI, CB_GETEXTENDEDUI

CComboBox::GetHorizontalExtent
UINT GetHorizontalExtent( ) const;
返回值
返回组合框中列表框的可滚动部分的宽度(以像素为单位)。
说明
本函数取得组合框中列表框的可水平滚动部分的宽度。仅当组合框的列表框有水平滚动条时有效。
CComboBox::MeasureItem
virtual void MeasureItem( LPMEASUREITEMSTRUCTlpMeasureItemStruct );
参数
lpMeasureItemStruct指向一个LPMEASUREITEMSTRUCT结构的长指针。
说明
当创建一个具有自定义风格的组合框时,由主程序调用。缺省时此函数什么都不做。可以覆盖它并填充MEASUREITEMSTRUCT结构通知Windows组合框中列表框的维数。如果组合框是CBS_OWNERDRAW-VARIABLE风格的,主程序需要为列表框中的每个项调用此函数。否则,此函数只需调用一次。用CWnd的成员函数SubclassDlgItem创建一个具有CBS_OWNERDRAWFIXED风格的自定义组合框要考虑其它的一些编程细节。参阅“技术指南14”。
关于结构MEASUREITEMSTRUCT,请参阅CWnd::OnMeasureItem。
请参阅 CComboBox::CompareItem,
CComboBox::DrawItem
WM_MEASUREITEM,
CComboBox::DeleteItem

CComboBox::Paste
void Paste( );
说明
本函数把剪贴板中的数据插入到组合框中编辑控件当前光标位置。剪贴板中的数据必须是CF_TEXT格式的。
请参阅 CComboBox::Clear,
CComboBox::Copy,
CComboBox::Cut,
WM_PASTE

CComboBox::ResetContent
void ResetContent( );
说明
本函数删除组合框中列表和编辑控件中的所有项。
请参阅 cb_resetcontent

CComboBox::SelectString
int SelectString( int nStartAfter, LPCTSTR lpszString );
返回值
找到相应的字符串时,返回它的下标。没有找到时,返回CB_ERR,并且当前的选择不变。
参数
nStartAfter指定了查找开始的下标。当查到列表的结尾处时,又继续找到它标志的位置。如果设为-1,则从列表的开始处开始查找匹配的串。
lpszString指向一个以null结尾的字符串,该字符串就是待查找的匹配前缀。查找过程是不区分大小写的。
说明
查找组合框的列表中匹配指定前缀的第一个字符串,如果找到则把它选为当前项,并把它拷贝到编辑控件中。
注意,成员函数SelectString和FindString都是查找字符串,但是SelectString同时也把找到的字符串作为当前选中的项。
请参阅 CComboBox::FindString, CB_SELECTSTRING

CComboBox::SetCurSel
int SetCurSel( int nSelect );
返回值
调用成功时返回选中的项的下标。如果nSelect大于列表中项的个数,则返回CB_ERR。如果nSelect为-1,则清除当前的选择并返回CB_ERR。
参数
nSelect指定要选中的字符串的下标。如果为-1,则清除当前的选择,编辑控件中的内容设置为空。
说明
本函数在组合框的列表框中选择一个字符串。必要时列表框会滚动,以使该字符串在列表的可视区内(列表是可见的时)。编辑控件中的文本将相应地变为选中的字符串。此前在列表框中的选择将不复存在。
请参阅 CComboBox::GetCurSel, CB_SETCURSEL

CComboBox::SetDroppedWidth
int SetDroppedWidth( UINT nWidrh );
返回值
调用成功时,返回列表框的新宽度。否则返回CB_ERR。
参数
nWidth组合框的列表框所允许的最小宽度(以像素为单位)。
说明
本函数用于设置组合框中列表框所允许的最小宽度。只对风格为CBS_DROPD-OWN或CBS_DROPDOWNLIST的组合框有效。缺省时,下拉列表框所允许的最小宽度为0。显示组合框的列表部分时,它的真正宽度是设置的最小宽度和组合框的宽度二者中较大的一个。
请参阅 CComboBox::GetDroppedWidth, CB_SETDROPPEDWIDTH

CComboBox::SetEditSel
BOOL SetEditSel( int nStartChar , int nEndChar );
返回值
调用成功时返回非零值,否则为0。如果CComboBox的风格为CBS_DROPD-OWNLIST或没有列表框,则返回CB_ERR。
参数
nStartChar指定起始位置。如果为-1,则清除当前的选择。
nEndChar指定结束位置。如果为-1,则选中编辑控件中从开始位置到最后的所有字符。
说明
本函数用来选中编辑控件中的部分字符串。位置是从0开始计算的。要选中编辑控件中的第一个字符,开始位置要设为0。结束位置指的是紧跟着要选择的字符串的最后一个字符的那个位置。例如,选中编辑控件中的前四个字符,需要把开始位置设为0,结束位置设为4(而不是3)。
请参阅 CComboBox::GetEditSel, CB_SETEDITSEL

CComboBox::SetExtendedUI
int SetExtendedUI(BOOL bExtended = TRUE );
返回值
调用成功时返回CB_OKAY,否则返回CB_ERR。
参数
bExtended指定组合框是采用扩展的用户接口,还是采用缺省的用户接口。为TRUE时采用扩展的用户接口,FALSE时采用标准的用户接口(缺省的)。
说明
本函数用于为风格为CBS_DROPDOWN或CBS_DROPDOWNLIST的组合框设置使用用户接口的方式。扩展的用户接口可以用以下步骤确认:l 单击组合框的静态控件(只适用于CBS_DROPDOWNLIST风格的组合框);l 按向下的箭头以显示列表框(功能键F4被禁止了)。当项的列表不可见时,是不能在静态控件中滚动的(箭头键被禁止了)。
请参阅 CComboBox::GetExtendedUI, CB_SETEXTENDEDUI

CComboBox::SetHorizontalExtent
void SetHorizontalExtent( UINT nExtent );
参数
nExtent指定组合框中列表框能够水平滚动的像素数。
说明
本函数设置组合框中的列表框所能水

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值