`

创建CListCtrl中的排序小图标

    博客分类:
  • MFC
阅读更多

创建CListCtrl中的排序小图标

for(int i = 0; i < GetHeaderCtrl()->GetItemCount(); ++i)
  {
   HDITEM hditem = {0};
   hditem.mask = HDI_BITMAP | HDI_FORMAT;
   VERIFY( GetHeaderCtrl()->GetItem( i, &hditem ) );
   if (hditem.fmt & HDF_BITMAP && hditem.fmt & HDF_BITMAP_ON_RIGHT)
   {
    if (hditem.hbm)
    {
     VERIFY( DeleteObject(hditem.hbm) );
     hditem.hbm = NULL;
    }
    hditem.fmt &= ~(HDF_BITMAP|HDF_BITMAP_ON_RIGHT);
    VERIFY( CListCtrl::GetHeaderCtrl()->SetItem( i, &hditem ) );
   }
   if (i == nCol)
   {
    hditem.fmt |= HDF_BITMAP|HDF_BITMAP_ON_RIGHT;
    //UINT bitmapID = m_Ascending ? IDB_DOWNARROW : IDB_UPARROW;
    //hditem.hbm = (HBITMAP)LoadImage(GetModuleHandle(NULL), MAKEINTRESOURCE(bitmapID), IMAGE_BITMAP, 0,0, LR_LOADMAP3DCOLORS);
    hditem.hbm = CreateSortBitmap(bAscending);
    VERIFY( hditem.hbm!=NULL );
    VERIFY( CListCtrl::GetHeaderCtrl()->SetItem( i, &hditem ) );
   }


HBITMAP CreateSortBitmap(bool bAscending)
 {
  // Aquire the Display DC
  CDC* pDC = CDC::FromHandle(::GetDC(::GetDesktopWindow()));
  //create a memory dc
  CDC memDC;
  memDC.CreateCompatibleDC(pDC);

  //Create a memory bitmap
  CBitmap newbmp;
  CRect iconRect(0, 0, 16, 16);
  newbmp.CreateCompatibleBitmap(pDC, iconRect.Height(), iconRect.Width());

  //create a black brush
  CBrush brush;
  brush.CreateSolidBrush(RGB(0, 0, 0));

  //select the bitmap in the memory dc
  CBitmap *pOldBitmap = memDC.SelectObject(&newbmp);

  //make the bitmap white to begin with
  memDC.FillSolidRect(iconRect.top,iconRect.left,iconRect.bottom,iconRect.right,::GetSysColor(COLOR_3DFACE));

  //draw a rectangle using the brush
  CBrush *pOldBrush = memDC.SelectObject(&brush);
  if (bAscending)
  {
   // Arrow pointing up
   CPoint Pt[3];
   Pt[0] = CPoint(7,  5); // Top
   Pt[1] = CPoint(4,  8); // Left
   Pt[2] = CPoint(10,  8); // Right
   memDC.Polygon(Pt, 3);
  }
  else
  {
   // Arrow pointing down
   CPoint Pt[3];
   Pt[0] = CPoint(10, 6); // Right
   Pt[1] = CPoint(4, 6); // Left
   Pt[2] = CPoint(7, 9); // Bottom
   memDC.Polygon(Pt, 3);
  }
  memDC.SelectObject(pOldBrush);

  //select old bitmap back into the memory dc
  memDC.SelectObject(pOldBitmap);

  return (HBITMAP)newbmp.Detach();
 }

分享到:
评论

相关推荐

    ClistCtrl控件实现icon和report两种带图标的列表显示模式

    在图标视图中,每个列表项会以大图标或小图标的形式显示,通常还会伴随一个简短的文本标签。这种模式适用于展示项目,比如文件和文件夹,因为它们可以直观地表示文件的类型。实现这个模式,你需要设置CListCtrl的...

    CListCtrl排序加背景色嵌套edit和combox

    - 列表视图可以有多种视图模式,如报告视图、小图标视图、大图标视图和详细信息视图。在本例中,我们主要关注报告视图,因为它适合展示多列数据。 2. **排序功能** - CListCtrl本身并不支持排序,但可以通过重载...

    CListCtrl 代码 CListCtrl 代码

    3. **图标管理**:使用`SetImageList`可以设置小图标或大图标,用于显示项的图标。 4. **状态栏操作**:CListCtrl支持选中、选区、排序等功能,例如`SetItemState`可以改变项的状态,`SetSortIcon`设置排序图标。 ...

    CListCtrl四种视图示例

    CListCtrl是MFC库中一个非常重要的控件,它用于在窗口中显示一系列项,这些项可以以图标、小图标、列表或详细信息视图的形式呈现。在Visual C++ 6.0版本中,CListCtrl是开发人员常用的一个组件,用于创建类似资源...

    CListCtrl实例

    在MFC应用中,你可以通过在对话框类的资源编辑器中添加列表视图控件,并在代码中声明一个CListCtrl类型的成员变量来创建CListCtrl。初始化通常在 OnInitDialog 函数中完成,包括设置控件样式、添加列以及设置初始...

    CListCtrl

    这个控件可以显示多列数据,并支持多种视图模式,如报告视图、小图标视图和大图标视图等。通过CListCtrl,开发者可以方便地实现数据的分组、排序、过滤等功能。 二、CListCtrl的列头与HeaderCtrl 列头在报告视图中...

    CListCtrl常用操作大全

    它支持多种视图模式,如报告视图、小图标视图和大图标视图等。在报告视图中,用户可以方便地查看和管理大量结构化的信息。 二、插入和删除项 要向CListCtrl中添加项,可以使用InsertItem函数,指定项的索引位置和...

    CListCtrl派生类演示

    CListCtrl是基于Windows API中的LISTVIEW控件的封装,提供了多种视图模式,如报告视图、小图标视图和大图标视图等。在报告视图中,CListCtrl可以显示多列数据,适合用于表格样式的数据显示。在派生CListCtrl类时,...

    CListCtrl的使用例子

    在创建CListCtrl对象时,通常需要在对话框或视图类的初始化函数中调用Create方法来实例化控件,并指定其风格,例如LVS_REPORT用于报告视图,LVS_OWNERDATA表示列表的数据由控件的父窗口提供。 接下来,我们关注如何...

    可改变颜色可排序的clistctrl扩展类

    `CListCtrl`是MFC(Microsoft Foundation Classes)框架中用于创建列表视图控件的类,它在Windows操作系统中广泛用于显示数据项列表。在这个特定的案例中,我们讨论的是一个扩展了`CListCtrl`功能的自定义类,增加了...

    关于CListctrl的详细使用

    CListCtrl是MFC(Microsoft Foundation Classes)框架中用于创建列表视图控件的一个类,它是Windows API中的ListView控制的封装。本篇文章将深入探讨CListCtrl的使用,包括其基本概念、功能特性、创建与初始化、数据...

    CListCtrl使用大全.doc

    在Windows编程中,CListCtrl是MFC(Microsoft Foundation Classes)库中用于创建类似Windows资源管理器中的列表视图控件的类。这篇文档“CListCtrl使用大全.doc”主要涵盖了CListCtrl的使用方法,包括风格设置、插入...

    CListCtrl-Print

    它可以显示多列数据,并支持各种视图模式,如报告视图、小图标视图、大图标视图和详细信息视图。通过CListCtrl,开发者可以添加、删除、修改列表项,设置和获取列头,以及进行排序和选择操作。 二、CListCtrl的预览...

    CListCtrl 例子 代码

    2. **多种视图模式**:支持图标视图、列表视图、详细信息视图和小图标视图,适应不同的展示需求。 3. **条目操作**:添加、删除、修改和选择列表项,以及处理条目的双击事件等。 4. **图像列表**:可以关联图像...

    【列表视图控件CListCtrl】控件应用第二十课

    首先,CListCtrl控件提供了多种视图模式,包括图标(ICON)模式、报告(Report)模式、小图标(SMALLICON)模式等。其中,Report模式通常用于展示多列数据,每行数据包含多个字段,非常适合用于表格形式的数据展示。...

    EVC下常用控件列表视图控件CListCtrl的使用实例源码

    2. **设置视图样式**:CListCtrl支持多种视图模式,如报告视图、小图标视图、大图标视图和列表视图。你可以使用SetView()函数来选择视图模式。 3. **插入列**:使用InsertColumn()函数添加列,每个列有标题和宽度。...

    C++的列表控件CLISTCTRL使用方法

    2. 小图标方式(LVS_SMALLICON) 3. 列表显示方式(LVS_LIST) 4. 详细资料显示方式(LVS_REPORT) CLISTCTRL控件的对象结构包括: 1. 列表控制的建立方法 2. 列表控制的属性类 3. 列表控制的操作方法 列表控制的...

    CListCtrl.rar_CListButton_CListCtrl_CListCtrl控件_clistctrl button

    这个控件支持多种视图模式,如报告视图、小图标视图、大图标视图等,但最常用的是报告视图,因为它能够展示多列数据并支持列头排序。 创建`CListCtrl`的第一步是定义一个`CListCtrl`成员变量在你的类中,然后在...

    CLISTCTRL.rar_CListCtrl mfc_mfc 列表_列表控件

    CListCtrl提供了多种显示模式,包括图标、列表、详细信息和小图标,使得用户可以方便地查看和操作数据。在本教程中,我们将深入探讨`CListCtrl`及其在MFC应用中的使用。 首先,`CListCtrl`是`CWnd`的派生类,因此它...

    CListCtrl.rar_CListCtrl_ClistCt

    在Windows应用程序开发中,CListCtrl常用于显示数据列表,支持多种视图模式,如报告视图、小图标视图、大图标视图和详细信息视图等。CListCtrl控件不仅提供了数据的可视化展示,还支持用户交互,如选择、排序、分页...

Global site tag (gtag.js) - Google Analytics