列表框控件(listbox)消息&&Listctrl 样式和LV_ITEM和LV_COLUMN

列表框主要用于输入,它允许用户从所列出的表项中进行单项或多项选择,被选择的项呈高亮度显示.列表框具有边框,并且一般带有一个垂直滚动条.列表框分单选列表框和多重选择列表框两种.单选列表框一次只能选择一个列表项,而多重选择列表框可以进行多重选择.对于列表项的选择,
  应用程序用CreateWindowEx创建列表框控件时,可根据控件的用途在下表中选择部份常数来设定其风格属性(style)。 

常数说明
LBS_DISABLENOSCROLL固定显示垂直滚动条。未指定本项时,当列表未超出窗口,垂直滚动条自动隐藏。
LBS_EXTENDEDSEL使用键盘“SHIFT”键或另指定键加鼠标进行多选。
LBS_HASSTRINGS含有字符串的自绘式列表框.应用程序在自绘式列表框进行自绘时可以用LB_GETTEXT消息来取得列表项的文本。
LBS_MULTICOLUMN多列列表框,带有水平滚动条。应用程序可以用 LB_SETCOLUMNWIDTH 消息来为列表框指定列数。
LBS_MULTIPLESEL支持多重选择。列表项的选择状态随着用户对该项单击或双击鼠标而翻转。
LBS_NODATA本项已不被支持。
LBS_NOINTEGRALHEIGHT列表框的尺寸由应用程序而不是Windows指定.通常,Windows指定尺寸会使列表项的某些部分隐藏起来。
LBS_NOREDRAW禁止刷新。当选择发生变化时防止列表框被更新,可发送WM_SETREDRAW来改变该风格。
LBS_NOSEL禁止选择,列表项只能看,不能被选择。
LBS_NOTIFY当用户单击或双击鼠标时通知父窗口。
LBS_OWNERDRAWFIXED指定自绘式列表框,即由父窗口负责绘制列表框的内容,并且列表项有相同的高度。在控件被创建时父窗口将收到WM_MEASUREITEM 消息,当需要重绘时父窗口将收到 WM_DRAWITEM 消息。
LBS_OWNERDRAWVARIABLE指定自绘式列表框,并且列表项有不同的高度.在控件被创建时父窗口将收到WM_MEASUREITEM消息,当需要重绘时父窗口将收到 WM_DRAWITEM 消息。
LBS_SORT使插入列表框中的项按字母升序排列.
LBS_STANDARD使用默认风格,相当于指定了边框,垂直滚动条,字母升序排列和鼠标单双击通知消息这几项风格
LBS_USETABSTOPS使列表框在显示列表项时识别并扩展制表符(08h),缺省的制表宽度是32个对话框单位。
LBS_WANTKEYBOARDINPUT响应键盘输入。当控件拥有键盘输入焦点时,允许接收父窗口接收WM_VKEYTOITEM和WM_CHARTOITEM消息,输入字符。

  应用程序可以通过调用SendMessage向控件发送如下消息来设定和查询控件各种参数。
