自绘CComboBox

转自:http://www.gymsaga.com/mfc/419.html

先介绍基本ComboBox:

风格

列表框何时可见

静态控件还是编辑控件

Simple

包括下拉框一直可见

编辑控件

Drop-down

 可编辑 下拉框 点击可见

编辑控件

Drop-downlist

  不可编辑 下拉框 点击可见

静态控件

常见函数:


int AddString( LPCTSTR lpszString );

返回值大于等于0时,是列表中项的下标。出错时,返回CB_ERROR,没有足够的空间存放新的字符串时返回CB_ERRSPACE此外只有在组合框不是CBS_SORT风格的时候,才能在最后面挨个插入,否则会根据排列规则进行列表的排列

int InsertString( int nIndex, LPCTSTR lpszString );

返回值返回插入项的下标。出错时返回CD_ERR。如果没有足够的内存插入项,则返回CB_ERRSPACE此外,它不会引起CBS_SORT风格的列表重新排序。

int DeleteString( UINT nIndex );

返回值:大于等于0时,是列表中剩下的字符串的个数。如果nIndex指定的下标大于列表中项的总数,则返回CB_ERROR

int SetCurSel( int nSelect );

设置选择相应列表项。必要时列表框会滚动,以使该字符串在列表的可视区内(列表是可见的时)。编辑控件中的文本将相应地变为选中的字符串。此前在列表框中的选择将不复存在。


nt GetCurSel( ) const;

返回值:返回组合框中列表框中当前选中的项的下标。如果没有选中项,则返回CB_ERR

int GetCount( ) const;

返回值:返回项的个数。该值比最后一项的下标要大1(因为下标是从0开始计算的)。出错时返回CB_ERR


SetItemDataGetItemDataSetItemDataPtrGetDataItemPtr的用法

SetItemData给组合框中某个项设置一个32位的值。GetItemData当然就是获取这个值了

SetItemDataPtrGetDataItemPtr来设置复杂数据 ,比如结构体之类的。

Clear函数不是ResetContent函数

刚才也看到了,ResetContent函数能把所有数据包括Edit显示的内容全部清空了,但是Clear只是删除组合框的编辑控件的当前选择(如果有的话)。不要混淆

int SetItemHeight( int nIndex, UINT cyItemHeight );

返回值:如果下标或高度值无效,则返回CB_ERR。否则为0


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_DROPDOWNLIST的组合框来说,不会出现双击的消息,因为一次单击就会使下拉列表隐藏或显示了。

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函数。

ON_CBN_SETFOCUS

组合框获得输入焦点。


不管是Unicode编程还是Ansi编程,字符串转换成整形,虽然_atoi()有时候可以满足你的需要,但是很多时候他不是一个很好的选择,如果你准备使用 Unicode 字符,你应该用_ttoi(),它在 ANSI 编码系统中被编译成_atoi(),而在 Unicode 编码系统中编译成_wtoi()。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值