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);
好了,功能实现了。
首先将一个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);
好了,功能实现了。
相关文章推荐
- Android实战简易教程<五十一>(ListView实现子控件的动态显示和隐藏、checkbox全选和反选)
- WinForm中使用XtraGrid控件,实现在界面中动态修改列显示,列名列宽等
- 如何实现桌面App图标可以动态显示消息数(类似手机上的QQ图标)?
- 位运算(&)实现分享弹窗上的图标动态显示/隐藏
- [置顶] CListCtrl控件列表项和列表头图标的显示
- 微信小程序 实现动态显示和隐藏某个控件
- 在分割的视图内实现CListCtrl控件 结合CImageList实现图片的自动排列显示
- pushbutton成为可点击的图标(实现全透明,不论点击与否都只显示Icon)(也就是一个万能控件)
- 如何实现桌面App图标可以动态显示消息数(类似手机上的QQ图标)?
- c#动态设置combobox控件下拉项宽度以实现下拉项文字可以完全显示。
- Android实战简易教程-第五十一枪(ListView实现子控件的动态显示和隐藏、checkbox全选和反选)
- 如何实现桌面App图标可以动态显示消息数(类似手机上的QQ图标)?
- 实现桌面应用图标的动态隐藏和显示,触发事件为SIM卡的状态
- 微信小程序 实现动态显示和隐藏某个控件
- Edit控件实现系统时间动态显示
- XtraGrid控件,实现在界面中动态修改列显示,列名列宽
- MFC中使用文本控件实现图标和位图的显示
- Android自定义控件View(实现控件的动画效果,自定义类画简略时钟,TextView中文字逐一显示,动态设置progress的圆环/扇形ProgressBar等)
- WinForm中使用XtraGrid控件,实现在界面中动态修改列显示,列名列宽等(进阶)
- Jquery实现动态效果的显示和隐藏控件