WIN32

列表框样式:
Visual Studio 2013 其他版本
当列表框不包含足够的项滚动时,LBS_DISABLENOSCROLL 列表框显示一个禁用的垂直滚动条。 若无此样式,当列表框不包含足够的项时,滚动条将隐藏。

使用 Shift 键和鼠标或特定组合键LBS_EXTENDEDSEL,用户可以选择多个项。

LBS_HASSTRINGS 指定包含字符串的项所有者描述列表框。 列表框保留内存和字符串的指针,该应用程序可使用 GetText 成员函数检索文本特定项的。

LBS_MULTICOLUMN 指定水平滚动的多列列表框。 SetColumnWidth 成员函数将列的宽度。

每次用户单击或双击字符串,选择LBS_MULTIPLESEL 字符串之间切换。 任意数量的字符串进行选择。

LBS_NODATA 指定无数据列表框。 当计数,列表中将多项一次,指定此样式。 无数据列表框还必须具有 LBS_OWNERDRAWFIXED ,样式,但无法具有 LBS_SORT 或 LBS_HASSTRINGS 样式。

由数据类似于列表框的所有者描述列表框,但不包含字符串或位图数据的项。 命令添加,插入或删除项始终忽略任何指定项数据;请求始终失败查找在列表框内的字符串。 当必须绘制时,系统发送 WM_DRAWITEM 消息。项所有者窗口。 DRAWITEMSTRUCT 结构的 itemID 成员将用 WM_DRAWITEM 消息指定要绘制项的行号。 无数据列表框不发送 WM_DELETEITEM 消息。

在创建列表框,LBS_NOINTEGRALHEIGHT 列表框的尺寸正确应用程序指定的范围。 通常,窗口大小列表框,使列表框部分不显示项。

当更改时,LBS_NOREDRAW 列表框显示未更新。 此样式可通过发送 WM_SETREDRAW 消息随时更改。

LBS_NOSEL 指定列表框包含中查看,但不会选择的项。

LBS_NOTIFY 父窗口接收输入消息,每当用户单击或双击字符串。

LBS_OWNERDRAWFIXED 列表框的所有者负责绘制其内容运行;在列表框项的是同一高度。

LBS_OWNERDRAWVARIABLE 列表框的所有者负责绘制其内容运行;在列表框项的高度是可变的。

在列表框的LBS_SORT字符串按字母顺序排序。

在列表框的LBS_STANDARD 字符串按字母顺序排序,并且,父窗口接收输入消息,每当用户单击或双击字符串。 列表框中包含在任何范围。

当绘制制表符字符串时,使能识别并展开制表符。LBS_USETABSTOPS 列表框 默认选项卡位置 32 是对话框单位。对话框单位 (A 是一个水平或垂直距离。 水平的对话框单位相等到当前基本宽度对话框单位的四分之一。 对话框单位计算基于当前基础系统字体的高度和宽度。 GetDialogBaseUnits Windows 函数返回在像素的当前基本单元对话框。)不应使用此样式与 LBS_OWNERDRAWFIXED

LBS_WANTKEYBOARDINPUT 列表框的所有者接收 WM_VKEYTOITEM 或 WM_CHARTOITEM 消息,只要用户按键,当列表框具有输入焦点时。 这允许您的应用程序处理在执行特定类型。

–以上为摘抄MSDN的笔记,
1.在我的使用中遇到的问题也拿出来分享一下,主要是LBS_OWNERDRAWFIXED这个参数,解释是“列表框的所有者负责绘制其内容运行;在列表框项的是同一高度。”,没理解到他说的是什么意思,我遇到的问题是,加上了这个参数之后,listbox就没有了内容:

默认状态下,列表框窗口消息处理程序只显示列表条目,它的周围没有任何边界。

你可以使用窗口风格标识号WS_BORDER 来加上边框。

另外,你可以使用窗口风格WS_VSCROLL 来增加垂直滚动条,以便用鼠标来滚动列表框条目,也可以使用WS_HSCROLL 来增加水平滚动条,可以用来显示超出列表框宽度的条目。

缺省的列表框风格不会在用户选中某个列表项时产生通知消息,这样一来,程序必须向列表框发送消息以便了解其中条目的选择状态。所以,列表框控件通常都包括列表框风格LBS_NOTIFY,它可以使列表框控件在用户进行操作时,将一些状态信息及时反馈给应用程序。

另外,如果希望列表框控件对列表框中的条目进行排序,那么可以使用另一种常用的风格LBS_SORT。

一般情况下,创建列表框控件最常用的风格组合如下:

(LBS_NOTIFY | LBS_SORT | WS_VSCROLL | WS_BORDER)

ListBox消息
LB_ADDSTRING 新的字符串追加为列表框的最后一项
LB_INSERTSTRING 字符串追加到列表框中的指定位置
LB_DELETESTRING 从列表框中删除指定的条目
LB_RESETCONTENT 清空列表框中的所有内容
LB_GETCOUNT 获得列表框中的条目个数
LB_GETTEXTLEN 确定列表框中指定条目的字符串长度
LB_SETTEXT 设置列表框条目的字符串
LB_GETTEXT 条目复制到文字缓冲区
LB_SETCURSEL 设置当前选定的索引项
LB_GETCURSEL 获得当前选定的索引项
LB_FINDSTRING 希望查找的字符串指针

如果你采用LBS_SORT 风格,或者仅仅希望将新的字符串追加为列表框的最后一项,那么填入列表框最简单的方法是借助LB_ADDSTRING消息:
SendMessage(hwndList, LB_ADDSTRING, 0, (LPARAM)string) 


我们也可以使用LB_INSERTSTRING指定一个索引值,将字符串插入到列表框中的指定位置:
SendMessage(hwndList, LB_INSERTSTRING,index,(LPARAM)string) 


我们可以使用LB_GETCURSEL获得当前选定的索引项:
index = SendMessage(hwndList, LB_GETCURSEL, 0, 0)

具有LBS_NOTIFY 风格的列表框可能产生的通知消息及其含义如下所示。

【这些消息可以在WindowProcedure函数中switch(message)中通过WM_COMMAND消息的case语句进行拦截,设置相应的响应函数】

ListBox可以产生的通知消息
LBN_ERRSPACE 内存分配失败
LBN_SELCHANGE 单项选择列表框的当前选择项发生变化
LBN_CLICKED 用户在列表框的某条目上单击了鼠标左键
LBN_DBLCLK 用户在列表框某条目上双击了鼠标左键
LBN_SELCANCEL 用户取消了某个条目的选择
LBN_SETFOCUS 列表框获得了输入焦点
LBN_KILLFOCUS 列表框失去了输入焦点
LBN_CLICKCHECKMARK 用户单击了条目的检查框
LBN_ENTER 用户在列表框中按下ENTER键

猜你喜欢

转载自blog.csdn.net/zzy1448331580/article/details/88606743
今日推荐