列表视图控件是一种非常常用的控件,在需要以报表形式显示数据时,列表控件通常是最好的选择,许多专用的数据报表控件,也是在它的基础上派生而来。与树视图类似,列表控件可以由多个子项目组成,可以设置为Icon(大图标)、SmallIcon(小图标)、List(列表)或Report(报表)。

一、列表视图控件有两个重要的数据结构LVCOLUMN和LVITEM。LVCOLUMN用于定义报表方式下的“列”的结构;LVITEM用于定义“项”的结构。这两个结构的定义及说明如下:

typedef struct _LVCOLUMN {

UINT mask;            说明此结构中哪些成员是有效的

int fmt;                  列的对齐方式

int cx;                    列的初始宽度

LPTSTR pszText;     列的标题

int cchTextMax;      pszText所指向的缓冲区的大小

int iSubItem;         与列关联的子项的索引值,从0开始

int iImage;            与列关联的图像列表中指定图像的索引值

int iOrder;             第几列,0代表最左一列

} LVCOLUMN, FAR LPLVCOLUMN;

-----------------------------------

typedef struct _LVITEM {

UINT   mask;          说明LVITEM结构中哪些成员有效

int    iItem;             项目的索引值(可以视为行号)从0开始

int    iSubItem;      子项的索引值(可以视为列号)从0开始

UINT   state;          子项的状态

UINT   stateMask;   状态有效的屏蔽位

LPTSTR pszText;    主项或子项的名称

int    cchTextMax;  pszText所指向的缓冲区大小

int    iImage;         关联图像列表中指定图像的索引值

LPARAM lParam;    程序定义的32位参数

int iIndent;            表示图像位置缩进的单位

} LVITEM, FAR LPLVITEM;

---------------------------------------

二、相关操作。因为是SDK编程,所以对控件的操作是向控件发送SendMessage()来实现的

LISTVIEW中的相关消息为:

1、LVM_SETTEXTCOLOR 和 LVM_SETTEXTBKCOLOR和 LVM_SETBKCOLOR   //消息设定文本的前景和背景色,wParam 为0,lParam 为颜色的RGB值

2、 LVM_GETNEXTITEM  //找到选中的行,对应ListView_GetNextItem宏将SendMessage打包为函数方式操作。

3、LVM_SETCOLUMNWIDTH  //设置列宽,对应ListView_SetColumnWidth

4、LVM_SETEXTENDEDLISTVIEWSTYLE  //设置扩展风格如:LVS_EX_FULLROWSELECT(选中一整行), LVS_EX_GRIDLINES(网络线),LVS_EX_CHECKBOXES(选择按钮),对应ListView_SetExtendedListViewStyle

5、LVM_INSERTCOLUMN  //插入新列,对应ListView_InsertColumn,wParam 为整型,指定列号,lParam 为指向LV_COLUMN结构的指针

6、LVM_SETCOLUMN  //设置列,参数同上

7、LVM_INSERTITEM  //插入项目(行),对应ListView_InsertItem,加入项目或子项目,wParam 为0,lParam 为指向LV_ITEM结构的指针

8、LVM_SETITEM  //设置子项(行中的每列),对应ListView_SetItem,设置项目或子项目,参数同上

9、LVM_GETITEM  //取得项目或子项目,参数同上

10、LVM_GETITEMCOUNT  //获取项数,对应ListView_GetItemCount

11、LVM_GETNEXTITEM  取得下一个项目或子项目,可以用来取得光标选择的项目

12、LVM_DELETEITEM  //删除项,对应ListView_DeleteItem,删除项目或子项目,wParam 为整型,指定项目索引号,lParam 为0

13、LVM_DELETEALLITEMS  //删除所有项目,wParam 和 lParam 均为0

三、ListCtrl控件的扩展样式

LVS_EX_GRIDLINES //绘制表格线

LVS_EX_SUBITEMIMAGES//子项目图标列表

LVS_EX_CHECKBOXES //带复选框

LVS_EX_TRACKSELECT //自动换行

LVS_EX_HEADERDRAGDROP//报表头可以拖拽

LVS_EX_FULLROWSELECT //选择整行

LVS_EX_ONECLICKACTIVATE//单击激活

LVS_EX_TWOCLICKACTIVATE//双击激活

LVS_EX_FLATSB//扁平滚动条

LVS_EX_REGIONAL

LVS_EX_INFOTIP

LVS_EX_UNDERLINEHOT

LVS_EX_UNDERLINECOLD

