CListCtrl表头控制

MFC CListCtrl 锁定表头的方法 群里有朋友问锁定表头这个怎么实现,就顺便写一下吧。 解决此问题的思路:   子类化CHeaderCtrl,处理由父窗口反射的HDN_BEGINTRACK消息,实际上这个消息有ASCII版本和UNICODE版本,所以这里就要对HDN_BEGINTRACKA和HDN_BEGINTRACKW都进行处理。处理这个消息是为了实现锁定表头,另外为了更加完善,也要将光标修改成默认的箭头。还有提供一个 阅读详情

1.表头控制          Header Control  
     2.图像列表控制      Image List
     3.列表控制和视      List Control&List View
     4.树控制和视        Tree Control&Tree View
     5.标签控制和视      Tab Control&Tab View
     6.工具条控制        Toolbar Control
     7.进度条控制        Progress Control
     8.滑动条控制       Slider Control
     9.旋转按钮控制     Spin Button Control
     10.状态条控制       Status Bar Control
其中,绝大部分通用控制在MFC类库中都存在两种封装形式,即控制类和视类,控制类主要是供直接使用控制而提供的,而视类则是通过间接使用控制而提供的,视类可以更好地把控制类集成到MFC结构中,并且使用视类可以利用引用直接对嵌套在其中的控制进行各种操作。两者在使用方法上没有太大区别,就拿列表控制类和视类来说,当创建列表视后可通过CListCtrl&   ctrlList =   GetListCtrl()成员函数取得视类引用ctrlList之后,就可以利用列表视的视函数对视进行各项操作(ctrlList.Add等)。

第1章 演练CHeadCtrl
     表头控制(CHeaderCtrl)通常应用在窗口中的文本或数据的列表之上。一般为数据列的标题,可以包括多个部分,用户可以拖动每个部分并可以控制每列的宽度。表头控制类提供了普通表头控制的基本方法,只有在WINDOWS95以后版本系统中才提供,其方法包含在afxcmn.h文件中,一般与标签控制(CTabCtrl)和列表控制(CListCtrl)组合使用。
1.1 表头控制的对象结构
1.1.1 表头控制对象的建立方法
     CHeaderCtrl &cheaderCtrl 建立表头控制对象
     Create                      建立表头并绑定对象
     CHeaderCtrl::Create的格式如下:BOOL Create( DWORD dwStyle, const RECT&
     rect, CWnd* pParentWnd, UINT nID );
     其返回值非零时初始化成功,否则失败。
     参数dwStyle用来确定表头控制类型;rect用来确定表头控制的大小和位置;ParentWnd用来确定表头控制的父窗口;nID用来表示表头控制的标志。
     表头控制风格包括:
HDS_BUTTONS      表示表头控制外观类似按钮;
HDS_HORZ         表示表头控制为水平排列;
     HDS_VERT         表示表头控制为垂直排列;
     HDS_HIDDEN       表示表头控制为隐藏模式。
它也可以使用普通类控制风格,包括:
     CCS_BOTTOM       设置控制位置在父窗口的底部并与父窗口同样宽度;
     CCS_NODIVIDER    在控制顶部形成两个像素的高亮区;
     CCS_NOHILITE     在控制顶部形成一个像素的高亮区;
     CCS_NOMOVEY      在响应WM_SIZE消息时重置大小并水平排列;
     CCS_NOPARENTALIGN   使控制自动靠近父窗口的顶部或底部;
     CCS_NORESIZE     设置初始大小或新值时使控制使用默认宽度和高度;
     CCS_TOP          设置在父窗口客户区域的顶部并与父窗口同样宽度;
     同样表头控制也可以使用窗口控制风格,包括:
     WS_CHILD         建立一个子窗口,不能用于WS_POPUP窗口类型;
     WS_VISIBLE       建立一个初始时不可见的窗口;
     WS_DISABLED      建立一个初始时无效的窗口;
     WS_GROUP         确定可用光标移动的控制群组;
     WS_TABSTOP       确定可用TAB控制移动站点;
     表头控制一般分为两个步骤,首先确定表头控制的数据结构,然后建立表头控制并绑定对象。
1.1.2 表头控制的属性
     表头控制的属性包括取得表头控制中项目的数量GetItemCount、取得表头控制中某一项目的内容GetItem和设置表头控制中某一项目的内容SetItem。
