win32 sdk列表视图控件两个重要的结构体

列表视图控件是一种非常常用的控件,在需要以报表形式显示数据时,列表控件通常是最好的选择,许多专用的数据报表控件,也是在它的基础上派生而来。与树视图类似,列表控件可以由多个子项目组成,可以设置为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

时间: 2024-10-24 00:56:51

win32 sdk列表视图控件两个重要的结构体的相关文章

win32 sdk 列表视图控件绘制

[cpp] view plaincopy ////////////////////////////////////////////////////////////// LRESULT ListViewCustomDraw(HWND hwnd, LPARAM lParam) { LPNMHDR pnmh = (LPNMHDR) lParam; if (pnmh->code != NM_CUSTOMDRAW) return 0; LPNMLVCUSTOMDRAW lpNMCustomDraw = (

win32 sdk绘制ListBox控件

1>产生: [html] view plaincopy // HWND CreateLB(HWND parentWnd) { HWND hListBox=0; hListBox = CreateWindow("LISTBOX", NULL, WS_CHILD|WS_VSCROLL | WS_TABSTOP | LBS_STANDARD | LBS_OWNERDRAWFIXED | LBS_HASSTRINGS, 230, 20, 60, 80, parentWnd, (HMENU

列表视图控件

设计登陆窗口 首先创建一个图像列表,并通过SetImageList方法将列表视图控件和图像列表关联到一起. CImageList* SetImageList(CImageList* pImageList,int nImageList); pImageList:标识图像列表指针. nImageList:标识图像列表类型. LVSIL_NORMAL:图像列表具有大图标 LVSIL_SMALL:图像列表具有小图标 LVSIL_STATE:图像列表具有状态图标 然后调用InsertItem方法向列表视图

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

Qt qml中listview 列表视图控件(下拉刷新.上拉分页.滚动轴) 来源 https://www.cnblogs.com/surfsky/p/4352898.html 设置ListView涉及到将contentsY,即视图的可见部分的顶部,设置y为委托的值.另一个更改是interactive将视图设置为false.这样可以防止视图移动.用户不能再滚动列表或更改当前Item. contentY为列表上拉后列表左上角点距显示框左上解点的高度listView1.height为可显示部分的高度,

Windows Phone 8.1 新特性 - 控件之列表选择控件

本篇我们来介绍Windows Phone 8.1 新特性中的列表选择控件. 在Windows Phone 8 时代,大家都会使用 LongListSelector 来实现列表选择控件,对数据进行分组显示.比如通讯录中,按照名字首字母进行分组,点击分组标题后跳转到该标题对应的分组. 而Windows Phone 8.1 中会利用 ListView 和 SemanticZoom 来实现,下面我们来看看实现过程. 首先我们来认识一下ListView 和 SemanticZoom: ListView 从

iOS:UITableView表格视图控件

UITableView:表格视图控件,继承滚动视图控件UIScrollView,(类似于UIPickerView选择器,它主要通过设置数据源代理和行为代理实现协议来设置单元格) 对表格的操作主要有:创建表格.设置单元格(行数.内容.行高).编辑单元格(删除单元格.插入单元格).移动单元格.标记单元格.修改单元格等. 一.表格式图的属性和行为: 1.基本属性: @interface UITableView : UIScrollView <NSCoding> @property (nonatomi

Objective-C:UITableView表格视图控件

UITableView:表格视图控件,继承滚动视图控件UIScrollView,(类似于UIPickerView选择器,它主要通过设置数据源代理和行为代理实现协议来设置单元格) 对表格的操作主要有:创建表格.设置单元格(行数.内容.行高).编辑单元格(删除单元格.插入单元格).移动单元格.标记单元格.修改单元格等. 一.表格式图的属性和行为: 1.基本属性: @interface UITableView : UIScrollView <NSCoding> @property (nonatomi

[Xcode10 实际操作]三、视图控制器-(10)在Storyboard中使用图像视图控件

本文将演示常用的图像视图控件在故事板中的使用. 打开故事板文件[Main.storyboard]点击选择视图控制器的根视图. 点击库图标,打开控件库面板. 在控件库搜索框内,输入控件名称,在控件库中,快速定位目标控件. 然后在标签控件上双击,导入所需的控件. 在图像视图右侧的定界框上按下手指,并向右拖动,以调整标签视图的宽度. 将标签控件向下方拖动一段距离. 然后点击库图标,再次打开控件库面板. 在控件库搜索框内,输入控件名称,在控件库中,快速定位目标控件. 然后在按钮控件上双击,导入所需的控件

Android视图控件架构分析之View、ViewGroup

在Android中,视图控件大致被分为两类,即ViewGroup和View,ViewGroup控件作为父控件,包含并管理着子View,通过ViewGroup和View便形成了控件树,各个ViewGoup对象和View对象就是控件树中的节点.在控件树中,以树的深度来遍历查找对应的控件元素,同时,上层控件负责子控件的测量与绘制,并传递交互事件. Android控件树: AndroidUI界面架构图: 一.测量View的工具类:MeasureSpec 1.MeasureSpec包含了测量的模式和测量的