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

    由于要在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);

  好了,功能实现了。

  

猜你喜欢

转载自blog.csdn.net/zh516846937/article/details/6712459
今日推荐