1.1.3 表头控制的操作方法
     表头控制的操作方法包括向表头控制中插入一个新项目InsertItem、从表头控制中删除一个项目DeleteItem和绘制表头中给定的项目DrawItem等。
1.2 表头控制的数据结构
     在使用表头控制时,首先必须建立一个数据结构HD_ITEM,其结构定义如下:
     typedef struct _HD_ITEM 
     { UINT     mask;        file://结构成员有效控制位
       int      cxy;         file://表头项目的宽度
       LPSTR    pszText;     file://表头项目内容
       HBITMAP hbm;         file://表头项目的位置句柄
       int      cchTextMax;  file://表头内容字符串长度
       int      fmt;         file://表头项目的格式
       LPARAM   lParam;      file://应用程序定义的32位数据
     } HD_ITEM;
     屏蔽控制位说明了数据结构成员中包含的有效数据,可以是下面标志的组合:
     HDI_BITMAP         hbm成员有效
     HDI_FORMAT         fmt 成员有效
     HDI_LPARAM         lParam成员有效
     HDI_TEXT           pszText 和cchTextMax 成员有效
     HDI_WIDTH          cxy 成员有效并确定项目宽度值
     格式标志位fmt可以是以下标志的组合:
     HDF_CENTER         表头项目居中
     HDF_LEFT           表头项目左对齐
     HDF_RIGHT          表头项目右对齐
     HDF_BITMAP         表头显示一个位图
     HDF_OWNERDRAW      由主窗口自绘表头项目
     HDF_STRING         表头项目为一个字符串
1.3 表头控制的应用技巧
     由于表头控制无法单独使用,其主要是配合列表控制和标签控制,并多以文字表头应用多见,InsertItem、SetItem和GetItem是常用的方法,如在列表控制时利用InsertColumn属性就可以增加一个表列的文本标题,具体用法和技巧见列表控制和标签控制。下面以在列表控制中的增加表列的方法来具体说明:
     lvcol.pszText="品   名";//设置第一列表头名
     lvcol.iSubItem=i;      file://表列序号
     lvcol.cx=70;           file://表列宽度
     m_ListCtrl.InsertColumn(i++,&lvcol);//插入一个表列
     lvcol.pszText="数   量";//设置第二列表头名
     lvcol.iSubItem=i;
     lvcol.cx=70;
     m_ListCtrl.InsertColumn(i++,&lvcol);//插入一个表列
     ......//其它代码


第2章 演练CImageList
     图像列表控制(CImageList)是相同大小图像的一个集合,每个集合中均以0为图像的索引序号基数,图像列表通常由大图标或位图构成,其中包含透明位图模式。可以利用WINDOWS32位应用程序接口函数API来绘制、建立和删除图像,并能实现增加、删除、替换和拖动图像等操作。图像列表控制提供了控制图像列表的基本方法,这些方法在WINDOWS95及以后版本才能实现。
2.1 图像控制的对象结构
2.1.1 图像控制的数据成员
     m_hImageList          连接图像对象的控制句柄
2.1.2 图像控制的建立方法
     CimageList&imageList建立图像控制对象结构
     Create                初始化图像列表并绑定对象
     图像控制的建立方法如下:
     BOOL Create( int cx, int cy, UINT nFlags, int nInitial, int nGrow );
     BOOL Create( UINT nBitmapID, int cx, int nGrow, COLORREF crMask );
     BOOL Create( LPCTSTR lpszBitmapID, int cx, int nGrow, COLORREF crMask );
BOOL Create( CImageList& imagelist1, int nImage1, CImageList& imagelist2
   ,int   nImage2,int dx, int dy );
     其中各项参数的含义为:cx定义图像的宽度,单位为象素;cy定义图象的高度,单位为象素;nFlags确定建立图像列表的类型,可以是以下值的组合:ILC_COLOR、ILC_COLOR4、ILC_COLOR8、ILC_COLOR16、ILC_COLOR24、ILC_COLOR32、ILC_COLORDDB和ILC_MASK;nInitial用来确定图像列表包含的图像数量;nGrow用来确定图像列表可控制的图像数量。
     NbitmapID     用来确定图像列表联系的位图标志值;crMask表示颜色屏蔽位; 
     LpszBitmapID 用来确定包含位图资源的标识串;
