zoukankan      html  css  js  c++  java
  • 列表框

    列表框
      列表框允许用户从多个对象中选择一项或多项,这些对象可以是文本、文件和位图等。当列表框的项不能全部显示出来时,可以用滚动条来滚动显示。
    1. 基础知识
      默认的列表框只允许用户单选,需要多选时,须把列表框的风格定义为 LBS_ MULTIPLESEL 和 LBS_EXTENDEDSEL 。列表框提供的其他风格取值可以控制列表框的外观和操作。例如是否按照列表框各项的名称排序,是否多行排列,是否有滚动条等。
    风格取值    描述
    LBS_EXTENDEDSEL    能通过Shift键或者鼠标进行多选
    LBS_HASSTRINGS    可以用GetText函数得到列表框里选项的字符串
    LBS_MULTICOLUMN    指定列表框以多列形式显示内容
    LBS_MULTIPLESEL    用户可以选择多个项
    LBS_NOINTEGRALHEIGHT    当应用程序创建列表框时,列表框的大小由系统指定
    LBS_NOREDRAW    列表框不响应用户的修改,可以通过发送WM_REDRAW 来取消该设置
    LBS_NOTIFY    让主窗口接收列表框的任何改变的消息
    LBS_OWNERDRAWFIXED    主窗口负责列表框的重画,列表框里每项的高度相同
    LBS_0WNERDRAWVARIABLE    主窗口负责列表框的重画,列表框里每项的高度可以变化
    LBS_SORT    按各项名称的字母排序
    LBS_STANDARD    等同于LBS_SORT和LBS_NOTIFY
    LBS_USETABSTOPS    允许用户使用Tab键在各项中切换
    LBS_WANTKEYBOARDINPUT    输入焦点在列表框时,任何键盘输入都会向父窗口发送WM_VKEYTOITEM或者WM_CHARTOITEM消息
    LBS_DISABLENOSCROLI    当列表框的项不够时,垂直滚动条禁活:没有该属性时,滚动条隐藏
      当用户对列表框进行了操作时,就会向主窗口发送一条消息。列表框的消息类型比较简单,主要是单击、双击和选择等。同编辑框一样,列表框也会遇到内存不够的问题,所以消息类型中含有这一项。消息总是通过WM_COMMAND的形式发送给主窗口的。其中,wParam的低位字节表示列表框的标识符,高位字节表示消息的类型,lParam表示主窗口句柄。列表框的消息类型如表所示。
    消息类型    描述
    LB_DELETESTRING    删除指定的选项
    LB_ADDFILE    向列表框里增加一个文件(包括目录)
    LB_FINDSTRING    在列表框里查找指定的项
    LB_FINDSTRlNGEXACT    精确查找指定的项
    LB_GETCOUNT    得到列表框里项的数目
    LB_GETCURSEL    返回当前被选中选项的序号
    LB_GETSEL    得到被选项的状态,如果出错,则返回零值
    LB_GETSELCOUNT    得到被选中的个数
    LB_GETTEXT    返回选中的文本,返回值为字符串长度
    LB_GETTEXTLEN    返回字符串长度
    LB_INITSTORAGE    向列表框增加项之前存储原来的内容
    LB_INSERTSTRING    向列表框增加一项,但不重新排序
    LB_ITEMFROMPOINT    返回离指定点最近项的序号
    LB_RESETCONTENT    清除列表框里所有的项
    LB_SELECTSTRING    寻找指定的项
    LB_SELITEMRANGE    指定选择的范围
    LB_SELITEMRANGEEX    选定或者删除指定的项
    LB_SETCOLUMNWIDTH    设置列的宽度
    LB_SETCOUNT    设置列表框里项的最大数目
    LB_SETCURSEL    选中指定的项
    LBN_DBLCLK    发送用户双击的消息
    LBN_ERRSPACE    发送内存空间不够的消息
    LBN_KILLFOCUS    当列表框失去焦点时发送该消息
    LBN_SELCANCEL    当用户取消选择时发送该消息
    LBN_SELCHANGE    当用户选择改变时发送该消息
    LBN_SETFOCUS    当输入焦点转移到列表框时发送该消息
    WM_CTLCOLORLISTBOX    在列表框重画时向父窗口发送该消息
    WM_DELETEITEM    删除选项
    WM_VKEYTOITEM    输入焦点在列表框里,用户按键时发送该消息
    鼠标右键WM_CONTEXTMENU 消息就行了。wParam 是点击右键的窗口的句柄,lParam 是鼠标坐标。如果用户使用 SHIFT+F10 来响应菜单,那么 lParam 收到的坐标都是 -1。
    
    LOWORD(wParam) 子窗口ID
    HIWORD(wParam) 通知码
    Lparam 子窗口句柄
    
    定义列
    [1] 增加列需要用列的结构LVCOLUMN,定义如下:
    typedef struct _LVCOLUMN {
    UINT mask; //定义该列可使用的类型
    int fmt; //定义列格式
    int cx; //定义列宽度(以像素为单位)
    LPTSTR pszText; //列内容
    int cchTextMax; //列内容最大长度
    int iSubItem; //定义此列序号
    #if (_WIN32_IE >= 0x0300)
    int iImage; //指向图像
    int iOrder; //零基列偏移量。列偏移量是从左到右的顺序。例如0列在最左边。
    #endif #if (_WIN32_WINNT >= 0x0600)
    int cxMin; //指定列宽最小值
    int cxDefault; //默认列宽
    int cxIdeal; //只读,作为列宽的理想宽度自动调整宽度大小
    #endif
    } LVCOLUMN, *LPLVCOLUMN; //结构名称
    使用方法为SendMessage(hwnd, LVM_INSERTCOLUMN, 0, (LPARAM)&colmn)
    还有LVM_GETCOLUMN LVM_SETCOLUMN LVM_DELETECOLUMN
    改变项
    [2] 改变项需要结构体LVITEM,定义如下:
    typedef struct {
    UINT mask; //设置成员标志,如格式等
    int iItem; //项目索引
    int iSubItem; //添加到的列序
    UINT state; //指明项目状态,如图片,叠加图片
    UINT stateMask; //指state成员的有效位
    LPTSTR pszText; //项目内容
    int cchTextMax; //项目最大长度
    int iImage; //指向图片索引
    LPARAM lParam; //特殊值,如果你用SORTITEM它就需要这个,或者别的特别的
    #if (_WIN32_IE >= 0x0300)
    int iIndent; //图片宽度
    #endif
    #if (_WIN32_WINNT >= 0x0501)
    int iGroupId; //指向所在的组id
    UINT cColumns; //需要展示的列数,最大为20
    UINT puColumns; //返回这个项目所指向的列
    #endif
    #if (_WIN32_WINNT >= 0x0600)
    int piColFmt; //返回列属性
    int iGroup; //项目列
    #endif
    } LVITEM, *LPLVITEM;
    使用方法:SendMessage(hres, LVM_INSERTITEM, 0, (LPARAM)&item);
  • 相关阅读:
    js炫酷效果
    程序员的执着
    [心得]docker学习笔记
    [心得笔记]多线程之间的内存可见性问题
    Docker入门
    [心得体会]jvm
    redis学习总结
    [心得]redis集群环境搭建的错误
    Linux安装mysql5.7版本
    Cent OS下安装JDK11
  • 原文地址:https://www.cnblogs.com/IMyLife/p/4826053.html
Copyright © 2011-2022 走看看