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用于确认控件的行高和宽度等信息,
处理代码如下:
二、如何设置每一行的状态图标
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