CObject←CCmdTarget←CWnd←CListBox
CListBox类提供Windows列表框的功能。列表框显示项的列表,如用户可以见到和选择的文件名称。在单选列表框里,用户只可选择一个项。在多选列表框里,可选择许多项。当用户选择某项时,其高亮显示且列表框给父窗口发送一个通知消息。
可从对话模板或直接在你的代码中创建列表框。直接创建时,构造CListBox对象,再调用Create成员函数创建Windows列表框控件并将其附加给CListBox对象。要在对话模板中使用列表框,可在对话框类中声明一个CListbox 变量,再在对话框类的DoDataExchange中使用DDX_Control连接成员变量到此控件(当向对话框类中添加控件变量时,ClassWizard自动为你实现)。
构造函数可以是从CListBox派生的类的一个单步进程。为派生类写构造函数并从中调用Create。如果要处理由列表框发送到其父亲(通常为从CDialog派生的类)的Windows通知消息,为每个消息添加消息映射入口和消息处理成员函数到父类。
每个消息映射入口有以下形式:
ON_Notification( id,memberFxn )
id 指定发送通知的列表框控件的子窗口,memberFxn 是编写处理通知的父成员函数名的地方。
父函数原型如下:
afx_msg void memberFxn( );
下面是可能的消息映射入口列表和描述它们可能被发送到父亲的情况:
ON_LBN_DBLCLK 用户双击列表框中的字符串。只有LBS_NOTIFY风格的列表框才会发送此通知消息。
ON_LBN_ERRSPACE 列表框不能重新分配足够的内存来满足请求。
ON_LBN_KILLFOCUS 列表框正失去输入焦点。
ON_LBN_SELCANCEL 当前列表框选择被取消。此消息只有在列表框是LBS_NOTIFY风格时才发送。
ON_LBN_SELCHANGE 列表框中的选择可能改变。如果选择被CListBox::SetCurSel成员函数改变,则通知不发送。此通知只适用于LBS_NOTIFY风格的列表框。无论何时用户按下箭头键,即使选择未改变,LBN_SELCHANGE通知消息都被发送给多选列表框。
ON_LBN_SETFOCUS 列表框正在接收输入焦点。
ON_WM_CHARTOITEM 一个无字符串的自绘制列表接受WM_CHAR消息。
ON_WM_VKEYTOITEM LBS_WANTKEYBOARDINPUT风格的列表框接受WM_KEYDOWN消息。
如果在对话框中构造一个CListBox对象(通过对话资源),当用户关闭对话框时,CListBox对象自动毁弃。
如果在窗口中构造一个CListBox对象,可能需要毁弃CListBox对象。如果在栈上创建CListBox对象,它会自动毁弃。如果使用new函数在堆上创建CListBox对象,必须对此对象调用delete来在用户关闭父窗口时毁弃它。
如果在CListBox对象中分配内存,可覆盖CListBox析构程序释放分配的内存。
#include <afxwin.h>
请参阅:CWnd, CButton, CComboBox, CEdit, CScrollBar, CStatic