imagelist1     指向图像列表控制对象的一个指针;nImage1图像列表1中包含的图像数     量;imagelist2指向图像列表控制对象的一个指针;nImage2图像列表2中包含的图像数量;dx表示以象素为单位的图像宽度;dy表示以象素为单位的图像高度。
同样,图像控制的建立也包括两个步骤,首先建立图像列表结构,然后建立图像列表控制。
2.1.3 图像控制的属性类
     图像控制的属性类包括返回m_hImageList.控制句柄GetSafeHandle、取得图像列表中的图像数量GetImageCount、设置图像列表的背景颜色SetBkColor、取得图像列表的背景颜色SetBkColor和取得图像的有关信息SetBkColor。
2.1.4 图像控制的操作方法
     图像控制的操作方法包括将一个图像列表绑定到一个对象上Attach、将对象上的图像列表解除绑定并返回句柄Detach、删除一个图像列表DeleteImageList、将一个图像增加到图像列表中Add和将一个图像从图像列表中删除Remove等。
2.2 图像控制的应用技巧
     对于图像控制,同样不能单独使用,必须与列表控制、树控制和标签控制相互结合应用,下面分别介绍其具体应用技巧。
2.2.1 图像控制在列表控制中的应用技巧
2.2.1.1 设置图像控制CListCtrl::SetImageList的调用格式如下:
     CImageList* SetImageList( CImageList* pImageList, int nImageList );
     其返回值是指向前一个图像列表控制的一个指针,如果不存在前一个图像列表则为NULL;其中参数pImageList是指向图像列表的标识,nImageList是图像列表的类型,可以是如下值:
     LVSIL_NORMAL      用大图标方式进行图像列表;
     LVSIL_SMALL      用小图标方式进行图像列表;
     LVSIL_STATE      以图像状态进行图像列表;
2.2.1.2 取得图像控制CListCtrl::GetImageList的调用格式如下:
     CImageList* GetImageList( int nImageList ) const;
     其返回值为指向图像列表控制的指针,其中nImageList用来确定取得返回值的图像列表的     值,其取值与设置图像列表函数相同。
     ③图像控制在列表控制中的应用示例
     CImageList Cil1,Cil2;            file://定义大小图标像列表
     CVCLISTApp *pApp=(CVCLISTApp *)AfxGetApp();//取得列表控制程序
     Cil1.Create(32,32,TRUE,2,2);     file://建立32位图像控制
     Cil1.Add(pApp->LoadIcon(IDI_GJ));//增加选中状态图像
     Cil1.Add(pApp->LoadIcon(IDI_XS));//增加非选中状态图像
     Cil2.Create(16,16,TRUE,2,2);     file://建立16位图像控制
     Cil2.Add(pApp->LoadIcon(IDI_GJ));//增加选中状态图像
     Cil2.Add(pApp->LoadIcon(IDI_XS));//增加非选中状态图像
     m_ListCtrl.SetImageList(&Cil1,LVSIL_NORMAL);//设置大图标控制
     m_ListCtrl.SetImageList(&Cil2,LVSIL_SMALL);//设置小图标控制
2.2.2 图像控制在树控制中的应用技巧
2.2.2.1 设置图像控制CTreeCtrl::SetImageList的调用格式如下:
     CImageList* SetImageList( CImageList * pImageList, int nImageListType );
     其返回值为指向前前一个图像列表的指针,否则为NULL;参数pImageList为指向图像列表的标识,如果pImageList为NULL则所有的图像都将从树控制中被清除;nImageListType为图像列表设置的类型,可以是如下值之一:
     TVSIL_NORMAL    设置正常图像列表,其中包括选中和非选中两种图标; 
     TVSIL_STATE    设置图像列表状态,指用户自定义状态;
2.2.2.2 取得图像控制CTreeCtrl::GetImageList的调用格式如下:
     CImageList* GetImageList( UINT nImage );
     如果调用成功则返回图像列表控制指针,否则为NULL;nImage为取得返回值的图像列表类型,其取值和取得图像列表控制完全相同。
