【MFC入门文字教程】9-列表框控件(CListBox)
本帖最后由 无符号整形 于 2016-11-14 20:45 编辑如果要让用户选择一组数据,貌似Edit Control不太好……{:10_277:}
一般使用ListBox(列表)或者Combo Box(下拉列表)
如果对一个List Box控件添加变量,那么变量的类型就是CListBox的。
先岔开话题,谈谈List Box能添加哪些消息处理程序吧!
消息名 说明
LBN_SELCHANGE 选择的内容即将更改
LBN_DBLCLK 指示用户已经在控件内双击了鼠标左键
LBN_ERRSPACE 控件可用内存不足
LBN_KILLFOCUS 控件已经丢失输入焦点
LBN_SELCANCEL 取消选定了内容
LBN_SETFOCUS 控件获得了输入焦点
你可以添加这些消息的处理程序,处理他们。
那么,成员函数又有哪些呢?
注:CListBox继承于CWnd。
名称作用
CListBox::AddString 将字符串添加到列表框中
CListBox::CharToItem 覆盖以提供不含字符串的自绘制列表框定制 WM_CHAR
CListBox::CompareItem 被框架调用以确定一系列列表框中某新项的位置
CListBox::Create 创建Windows列表框并将其附加到CListBox对象
CListBox::DeleteItem 当用户从自绘制列表框中删除某项时,被框架调用
CListBox::DeleteString 从列表框中删除字符串
CListBox::Dir 将当前目录中的文件名,驱动器或两者添加到列表框中
CListBox::DrawItem 当自绘制列表框的一个可视部分改变时,被框架调用
CListBox::FindString 在列表框中搜索字符串
CListBox::FindStringExact 查找与指定字符串匹配的第一个列表框字符串
CListBox::GetAnchorIndex 在列表框中检索当前锚点项的从零开始的索引
CListBox::GetCaretIndex 确定在多选列表框中具有焦点矩形的项目的索引
CListBox::GetCount 返回列表框中的字符串数
CListBox::GetCurSel 返回列表框中当前所选字符串的,从零开始的索引
CListBox::GetHorizontalExtent 返回可以水平滚动列表框的宽度(以像素为单位)
CListBox::GetItemData 返回与列表框项相关联的32位值
CListBox::GetItemDataPtr 返回指向列表框项的指针
CListBox::GetItemHeight 确定列表框中项目的高度
CListBox::GetItemRect 返回当前显示的列表框项的边界矩形
CListBox::GetListBoxInfo 检索每列的项目数
CListBox::GetLocale 检索列表框的区域设置标识符
CListBox::GetSel 返回列表框项的选择状态
CListBox::GetSelCount 返回在多选列表框中当前选择的字符串数
CListBox::GetSelItems 返回当前在列表框中选择的字符串的索引
CListBox::GetText 将列表框项目复制到缓冲区中.
CListBox::GetTextLen 返回列表框项的字节长度
CListBox::GetTopIndex 返回列表框中第一个可见字符串的索引
CListBox::InitStorage 为列表框项目和字符串预分配内存块
CListBox::InsertString 在列表框中的特定位置插入字符串
CListBox::ItemFromPoint 返回最接近指定的点的列表框项的索引.
CListBox::MeasureItem 当自绘制列表框创建时,被框架调用来确定列表框维数
CListBox::ResetContent 从列表框中清除所有条目
CListBox::SelectString 在单选列表框中搜索并且选择字符串
CListBox::SelItemRange 选择/不选多选列表框中的一些字符串
CListBox::SetAnchorIndex 在多选列表框中设置锚点以开始扩展选择
CListBox::SetCaretIndex 设置焦点矩形到多选列表框中的指定的索引项
CListBox::SetColumnWidth 设置多列列表框的列宽
CListBox::SetCurSel 选择列表框中的字符串
CListBox::SetHorizontalExtent 设置列表框可以水平滚动的宽度(以像素为单位)
CListBox::SetItemData 设置与列表框项相关联的32位值
CListBox::SetItemDataPtr 设置指向列表框项的指针
CListBox::SetItemHeight 设置列表框中项目的高度
CListBox::SetLocale 设置列表框的区域设置标识符
CListBox::SetSel 在多选列表框中选择或取消选择列表框项
CListBox::SetTabStops 在列表框中设置制表位位置
CListBox::SetTopIndex 设置列表框中第一个可见字符串的,从零开始的索引
CListBox::VKeyToItem 覆盖以提供 LBS_WANTKEYBOARDINPUT 风格列表框的设置所需的定制 WM_KEYDOWN
怎么样?功能很强大吧?{:10_256:}
怎么获取当前选择的项索引呢?
很简单,调用GetCurSel成员函数即可。
那么,怎么获取当前选择的项的字符串呢?
也很简单,需要调用两个成员函数
[*] 调用GetCurSel成员函数
[*] 然后,调用GetText成员函数,把项索引填入参数即可
实践时间
大家最喜欢的实践时间又到了!{:10_264:}
目标:创建一个列表,里面有默认如下项目
Fishc
I love Fishc
并且允许用户自己添加数据(提示:可以使用Edit Control)。
让我们开始吧。
1.拖一个List Box控件,并且添加变量(建议把名称设置为m_list)。
2.然后拖一个Edit Control(用户可以从这里输入数据并且添加到list box),并且添加变量(建议把名称设置为m_edit)
3.拖一个按钮(添加元素),然后把Caption属性设置为“添加”(修改标题),最后添加事件处理程序。
4.在OnInitDialog(初始化函数)里面添加如下内容(添加默认项)
m_list.AddString(L"Fishc");
m_list.AddString(L"I love Fishc");
5.在事件处理程序里面添加如下内容。
WCHAR wszBuffer;
::GetWindowText(m_edit.m_hWnd, wszBuffer, 1000);
m_list.AddString(wszBuffer);
然后,编译运行
效果:
你好,怎么实现点完添加后,Edit Control里的内容自动清空,另外我在做一个删除List Box里的内容的功能。 m_Listbox.DeleteString(0);我实现删除,直接这样的,但是发现,列表里的字符至上而下删除,不是我想的选中哪个,删除哪个。 ListBox2.DeleteString(ListBox2.GetCurSel()); 删除List Box指定项 成精的迷茫 发表于 2017-2-7 20:40
m_Listbox.DeleteString(0);我实现删除,直接这样的,但是发现,列表里的字符至上而下删除,不是我想的选中 ...
ListBox2.DeleteString(ListBox2.GetCurSel());
页:
[1]