鱼C论坛

 找回密码
 立即注册
查看: 7823|回复: 4

[技术交流] 【MFC入门文字教程】9-列表框控件(CListBox)

[复制链接]
发表于 2016-11-14 20:01:39 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 无符号整形 于 2016-11-14 20:45 编辑

如果要让用户选择一组数据,貌似Edit Control不太好……
一般使用ListBox(列表)或者Combo Box(下拉列表)

如果对一个List Box控件添加变量,那么变量的类型就是CListBox的。
先岔开话题,谈谈List Box能添加哪些消息处理程序吧!
消息名 说明
LBN_SELCHANGE 选择的内容即将更改
LBN_DBLCLK 指示用户已经在控件内双击了鼠标左键
LBN_ERRSPACE 控件可用内存不足
LBN_KILLFOCUS 控件已经丢失输入焦点
LBN_SELCANCEL 取消选定了内容
LBN_SETFOCUS 控件获得了输入焦点

你可以添加这些消息的处理程序,处理他们。
2016-11-14.png

那么,成员函数又有哪些呢?

注: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


怎么样?功能很强大吧?
怎么获取当前选择的项索引呢?
很简单,调用GetCurSel成员函数即可。
那么,怎么获取当前选择的项的字符串呢?
也很简单,需要调用两个成员函数
  • 调用GetCurSel成员函数
  • 然后,调用GetText成员函数,把项索引填入参数即可



实践时间
大家最喜欢的实践时间又到了!
目标:创建一个列表,里面有默认如下项目
Fishc
I love Fishc

并且允许用户自己添加数据(提示:可以使用Edit Control)。
让我们开始吧。
1.拖一个List Box控件,并且添加变量(建议把名称设置为m_list)。
2016-11-14 (1).png
2.然后拖一个Edit Control(用户可以从这里输入数据并且添加到list box),并且添加变量(建议把名称设置为m_edit)
2016-11-14 (2).png
3.拖一个按钮(添加元素),然后把Caption属性设置为“添加”(修改标题),最后添加事件处理程序。
2016-11-14 (3).png
4.在OnInitDialog(初始化函数)里面添加如下内容(添加默认项)
m_list.AddString(L"Fishc");
        m_list.AddString(L"I love Fishc");
5.在事件处理程序里面添加如下内容。
WCHAR wszBuffer[1000];

        ::GetWindowText(m_edit.m_hWnd, wszBuffer, 1000);
        m_list.AddString(wszBuffer);
然后,编译运行
效果:
132MFC.gif

评分

参与人数 2荣誉 +10 鱼币 +10 贡献 +6 收起 理由
HackerWen + 5 + 5 + 3
拈花小仙 + 5 + 5 + 3 永远的MFC`

查看全部评分

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-2-7 20:22:58 | 显示全部楼层
你好,怎么实现点完添加后,Edit Control里的内容自动清空,另外我在做一个删除List Box里的内容的功能。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-2-7 20:40:45 | 显示全部楼层
m_Listbox.DeleteString(0);我实现删除,直接这样的,但是发现,列表里的字符至上而下删除,不是我想的选中哪个,删除哪个。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-2-3 21:34:59 | 显示全部楼层
ListBox2.DeleteString(ListBox2.GetCurSel());           删除List Box指定项
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-2-3 21:35:30 | 显示全部楼层
成精的迷茫 发表于 2017-2-7 20:40
m_Listbox.DeleteString(0);我实现删除,直接这样的,但是发现,列表里的字符至上而下删除,不是我想的选中 ...

ListBox2.DeleteString(ListBox2.GetCurSel());
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-21 21:51

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表