您的位置:首页 > 其它

CListCtrl控件图标显示和动态更换实现

2011-08-23 17:29 567 查看
由于要在OCX中使用CListCtrl控件,在MFC中的控件属性和方法都不能用,只能老老实实的用消息和宏来实现这个控件的各个功能,所以着实费了点手脚。、

首先将一个CListCtrl控件放入界面中,获得它的句柄以便以后操作这个控件:HWND m_hFileList = ::GetDlgItem(m_hWnd,IDC_LIST_FILELIST);

由于需要关联一个图像列表,但不知什么原因,在OCX中不支持CImageList类的使用,所以换了个方式来创建图像列表:

HIMAGELIST m_hImageList = ImageList_Create(16,16,ILC_COLOR16|ILC_MASK,3,10); // ImageList_Create是一个宏,用法等同于使用消息发送

再导入一个图片,采用外部文件导入的方式:

HBITMAP hBitmap = (HBITMAP)::LoadImage(NULL,_T("E:\\Wait.bmp"),IMAGE_BITMAP,0,0,LR_LOADFROMFILE) ;

ImageList_Add(m_hImageList,hBitmap,0) ;

设置CListCtrl控件的风格:ListView_SetExtendedListViewStyle(m_hFileList, LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES| LVS_EX_SUBITEMIMAGES );

关联图片列表:ListView_SetImageList(m_hFileList,m_hImageList,LVSIL_SMALL);

然后简单的创建几个列用于显示:

LVCOLUMN list;

list.mask = LVCF_TEXT |LVCF_WIDTH| LVCF_FMT |LVCF_SUBITEM;

list.fmt = LVCFMT_LEFT;

list.cx = 30;

list.pszText = TEXT(" # ");

list.iSubItem = 0;

//Inserts the column

::SendMessage(m_hFileList,LVM_INSERTCOLUMN, (WPARAM)list.iSubItem,(WPARAM)&list); // 发送消息添加列

list.cx = 180;

list.pszText = TEXT("文件名称");

list.iSubItem = 1;

::SendMessage(m_hFileList ,LVM_INSERTCOLUMN, (WPARAM)list.iSubItem,(WPARAM)&list);

list.cx = 48;

list.pszText = TEXT("类型");

list.iSubItem = 2;

::SendMessage(m_hFileList ,LVM_INSERTCOLUMN, (WPARAM)list.iSubItem,(WPARAM)&list);

list.cx = 62;

list.pszText = TEXT("大小(KB)");

list.iSubItem = 3;

::SendMessage(m_hFileList ,LVM_INSERTCOLUMN, (WPARAM)list.iSubItem,(WPARAM)&list);

list.cx = 62;

list.pszText = TEXT("时长(秒)");

list.iSubItem = 4;

::SendMessage(m_hFileList ,LVM_INSERTCOLUMN, (WPARAM)list.iSubItem,(WPARAM)&list);

添加一些简单的信息:

LVITEM lvItem ;

lvItem.mask = LVIF_TEXT | LVIF_IMAGE ;

lvItem.iItem = 0;

lvItem.iSubItem = 0;

lvItem.pszText = _T("序号") ;

lvItem.iImage = -1; // 初始状态下不显示图片

lvItem.lParam = (LPARAM)&fItem;

::SendMessage(m_hFileList , LVM_INSERTITEM,0,(LPARAM)&lvItem) ;

lvItem.iSubItem = 1;

lvItem.pszText = _T("名称") ;

lvItem.iImage = -1;

SendMessage(m_hFileList, LVM_SETITEM, 0, (LPARAM)&lvItem);

lvItem.iSubItem = 2;

lvItem.pszText = _T("类型") ;

lvItem.iImage = -1;

SendMessage(m_hFileList, LVM_SETITEM, 0, (LPARAM)&lvItem);

lvItem.iSubItem = 3;

lvItem.pszText = _T("时长") ; ;

lvItem.iImage = -1;

SendMessage(m_hFileList, LVM_SETITEM, 0, (LPARAM)&lvItem);

加一个按钮用于实现图标动态显示功能, 下面是功能实现函数:

LVITEM item ;

item.iItem =0;

item.iSubItem = 0;

item.mask = LVIF_TEXT | LVIF_IMAGE;

item.iImage =1 ;

item.pszText=_T("a");

SendMessage(m_hFileList, LVM_SETITEM, 0, (LPARAM)(const LVITEM FAR *) &item);

好了,功能实现了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