uMsgwParamlParam说明
LB_ADDFILE0文件名地址增加文件名。
LB_ADDSTRING0字符串地址追加一个列表项。如果指定了LBS_SORT风格,表项将被重排序,否则将被追加在列表框的最后一项。
LB_DELETESTRING列表项序号0删除指定的列表项,
LB_DIRDDL_ARCHIVE指向通配符地址在列表框中列出文件名,必须是当前路径内,符合指定通配符,存档属性的文件名。
DDL_DIRECTORY在列表框中列出当前路径的子文件夹。子文件夹名前后将加上一对方括号"[*]"
DDL_DRIVES在列表框中列出本机的所有驱动器名。驱动器名前后将加上一对方括号和减号"[-*-]"
DDL_EXCLUSIVE只列出指定属性的文件名,默认情况下是所有可读写文件都列出。如果没有指定任何文件属性,则不列出文件名。
DDL_HIDDEN列出隐藏属性的文件名。
DDL_READONLY列出只读属性的文件名。
DDL_READWRITE列出读写属性的文件名。
DDL_SYSTEM列出系统属性的文件名。
LB_FINDSTRING开始表项序号字符串地址查找匹配字符串,忽略大小写,从指定开始表项序号开始查找,当查到某表项的文本字符串的前面包括指定的字符串则结束,找不到则转到列表框第一项继续查找,直到查完所有表项,如果wParam为-1则从列表框第一项开始查找,如果找到则返回表项序号,否则返回LB_ERR。如:表项字符串为"abc123"和指定字串"ABC"就算匹配。
LB_FINDSTRINGEXACT开始表项序号字符串地址查找字符串,忽略大小写,与LB_FINDSTRING不同,本操作必须整个字符串相同。如果找到则返回表项序号,否则返回LB_ERR。
LB_GETANCHORINDEX00返回鼠标最后选中的项的索引
LB_GETCARETINDEX00返回具有矩形焦点的项的索引
LB_GETCOUNT00返回列表项的总项数,若出错则返回LB_ERR.
LB_GETCURSEL00本操作仅适用于单选择列表框,用来返回当前被选择项的索引,如果没有列表项被选择或有错误发生,则返回LB_ERR.
LB_GETHORIZONTALEXTENT00返回列表框的可滚动的宽度(象素)
LB_GETITEMDATA索引0每个列表项都有一个32位的附加数据.该函数返回指定列表项的附加数据。若出错则函数返回LB_ERR.
LB_GETITEMHEIGHT索引0返回列表框中某一项的高度(单位:象素)
LB_GETITEMRECT索引RECT结构地址获得列表项的客户区的RECT
LB_GETLOCALE00取列表项当前用于排序的语言代码,当用户使用LB_ADDSTRING向组合框中的列表框中添加记录并使用LBS_SORT风格进行重新排序时,必须使用该语言代码。返回值中高16位为国家代码。
LB_GETSEL索引0返回指定列表项的状态。如果查询的列表项被选择了,函数返回一个正值,否则返回0,若出错则返回LB_ERR。
LB_GETSELCOUNT00本操作仅用于多重选择列表框,它返回选择项的数目,若出错函数返回LB_ERR.
LB_GETSELITEMS数组的大小缓冲区本操作仅用于多重选择列表框,用来获得选中的项的数目及位置。参数lParam指向一个整型数数组缓冲区,用来存放选中的列表项的索引。wParam说明了数组缓冲区的大小。本操作返回放在缓冲区中的选择项的实际数目,若出错函数返回LB_ERR.
LB_GETTEXT索引缓冲区用于获取指定列表项的字符串。参数lParam指向一个接收字符串的缓冲区.wParam则指定了接收字符串的列表项索引。返回获得的字符串的长度,若出错,则返回LB_ERR。
LB_GETTEXTLEN索引0返回指定列表项的字符串的字节长度。wParam指定了列表项的索引.若出错则返回LB_ERR。
LB_GETTOPINDEX00返回列表框中第一个可见项的索引,若出错则返回LB_ERR.
LB_INITSTORAGE表项数内存字节数本操作只适用于Windows95版本,当你将要向列表框中加入很多表项或有很大的表项时,本操作将预先分配一块内存,以免在今后的操作中一次一次地分配内存,从而加快程序运行速度。
LB_INSERTSTRING索引字符串地址在列表框中的指定位置插入字符串。wParam指定了列表项的索引,如果为-1,则字符串将被添加到列表的末尾。lParam指向要插入的字符串。本操作返回实际的插入位置,若发生错误,会返回LB_ERR或LB_ERRSPACE。与LB_ADDSTRING不同,本操作不会导致LBS_SORT风格的列表框重新排序。建议不要在具有LBS_SORT风格的列表框中使用本操作,以免破坏列表项的次序。
LB_ITEMFROMPOINT0位置获得与指定点最近的项的索引,lParam指定在列表框客户区,低16位为X坐标,高16位为Y坐标。
LB_RESETCONTENT00清除所有列表项。
LB_SELECTSTRING开始表项序号字符串地址本操作仅适用于单选择列表框,设定与指定字符串相匹配的列表项为选中项。本操作会滚动列表框以使选择项可见。参数的意义及搜索的方法与LB_FINDSTRING类似。如果找到了匹配的项,返回该项的索引,如果没有匹配的项,返回LB_ERR并且当前的选中项不被改变。
LB_SELITEMRANGETRUE或FALSE范围本操作仅用于多重选择列表框,用来使指定范围内的列表项选中或落选.参数lParam指定了列表项索引的范围,低16位为开始项高16位为结束项。如果参数wParam为TRUE,那么就选择这些列表项,否则就使它们落选。若出错函数返回LB_ERR。
LB_SELITEMRANGEEX起点终点本操作仅用于多重选择列表框,若指定终点大于起点则设定该范围为选中,若指定起点大于终点则设定该范围为落选。
LB_SETANCHORINDEX索引0设置鼠标最后选中的表项成指定表项
LB_SETCARETINDEX索引TRUE或FALSE设置键盘输入焦点到指定表项,若lParam为TRUE则滚动到指定项部份可见,若lParam为FALSE则滚动到指定项全部可见。
LB_SETCOLUMNWIDTH宽度(点)0设置列的宽度。
LB_SETCOUNT项数0设置表项数目
LB_SETCURSEL索引0本操作仅适用于单选择列表框,设置指定的列表项为当前选择项。本操作会滚动列表框以使选择项可见。参数wParam指定了列表项的索引,若为-1,那么将清除列表框中的选择。若出错函数返回LB_ERR。
LB_SETHORIZONTALEXTENT宽度(点)0设置列表框的滚动宽度。
LB_SETITEMDATA索引数据值更新指定列表项的32位附加数据。
LB_SETITEMHEIGHT索引高度(点)指定列表项显示高度,带有LBS_OWNERDRAWVARIABLE(自绘列表项)风格的控件,只设置由wParam指定项的高度,其它风格将更新所有的列表项的高度。
LB_SETLOCALE语言代码0取列表项当前用于排序的语言代码,当用户使用LB_ADDSTRING向组合框中的列表框中添加记录并使用LBS_SORT风格进行重新排序时,必须使用该语言代码。返回值中高16位为国家代码。
LB_SETSELTRUE或FALSE索引本操作仅适用于多重选择列表框,它使指定的列表项选中或落选。参数lParam指定了列表项的索引,若为-1,则相当于指定了所有的项。参数wParam为TRUE时选中列表项,否则使之落选。若出错则返回LB_ERR。
LB_SETTABSTOPS站数索引顺序表设置列表框的光标(输入焦点)站数及索引顺序表。
LB_SETTOPINDEX索引0用来将指定的列表项设置为列表框的第一个可见项,该函数会将列表框滚动到合适的位置。wParam指定了列表项的索引.若操作成功,返回0值,否则返回LB_ERR。

  当用户在列表框上进行各种操作时,其父窗口将收到WM_COMMAND通知消息,同时wParam的低16位带控件的ID。lParam带控件句柄(hWnd),wParam的高16位带有如下表的消息代码。