LVS_EX_MULTIWORKAREAS//多工作区

四、ListView控件属于通用控件CONTROL中的一种,在SDK编程方式时要使用通用控件

必须包含comctl32.dll,所以代码中要有头文件: commctrl.h    导入库:comctl32.lib

在使用通用控件之前应该先调用InitCommonControls();初始化它

以ListView控件为例:

InitCommonControls();

//子窗口形式使用LISTVIEW

CreateWindowEx(0,  //扩展风格  WC_LISTVIEW, //这是系统定义的宏,WC_LISTVIEW对应 "SysListView32" "123", //窗口标题  WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CLIPCHILDREN   | LVS_REPORT | LVS_AUTOARRANGE | LVS_SHOWSELALWAYS | LVS_SHAREIMAGELISTS | LVS_SINGLESEL , //窗口风格 (普通控件风格在这里设置,扩展风格要单独设置)  0,   0, //窗口大小   420, //宽度一定要等于所有列宽的和,否则会看起来有空列 600, hwnd, //父窗口句柄  NULL, //菜单句柄 hInstance, //实例句柄 NULL //创建参数 );

//也可以在对话框资源文件中以子控件的方式使用

CONTROL         "",IDC_LISTVIEW, "SysListView32", WS_BORDER | WS_TABSTOP | LVS_REPORT | LVS_AUTOARRANGE | LVS_SHOWSELALWAYS | LVS_SHAREIMAGELISTS | LVS_SINGLESEL, 7,110,300,133

五、部分操作代码。

void in_it(HWND hwnd,int iSubItem,int cx,char *text,int cchTextMax,int len)//插入列函数
{
 LVCOLUMN ColInfo1 = {0};//LVCOLUMN 定义一个结构变量ColInfo1)
 ColInfo1.mask = LVCF_TEXT | LVCF_WIDTH | LVCF_FMT;
 ColInfo1.iSubItem = iSubItem;
 ColInfo1.fmt = LVCFMT_CENTER;
 ColInfo1.cx = cx;
 ColInfo1.pszText=(LPWSTR)text;
 ColInfo1.cchTextMax = cchTextMax;
 SendMessage(hwnd, LVM_INSERTCOLUMN, WPARAM(len), LPARAM(&ColInfo1));
};

void set_data(HWND hwnd,char *text,int x,int y)

{

LVITEM item;

item.mask=LVIF_TEXT;

item.pszText=text;

item.iItem=x;

item.iSubItem=y;

if(y==0)

SendMessage(hwnd, LVM_INSERTITEM, 0, LPARAM(&item));

else

SendMessage(hwnd, LVM_SETITEM, 0, LPARAM(&item));

}

BOOL Main_OnInitDialog(HWND hwnd, HWND hwndFocus, LPARAM lParam)

{

HWND hWndlist= GetDlgItem(hwnd, IDC_LIST1);

SendMessage(hWndlist, LVM_SETEXTENDEDLISTVIEWSTYLE, 0,   LVS_EX_FULLROWSELECT | LVS_EX_HEADERDRAGDROP | LVS_EX_GRIDLINES);

in_it(hWndlist,0,115,"商品名称",50,0);

in_it(hWndlist,0,115,"编号",50,1);

in_it(hWndlist,0,115,"价格",50,2);

set_data(hWndlist,"电冰箱",0,0);

set_data(hWndlist,"电视机",1,0);

set_data(hWndlist,"笔记本",2,0);

set_data(hWndlist,"吸尘器",3,0);

set_data(hWndlist,"1234",0,1);

set_data(hWndlist,"3000",0,2);

set_data(hWndlist,"2345",1,1);

set_data(hWndlist,"5000",1,2);

set_data(hWndlist,"3456",2,1);

set_data(hWndlist,"4000",2,2);

set_data(hWndlist,"4567",3,1);

set_data(hWndlist,"3500",3,2);

return TRUE;
      }

win32 sdk列表视图控件(ListCtrl或ListView)资料整理的更多相关文章

  1. win32 sdk 列表视图控件绘制

    ////////////////////////////////////////////////////////////// LRESULT ListViewCustomDraw(HWND hwnd, ...

  2. VS2010/MFC编程入门之二十九(常用控件:列表视图控件List Control 下)

    上一节是关于列表视图控件List Control的上半部分,简单介绍了列表视图控件,其通知消息的处理和有关结构体的定义.本节继续讲解下半部分,包括列表视图控件的创建.CListCtrl类的主要成员函数 ...

  3. VS2010/MFC编程入门之二十八(常用控件:列表视图控件List Control 上)

    前面一节中,鸡啄米讲了图片控件Picture Control,本节为大家详解列表视图控件List Control的使用.      列表视图控件简介 列表视图控件List Control同样比较常见, ...

  4. MFC编程入门之二十八(常用控件:列表视图控件List Control上)

    前面一节中,讲了图片控件Picture Control,本节为大家详解列表视图控件List Control的使用. 列表视图控件简介 列表视图控件List Control同样比较常见,它能够把任何字符 ...

  5. MFC常用控件之列表视图控件(List Control)

    近期学习了鸡啄米大神的博客,对其中的一些知识点做了一些自己的总结.不过,博客内容大部分来自鸡啄米.因此,这个博客算是转载博客,只是加了一些我自己的理解而已.若想学习鸡啄米大神的博客总结,请点击连接:h ...

  6. (七)对话框,单选框(radiobox),复选框(checkbox),列表框(ListBox),组合框(CComboBox),水平滚动条(Horizontal scroll bar),微调(旋转)spincontrol,列表视图控件CListCtrl,静态控件static

    1,模态对话框和非模态对话框 // 模态对话框 void CMainFrame::OnDialogExec() { // TODO: 在此添加命令处理程序代码 // 创建对话框对象 CDialog d ...

  7. VS2010-MFC(常用控件:列表视图控件List Control 下)

    转自:http://www.jizhuomi.com/software/197.html 上一节是关于列表视图控件List Control的上半部分,简单介绍了列表视图控件,其通知消息的处理和有关结构 ...

  8. VS2010-MFC(常用控件:列表视图控件List Control 上)

    转自:http://www.jizhuomi.com/software/195.html      列表视图控件简介 列表视图控件List Control同样比较常见,它能够把任何字符串内容以列表的方 ...

  9. Qt qml listview 列表视图控件(下拉刷新、上拉分页、滚动轴)

    Qt qml listview下拉刷新和上拉分页主要根据contentY来判断.但要加上顶部下拉指示器.滚动条,并封装成可简单调用的组件,着实花了我不少精力:) [先看效果]    [功能] 下拉刷新 ...

