C语言中如何设置ListView控件的行高与状态图标

本文详细介绍了如何在C语言中使用ListView控件时,通过设置其风格为LVS_OWNERDRAWFIXED来实现自绘控件,并通过处理WM_DRAWITEM和WM_MEASUREITEM消息来调整行高。同时,文章指导了如何为每行设置状态图标,包括绑定IMAGELIST、设置状态值等关键步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

C语言中如何设置ListView控件的行高与状态图标

今天使用ListView控件,需要用到这2个知识点,百度一下也没有找到可用的方法。
还是自己看MSDN处理。

一、设置ListView的行高
要实现这样的功能,需要将ListView的风格设置为LVS_OWNERDRAWFIXED样式

The owner window can paint items in report view.
The list-view control sends a WM_DRAWITEM message to paint each item;
it does not send separate messages for each subitem.
The iItemData member of the DRAWITEMSTRUCT structure contains the item data
for the specified list-view item.

需要处理WM_DRAWITEM消息和WM_MEASUREITEM,自绘控件首先会发送WM_MEASUREITEM用于确认控件的行高和宽度等信息,
处理代码如下:

//调整LIST行高 //listview为自绘风格时使用 void Main_OnDrawItem(HWND hwnd, const DRAWITEMSTRUCT * lpDrawItem) { switch(lpDrawItem->CtlID) { case MAIN_LIST_TASK://ListView控件ID //MainOnDrawListView(hwnd,lpDrawItem);//自绘控件函数 break; default: break; } } //自绘控件, 确认行高,宽度等 void Main_OnMeasureItem(HWND hwnd, MEASUREITEMSTRUCT * lpMeasureItem) { switch(lpMeasureItem->CtlID) { case MAIN_LIST_TASK: lpMeasureItem->itemHeight = 24;//行高 break; default: break; } }


二、如何设置每一行的状态图标
1.首先绑定一个IMAGELIST到listView控件中,示例代码
HIMAGELIST hi; HBITMAP hBmp = LoadBitmap(g_hInst,MAKEINTRESOURCE(IDB_BITMAP1)); hi =ImageList_Create(18,18,ILC_COLOR24|ILC_MASK,1,1); //这个高度,如果不是自绘的ListView,将用于填充行高 ImageList_AddMasked(hi,hBmp,RGB(255,255,255)); ListView_SetImageList(hList,hi,LVSIL_STATE);


2.设置LVITEM中的状态值
LVITEM li; ZeroMemory(&li,sizeof(li)); li.mask = LVIF_PARAM |LVIF_TEXT|LVIF_STATE; li.stateMask = LVIS_STATEIMAGEMASK ; li.state = INDEXTOSTATEIMAGEMASK(1) ;//基于1的图标索引值 ListView_InsertItem(hList,0,&li); 或者使用ListView_SetItemState(hList,0,INDEXTOSTATEIMAGEMASK(2),LVIS_STATEIMAGEMASK);//改成第2个图标



写在这里用于备忘。by AsmFox

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值