消息代码说明
LBN_DBLCLK用户单击了列表项。
LBN_ERRSPACE列表框无法申请到足够的内存空间。
LBN_KILLFOCUS列表框失去输入焦点。
LBN_SELCANCEL取消选择列表项。
LBN_SELCHANGE列表框的选择项即将被改变。
LBN_SETFOCUS列表框得到键盘输入焦点。

 

Listctrl 样式和LV_ITEM和LV_COLUMN

LVS_ALIGNLEFT 用来确定表项的大小图标以左对齐方式显示; 

  LVS_ALIGNTOP 用来确定表项的大小图标以顶对齐方式显示; 

  LVS_AUTOARRANGE 用来确定表项的大小图标以自动排列方式显示; 

  LVS_EDITLABELS 设置表项文本可以编辑,父窗口必须设有LVN_ENDLABELEDIT风格; 

  LVS_ICON 用来确定大图标的显示方式; 

  LVS_LIST 用来确定列表方式显示; 

  LVS_NOCOLUMNHEADER 用来确定在详细资料方式时不显示列表头; 

  LVS_NOLABELWRAP 用来确定以单行方式显示图标的文本项; 

  LVS_NOSCROLL 用来屏蔽滚动条; 

  LVS_NOSORTHEADER 用来确定列表头不能用作按钮功能; 

  LVS_OWNERDRAWFIXED 在详细列表方式时允许自绘窗口; 

  LVS_REPORT 用来确定以详细资料即报告方式显示; 

  LVS_SHAREIMAGELISTS用来确定共享图像列表方式; 

  LVS_SHOWSELALWAYS 用来确定一直显示被选中表项方式; 

  LVS_SINGLESEL 用来确定在某一时刻只能有一项被选中; 

  LVS_SMALLICON 用来确定小图标显示方式; 

  LVS_SORTASCENDING 用来确定表项排序时是基于表项文本的升序方式; 

  LVS_SORTDESCENDING 用来确定表项排序时是基于表项文本的降序方式; 

 

 

typedef struct _LV_ITEM { 

UINT mask; //结构成员屏蔽位 

int iItem; //表项索引号 

int iSubItem; //子表项索引号 

UINT state; //表项状态 

UINT stateMask; //状态有效性屏蔽位 

LPTSTR pszText; //表项名文本 

int cchTextMax; //表项名最大长度 

int iImage; // 表项图标的索引号 

LPARAM lParam; // 与表项相关的32位数 

} LV_ITEM; 

typedef struct _LV_COLUMN { 

UINT mask; //结构成员有效性屏蔽位 

int fmt; //表列对齐方式 

int cx; //表列的象素宽度 

LPTSTR pszText; //表列的表头名 

int cchTextMax; //表列名的文本长度 

int iSubItem; //与表列关联的子表项索引号 

} LV_COLUMN; 


  其中fmt可以取如下值: 

   LVCFMT_CENTER 表列居中对齐 

   LVCFMT_LEFT 表列左对齐 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值