随机推荐

  1. DFS(2)——hdu1241Oil Deposits

    一.题目回顾 题目链接:Oil Deposits 题意:给你一块网格,网格被分为面积相等的地块,这些地块中标记'@'的是油田,标记'*'的不是油田.已知一块油田与它上下左右以及对角线的油田同属一片油区 ...

  2. shell 中的expect 用法

    expect一般用于实现用脚本来自动远程登录,对远程机器执行相关操作 测试机上的expect目录一般在/usr/bin/expect路径 下面是从网上查询的用法总结: 1. expect中的判断语句: ...

  3. multi-tap

    multi-tap又称 multi-press . 是在手机,或者电视遥控上的keypad定义,有如下2类标准: 1. ITU-T E.161 2.T9 使用举例如下: Consider a typi ...

  4. MAC下Python3.5安装问题

    mac中自动集成了python2.7,但是作为程序员总是希望用最新的版本, 刚才安装python3.5后,python -V,依然提示是,2.7: 然后在 .bash_profile后面找到pytho ...

  5. sqlite sql语句关键字GROUP BY的理解

    第一遍看GROUP BY的介绍时,没看懂. SQLite 的 GROUP BY 子句用于与 SELECT 语句一起使用,来对相同的数据进行分组.在 SELECT 语句中,GROUP BY 子句放在 W ...

  6. 基于C#的PISDK研究(理论)

    本篇文章主要对PISDK体系结构以及重点类进行阐述. 当我们决定使用PISDK时,可能会使用到下面的类库: 在上表中,PISDK.dll为核心类,大部分主要功能都在该类中.PISDKCommon.dl ...

  7. delphi RGB与TColor的转换

    1.RGB转换为Tcolor function RGBToColor(R,G,B: byte): Tcolor;begin  Result := B Shl 16 or G  shl 8 or R;e ...

  8. Nginx学习笔记之加强篇

    在上一篇文章Nginx学习笔记之应用篇中,我们已经可以正式运行自己的网站了.但是在使用Nginx服务器时还需要注意几个问题: 1.Nginx服务器上配置的单个站点的并发量不超过1024 2.Nginx ...

  9. 批处理之SET命令

    除了 下面分别介绍: 表示第二个字符到倒数第三个字符的值

  10. hdu 1133 Buy the Ticket (大数+递推)

    Buy the Ticket Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)To ...