马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
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 | 控件获得了输入焦点 |
你可以添加这些消息的处理程序,处理他们。
那么,成员函数又有哪些呢?
注: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成员函数,把项索引填入参数即可
实践时间
大家最喜欢的实践时间又到了!
目标:创建一个列表,里面有默认如下项目
并且允许用户自己添加数据(提示:可以使用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[1000];
::GetWindowText(m_edit.m_hWnd, wszBuffer, 1000);
m_list.AddString(wszBuffer);
然后,编译运行
效果:
|