现在的位置: 首页 > 综合 > 正文

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

2013年06月03日 ⁄ 综合 ⁄ 共 1464字 ⁄ 字号 评论关闭

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

 

抱歉!评论已关闭.