2.2.2.3 图像控制在树控制中的应用示例
     CImageList Cil1,Cil2;//定义大小图标像列表
     CVCTREEApp *pApp=(CVCTREEApp *)AfxGetApp();//获取应用程序指针
     Cil1.Create(16,16,ILC_COLOR,2,2);//建立图像控制
     Cil1.Add(pApp->LoadIcon(IDI_PM));//增加选中状态图像
     Cil1.Add(pApp->LoadIcon(IDI_CJ));//增加非选中状态图像
     m_TreeCtrl.SetImageList(&Cil1,TVSIL_NORMAL);//设置图像控制列表
     然后在树控制的结构定义中进行如下设置:
     TCItem.item.iImage=0;        file://设置未选中图像索引号
     TCItem.item.iSelectedImage=1;//设置选中时图像引号
2.2.3 图像控制在标2.2.4 签控制中的应用技巧
2.2.4.1 设置图像控制CTabCtrl::SetImageList的调用格式
     CImageList * SetImageList( CImageList * pImageList );
     其返回值为指向前一个图像列表的指针,如果不存在前一个图像列表则为NULL;pImageList为标识TAB控制的图像列表指针。
2.2.4.2 取得图像控制CTabCtrl::GetImageList的调用格式
     HIMAGELIST GetImageList() const;
     其返回值为指向TAB控制的图像列表指针,如果调用不成功则为NULL。
     其应用技巧较前两种更加简单,这里不再赘述。


第3章 演练CList
3.1 列表控制的主要功能
     列表控制和视(List Control&View)主要用来以各种方式显示一组数据记录供用户进行各种操作,Windows98/95中资源管理器中的“查看”标签下的“大图标|小图标|列表|详细资源”就是一个非常好的典型应用。列表中的记录可以包括多个数据项,也可以包括表示数据内容的大小图标,用来表示数据记录的各种属性。
     列表控制提供了对Windows列表功能操作的基本方法,而使用列表视的视函数可以对列表视进行各种操作,通过调用视成员GetListCtrl获取嵌在列表视内列表控制的引用(GetListCtrl&   ctrlList   =   GetListCtrl()),就可以和列表控制一样进行各种操作。操作一个列表控制和视的基本方法为:创建列表控制;创建列表控制所需要的图像列表;向列表控制添加表列和表项;对列表进行各种控制,主要包括查找、排序、删除、显示方式、排列方式以及各种消息处理功能等;最后撤消列表控制。
     对于一个列表控制,其最典型最常用的显示控制方式为:大图标方式(LVS_ICON)、小图标方式(LVS_SMALLICON)、列表显示方式(LVS_LIST)和详细资料(即报告LVS_REPORT)显示方式。这可以通过设置其显示方式属性来实现。要控制列表所在窗口的风格,可通过功能函数GetWindowLong和SetWindowLong来实现,要控制列表图标的对齐方式,可通过设置列表窗口的风格LVS_ALIGNTOP或LVS_ALIGNLEFT来实现,
3.2 列表控制的对象结构
3.2.1 列表控制的建立方法
     CListCtrl&listCtrl   定义列表对象的结构
     Create                建立列表控制并绑定对象
列表控制CListCtrl::Create的调用格式如下:
     BOOL Create( DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID );
其中参数dwStyle用来确定列表控制的风格;rect用来确定列表控制的大小和位置;pParentWnd用来确定列表控制的父窗口,通常是一个对话框;nID用来确定列表控制的标识。其中列表控制的风格可以是下列值的组合:
     LVS_ALIGNLEFT       用来确定表项的大小图标以左对齐方式显示;
     LVS_ALIGNTOP        用来确定表项的大小图标以顶对齐方式显示;
     LVS_AUTOARRANGE     用来确定表项的大小图标以自动排列方式显示;
     LVS_EDITLABELS      设置表项文本可以编辑,父窗口必须设有LVN_ENDLABELEDIT风格;
     LVS_ICON            用来确定大图标的显示方式;
