由于要在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);
好了,功能实现了。