LVS_LIST            用来确定列表方式显示;
LVS_NOCOLUMNHEADER 用来确定在详细资料方式时不显示列表头;
LVS_NOLABELWRAP     用来确定以单行方式显示图标的文本项;
LVS_NOSCROLL        用来屏蔽滚动条;
LVS_NOSORTHEADER    用来确定列表头不能用作按钮功能;
LVS_OWNERDRAWFIXED 在详细列表方式时允许自绘窗口;
LVS_REPORT          用来确定以详细资料即报告方式显示;
LVS_SHAREIMAGELISTS用来确定共享图像列表方式;
LVS_SHOWSELALWAYS   用来确定一直显示被选中表项方式;
LVS_SINGLESEL       用来确定在某一时刻只能有一项被选中;
LVS_SMALLICON       用来确定小图标显示方式;
LVS_SORTASCENDING   用来确定表项排序时是基于表项文本的升序方式;
LVS_SORTDESCENDING 用来确定表项排序时是基于表项文本的降序方式;
3.2.2 列表控制的属性类
列表控制的属性类包括取得列表控制的背景色GetBkColor、设置列表控制的背景色SetBkColor、取得列表控制的图像列表GetImageList、设置列表控制的图像列表SetImageList、取得列表项数目GetItemCount、取得列表控制的属性GetItem、取得与表项相关的数据GetItemData、设置表项的属性SetItem、设置与表项相关的数值SetItemData、取得相关联的下一个表项GetNextItem、设置列表控制的文本颜色SetTextColor、取得列表控制的文本背景颜色GetTextBkColor、设置表项的最大数目SetItemCount和取得被选中表项的数目GetSelectedCount等。
3.2.3 列表控制的操作方法
     列表控制的操作方法包括插入一个新的表项InsertItem、删除一个表项DeleteItem、排序表项SortItems、测试列表的位置HitTest、重绘表项RedrawItems、插入一个表列InsertColumn、删除一个表列DeleteColumn、编辑一个表项文本EditLabel和重绘一个表项DrawItem等。
3.3 列表控制的数据结构
列表控制中包含两个非常重要的数据结构LV_ITEM和LV_COLUMN。LV_ITEM用于定义列表控制的一个表项,LV_COLUMN用于定义列表控制的一个表列,其定义格式分别为:
typedef struct _LV_ITEM { 
    UINT    mask;       file://结构成员屏蔽位
      int     iItem;      file://表项索引号
int     iSubItem;   file://子表项索引号
UINT    state;      file://表项状态
UINT    stateMask;  file://状态有效性屏蔽位 
LPTSTR   pszText;   file://表项名文本
int     cchTextMax; file://表项名最大长度
int     iImage;      // 表项图标的索引号
LPARAM lParam;      // 与表项相关的32位数
} LV_ITEM; 
     typedef struct _LV_COLUMN { 
         UINT mask;         file://结构成员有效性屏蔽位
         int fmt;           file://表列对齐方式
         int cx;            file://表列的象素宽度
         LPTSTR pszText;    file://表列的表头名
         int cchTextMax;    file://表列名的文本长度
         int iSubItem;      file://与表列关联的子表项索引号
} LV_COLUMN; 
其中fmt可以取如下值:
LVCFMT_CENTER         表列居中对齐 
LVCFMT_LEFT           表列左对齐

MFC CListCtrl自定义表头样式:从字体到高度的全面美化指南 本文详细介绍了如何全面美化MFC CListCtrl控件的表头样式。通过自定义绘制技术,从修改字体、颜色到实现文字垂直居中,并重点解决了精确控制表头高度的核心难点。文章提供了完整的代码示例和封装类,帮助开发者轻松实现专业、现代化的UI界面,提升MFC桌面应用的整体视觉体验。 阅读详情

相关推荐

MFC CListCtrl 自定义重绘实战:滚动条、表头与列表项精细化控制

CListCtrl 是 Windows MFC 中最常用的列表控件,但其原生绘制机制在高 DPI、深色模式和现代 UI 需求下常出现滚动条模糊、表头截断、选中态异常等问题。其底层依赖 NM_CUSTOMDRAW 消息与 LVS_OWNERDRAWFIXED 模式协同工作,本质是 Win32 绘制管线的分阶段回调机制——涵盖 CDDS_PREPAINT、CDDS_HEADER、CDDS_ITEMPREPAINT 和 CDDS_SUBITEMPREPAINT 四个关键阶段。理解各阶段职责与上下文(如 hwndF

weixin_28829479的博客 261

MFC总结之CListCtrl用法及技巧

文根据本人在项目中的应用,来谈谈CListCtrl的部分用法及技巧。当初学习时,查了很多资料,零零碎碎的作了些记录,现在主要是来做个总结,方便以后查阅。主要包括以下十三点内容:基本操作、获取选中行的行号、复选框操作、动态设置选中行的字体颜色、设置选中行的背景颜色、禁止拖动表头、让第一列居中显示、设置行高与字体、虚拟列表技术、点击表头时进行归类、向上与向下移动、动态调整大小问题、避免闪烁问题。 ...

阿哲的专栏 1637

MFC CListCtrl自绘实战:解决失焦变灰与DrawItem核心代码

在Windows桌面应用开发中,列表控件是承载数据展示的核心组件,但默认的CListCtrl在不同系统主题下表现参差不齐,尤其是焦点丢失后选中行变为灰色,严重影响用户定位当前数据。许多MFC开发者都面临过这个痛点,而自绘(OwnerDraw)正是解决这类问题的关键手段。自绘通过重写DrawItem或处理NM_CUSTOMDRAW通知,将绘制逻辑完全掌控在自己手中,从而保持选中高亮稳定、实现交替行背景、自定义图标与文字排版。对于上位机监控、数据管理工具等场景,一个统一风格的列表界面能显著提升操作清晰度与产品质

weixin_29189363的博客 301

CListCtrl控件使用方法总结(二)

列表控件可以看作是功能增强的ListBox,它提供了四种风格,而且可以同时显示一列的多中属性值。 MFC中使用CListCtrl类来封装列表控件的各种操作。 通过调用 BOOL Create( DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID )创建一个窗口, dwStyle中可以使用以下一些列表控件的专用风格:

Angus_pei的专栏 1007

MFC中CListCtrl滚动条、表头与列表项自定义重绘实战

CListCtrl是 MFC 中用于显示和管理列表数据的核心控件之一,支持多种视图模式(如报表、图标、小图标、列表),广泛应用于桌面管理系统中。其内部封装了 Windows 原生的窗口类,具备丰富的消息接口与通知机制,能够处理项目插入、删除、排序及自定义绘制等操作。在报表视图下,CListCtrl通常与协同工作,实现列标题展示与列宽调整。通过扩展其默认行为,可实现诸如自定义滚动条、视觉样式优化和高效数据绑定等高级功能,为复杂 UI 需求提供强大支持。

weixin_36123300的博客 804

MFC CListCtrl自绘实战:重绘表头、列表项与滚动条

在Windows界面开发中,控件自绘是突破系统默认外观、实现自定义UI的关键技术。MFC的CListCtrl列表控件内部由表头、列表项和滚动条等独立绘制主体构成,通过NM_CUSTOMDRAW消息可以接管大部分绘制逻辑,但滚动条属于非客户区,需单独处理。掌握这些技能后,开发者能轻松实现深色主题、自定义高亮色等视觉需求,常见于工控客户端、数据监控面板等场景。本文从CListCtrl的绘制机制入手,详细讲解表头重绘、列表项选中/失焦状态处理,以及滚动条移花接木与WM_NCPAINT硬画两种方案,并整理了双缓冲、

weixin_42529328的博客 270

CListCtrl控件列表项和列表头图标的显示

1、为CListCtrl控件绑定一个控件变量:m_List。 2、插入三个ICON作为列表项的图标显示,ID分别为:IDI_ICON1、IDI_ICON2、IDI_ICON3。插入两个Bitmap作为列表头图标的显示图标,ID分别为:IDB_BITMAP1、IDB_BITMAP2。 3、基本步骤都是:1、Create创建图像列表; 2、向图像列表里添加多个图标; 3、将CImageList对象

小米的修行之路 4846

MFC CListCtrl重绘实战:滚动条、表头与列表项自绘指南

在Windows桌面客户端开发中,控件自绘是打破系统默认样式、实现界面视觉统一的核心手段。MFC框架下的CListCtrl作为列表类控件的主力,其默认外观在滚动条、表头和选中状态上常与定制化界面格格不入,尤其当控件失焦后选中行背景变灰的问题,严重影响用户体验。通过子类化与NM_CUSTOMDRAW通知机制,开发者可以完全接管滚动条的非客户区绘制、表头的热跟踪与文字样式,以及列表项的悬停、选中和失焦高亮逻辑。这种重绘方式不仅让选中行保持一贯的蓝色高亮,还能实现像素级跨系统一致性。实际工程中需要平衡绘制性能与系

weixin_42635064的博客 216

CListCtrl的用法总结

1 CListCtrl的风格 CListCtrl的风格有四种: LVS_ICON: 为每个item显示大图标 LVS_SMALLICON: 为每个item显示小图标 LVS_LIST: 显示一列带有小图标的item LVS_REPORT: 显示item详细资料 分别对应着资源管理器查看菜单下的大图标,小图标,列表,详细资料。 可以在控件属性视图下设置:View属性. 也可以...

管子(zero)的杂乱空间 375

MFC重绘CListCtrl三件套:自绘滚动条、表头与列表项的工程方案

在MFC老项目中,CListCtrl默认的滚动条、表头和列表项在Windows 10/11深色主题下显得格格不入。要彻底统一视觉风格,需要理解这三部分各自独立的绘制机制:滚动条可通过隐藏系统控件并替换为自绘CScrollBar,表头采用HDS_OWNERDRAWN结合DrawItem接管,列表项则依赖NM_CUSTOMDRAW分阶段定制。掌握这三者的配合逻辑与常见坑点,才能真正实现深色主题适配、老项目UI升级等场景下的稳定自绘效果。本文从控件绘制原理出发,结合工程实践,提供一套可控的全面自绘方案,帮助开发者

weixin_42527654的博客 345

CListCtrl 拖拽功能移动选中行的位置

CDragListCtrl继承CListCtrl类,CDragListCtrl实现拖动时绘制该行的内容浮动在鼠标移动的位置。CDragList主要用于计算当前鼠标移动到那一行上。 使用CDragListCtrl的对话框添加 afx_msg LRESULT DragMoveItem(WPARAM wParam, LPARAM lParam); ON_MESSAGE(WM_MOVEITEM, DragMoveItem) LRESULT DialUploadLoopTask::DragMoveItem(WPARAM wParam, LPARAM lParam) { int iSelectItem = wParam; int iChangeItem = lParam; if (iSelectItem == -1 || iChangeItem == -1) { return 0; } CString strTaskName = m_CListCtrlTask.GetItemText(iSelectItem, 0); CString strTaskID = m_CListCtrlTask.GetItemText(iSelectItem, 1); CString strTaskSynStatus = m_CListCtrlTask.GetItemText(iSelectItem, 2); if (iSelectItem < iChangeItem) { for (int i = iSelectItem; i iChangeItem; i--) { if (i-1 == iChangeItem) { m_CListCtrlTask.SetItemText(i, 0, strTaskName); m_CListCtrlTask.SetItemText(i, 1, strTaskID); m_CListCtrlTask.SetItemText(i, 2, strTaskSynStatus); } else { m_CListCtrlTask.SetItemText(i, 0, m_CListCtrlTask.GetItemText(i - 1, 0)); m_CListCtrlTask.SetItemText(i, 1, m_CListCtrlTask.GetItemText(i - 1, 1)); m_CListCtrlTask.SetItemText(i, 2, m_CListCtrlTask.GetItemText(i - 1, 2)); } } } return 0; }

CHeaderCtrl用法

CListCtrl的表头可以单独使用,类CHeaderCtrl封装了这一功能.   1.  构造表头      和所有控件一样,都通过Create函数创建对象,Create函数的原型如下:      virtual BOOL Create(DWORD dwStyle,const RECT& rect,CWnd* pParentWnd,UINT nID)      参数

丸子头的专栏 1219

MFC中实现不同行高的CListCtrl

继承自CListCtrl,实现了表头的重绘、表本身设置行高不同、设置字体颜色、背景色等。功能比较齐全,可以直接拆分txt文件运行。

CListCtrl使用详解

1。先来介绍REPORT类型的CListCtrl: 首先使用下面的语句设置CListCtrl的style:   DWORD   SetExtendedStyle(   DWORD   dwNewStyle   ); 其中   LVS_EX_CHECKBOXES   表示添加CheckBox   LVS_EX_FULLROWSELECT   表示选择整行    LVS_EX_GRIDLINES  ...

weixin_33924770的博客 109

重绘MFC列表控件(ListCtrl)字体 表头和行高度 行颜色等

重绘MFC列表控件(ListCtrl)字体大小 表头和行高度 行颜色等 行的颜色有5中:选中(获取焦点和丢失焦点2种),未选中(鼠标移动时、奇行和偶行)等

【学习体会】Lighttools8.4.0:设置虚拟相机+仿真结果3D显示

1.设置虚拟相机并渲染视图中的图像 添加球型光源、接收器、cube物体,设置物体表面的光学属性为简单散射

LeonJin的博客 6282
上一篇: CListCtrl多表头
下一篇: GPIO编程(-)开发板重启
ecbtnrt
博客等级 码龄20年 92粉丝 47原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值