ListCtrl控件
一 CListCtrl类型
LVS_EDITLABELS
LVS_OWNERDRAWFIXED
LVS_REPORT
LVS_SHOWSELALWAYS
LVS_SINGLESEL
LVS_SMALLICONw
LVS_SORTASCENDING LVS_SORTDESCENDING
LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES | LVS_EX_HEADERDRAGDROP
(1)添加或删除风格nStyle |= 或 nStyle &~
(2)设置扩展风格GetExtendStyle(); SetExtendStyle(DWORD dwStyle);
二 动态创建带图标的ListCtrl控件
(1)Create
CListCtrlEx *pListCtrl = new CListCtrlEx();
pListCtrl->Create(WS_VISIBLE|LVS_REPORT|LVS_OWNERDRAWFIXED, CRect(,,,), this, IDC_LISTCTRL);
(2)设置扩展风格GetExtendStyle()和GetExtendStyle()
DWORD nStyle = pListCtrl->GetExtendedStyle();
nStyle |= LVS_EX_GRIDLINES|LVS_EX_FULLROWSELECT|LVS_EX_HEADERDRAGDROP;
pListCtrl->SetExtendedStyle(nStyle);
(3)初始化CImageList
CBitmap bmp1,bmp2;
bmp1.LoadBitmap(IDB_BITMAP1);
bmp2.LoadBitmap(IDB_BITMAP2);
m_ImageList.Create(,,ILC_COLOR32|ILC_MASK,,);
m_ImageList.Add(&bmp1, RGB(,,));
m_ImageList.Add(&bmp2,RGB(,,));
pListCtrl->SetImageList(&m_ImageList, LVSIL_SMALL);
(4)插入列,行
pListCtrl->InsertColumn(, "学号",LVCFMT_LEFT, );
pListCtrl->InsertColumn(, "姓名",LVCFMT_LEFT,);
pListCtrl->InsertColumn(, "成绩",LVCFMT_LEFT,);
// 方法1
pListCtrl->InsertItem(, "", );
pListCtrl->SetItemText(,,"张三");
pListCtrl->SetItemText(,,"");
方法2
{
LV_ITEM lvItem = {};
lvItem.mask = LVIF_TEXT|LVIF_IMAGE|LVIF_PARAM;
lvItem.iItem = ;
lvItem.iSubItem = ;
lvItem.iImage = ;
lvItem.lParam = (LPARAM);
lvItem.pszText="";
pListCtrl->InsertItem(&lvItem);
}
{
LV_ITEM lvItem = {};
lvItem.mask = LVIF_TEXT;
lvItem.iItem = ;
lvItem.iSubItem = ;
lvItem.lParam = ;
lvItem.pszText="张三";
pListCtrl->SetItem(&lvItem);
}
{
LV_ITEM lvItem = {};
lvItem.mask = LVIF_TEXT|LVIF_IMAGE;
lvItem.iItem = ;
lvItem.iSubItem = ;
lvItem.iImage = ; // 特别测试该位置的iImage无效
lvItem.pszText="";
pListCtrl->SetItem(&lvItem);
}
三 自绘ListCtrl控件
效果图

代码实现
#pragma once // CListCtrlEx
#define IDC_ADDEDIT 1002
class CListCtrlEx : public CListCtrl
{
DECLARE_DYNAMIC(CListCtrlEx) public:
CListCtrlEx();
virtual ~CListCtrlEx(); protected:
DECLARE_MESSAGE_MAP()
public:
afx_msg void OnNMClick(NMHDR *pNMHDR, LRESULT *pResult);
afx_msg void OnLvnColumnclick(NMHDR *pNMHDR, LRESULT *pResult);
afx_msg void OnNMDblclk(NMHDR *pNMHDR, LRESULT *pResult);
public:
virtual void DrawItem(LPDRAWITEMSTRUCT /*lpDrawItemStruct*/);
void DrawRowICon(CDC *pDC, CRect &rc, int nRow);
};
// ListCtrlEx.cpp : 实现文件
// #include "stdafx.h"
#include "mfcctrlstu.h"
#include "ListCtrlEx.h" // CListCtrlEx IMPLEMENT_DYNAMIC(CListCtrlEx, CListCtrl) CListCtrlEx::CListCtrlEx()
{ } CListCtrlEx::~CListCtrlEx()
{
} BEGIN_MESSAGE_MAP(CListCtrlEx, CListCtrl)
ON_NOTIFY_REFLECT(NM_CLICK, &CListCtrlEx::OnNMClick)
ON_NOTIFY_REFLECT(LVN_COLUMNCLICK, &CListCtrlEx::OnLvnColumnclick)
ON_NOTIFY_REFLECT(NM_DBLCLK, &CListCtrlEx::OnNMDblclk)
END_MESSAGE_MAP() void CListCtrlEx::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)
{
// 背景
CDC dc;
CRect rc = lpDrawItemStruct->rcItem;
dc.Attach(lpDrawItemStruct->hDC);
if (lpDrawItemStruct->itemState & ODS_SELECTED)
{
// 选中状态蓝底白字
dc.FillSolidRect(&rc, GetSysColor(COLOR_HIGHLIGHT));
dc.SetTextColor(GetSysColor(COLOR_HIGHLIGHTTEXT));
}
else
{
// 普通状态白底黑字
//dc.FillSolidRect(&rc, GetSysColor(COLOR_WINDOW));
dc.FillSolidRect(&rc, RGB(,,));
dc.SetTextColor(GetSysColor(COLOR_WINDOWTEXT));
} int nRow = lpDrawItemStruct->itemID;
CHeaderCtrl *pHeadCtrl = GetHeaderCtrl();
int nColCount = pHeadCtrl->GetItemCount();
CRect rcCell; // 注意单元格rcCell的处理
for (int nCol = ;nCol < nColCount; nCol++)
{
pHeadCtrl->GetItemRect(nCol, &rcCell);
rcCell.top = rc.top;
rcCell.bottom = rc.bottom;
CString strText = GetItemText(nRow, nCol); // 图标
if (!nCol)
{
DrawRowICon(&dc, rc, nRow);
rcCell.left += ;
} // 文字
dc.SetBkMode(TRANSPARENT);
dc.DrawText(strText, &rcCell, DT_LEFT|DT_VCENTER|DT_SINGLELINE);
//TRACE("%d-%d-%d-%d-%d-%d-%s\r\n", nRow, nCol, rcCell.left, rcCell.top, rcCell.right,rcCell.bottom,strText);
} dc.Detach();
} void CListCtrlEx::DrawRowICon(CDC *pDC, CRect &rc, int nRow)
{
/*LV_ITEM lvi = {LVIF_IMAGE};
GetItem(&lvi);*/
CImageList *pImageList = GetImageList(LVSIL_SMALL);
pImageList->Draw(pDC, nRow, rc.TopLeft(), ILD_TRANSPARENT);
} void CListCtrlEx::OnLvnColumnclick(NMHDR *pNMHDR, LRESULT *pResult)
{
LPNMLISTVIEW pNMLV = reinterpret_cast<LPNMLISTVIEW>(pNMHDR);
int nCol = pNMLV->iSubItem;
HDITEM hi = {HDI_IMAGE | HDI_FORMAT}; CHeaderCtrl *pHeadCtrl = GetHeaderCtrl();
pHeadCtrl->GetItem(nCol, &hi);
static int k = ;
hi.iImage = k;
k = !k; int nColCount = pHeadCtrl->GetItemCount();
for (int i = ; i < nColCount; i ++)
{
if (i == nCol)
hi.fmt |= HDF_IMAGE;
else
hi.fmt &= ~HDF_IMAGE; pHeadCtrl->SetItem(i, &hi);
} *pResult = ;
} void CListCtrlEx::OnNMClick(NMHDR *pNMHDR, LRESULT *pResult)
{
// TODO: 在此添加控件通知处理程序代码
/*if (!pNMHDR)
return;
LPNMITEMACTIVATE pNmItemActive = (LPNMITEMACTIVATE)pNMHDR;
LV_ITEM lvItem;
lvItem.iItem = pNmItemActive->iItem;
lvItem.iSubItem = 1;
lvItem.mask = LVIF_TEXT;
GetItem(&lvItem);*/
*pResult = ;
}
void CListCtrlEx::OnNMDblclk(NMHDR *pNMHDR, LRESULT *pResult)
{
// 在1行1列创建个Edit
LPNMITEMACTIVATE pNmItemActive = (LPNMITEMACTIVATE)pNMHDR;
int nRow = pNmItemActive->iItem;
int nCol = pNmItemActive->iSubItem;
CRect rc;
GetItemRect(nRow, &rc, LVIR_BOUNDS);
CRect rcCell;
CHeaderCtrl *pHeadCtrl = GetHeaderCtrl();
pHeadCtrl->GetItemRect(nCol, &rcCell);
rcCell.top = rc.top;
rcCell.bottom = rc.bottom;
if (==nRow&&==nCol)
{
CEdit *pEdit = new CEdit;
pEdit->Create(WS_CHILD|WS_VISIBLE|WS_TABSTOP|ES_LEFT, rcCell, this, IDC_ADDEDIT);
} *pResult = ;
}
ListCtrl控件的更多相关文章
- ListCtrl控件的使用
list contrl控件的使用 .建立基于对话框的应用程序,布置界面,设置属性. 注意添加的是listctrl控件,不是listbox控件,在控件工具箱的倒数第五行list control控件. 属 ...
- duilib中ListCtrl控件的实现
转载请说明出处,谢谢~~ 昨天在编程群里聊天,提到了ListCtrl,然后有网友找我,他需要做一个ListCtrl控件,我看过需求后接下了这个活.今天就把大致的思路和过程记录一下.首先看<任务书 ...
- VC/MFC ListCtrl 控件功能使用汇总(转)
以下未经说明,listctrl默认view 风格为report 相关类及处理函数 MFC:CListCtrl类 SDK:以 “ListView_”开头的一些宏.如 ListView_InsertCol ...
- ListCtrl控件着色
最近在写一款山寨的反病毒软件,大致功能已经实现,还有一些细小的环节需要细化. 其中,在界面编程中,就用到了给ListCtrl控件着色,查看了网上一些文章,终于实现了. 其实说白了,原理很简单,就是Li ...
- LISTCTRL控件方法
以下未经说明,listctrl默认view风格为report --------------------------------------------------------------------- ...
- 在ListCtrl控件中设置自定义光标
::SetCursor(::LoadCursor (::AfxGetInstanceHandle(), MAKEINTRESOURCE(IDB_BMP_MOUSE))); void CMy ...
- win32 listctrl控件右键菜单的实现
HMENU Menu_list,Menu_all; POINT point; HINSTANCE hInstance;//下面代码放到BOOL WINAPI DialogProc下 case WM_C ...
- 自绘listCtrl控件选中该行高亮(模拟windows)
CListCtrl的派生类CMyListCtrl的DrawItem()函数里添加代码 CDC *pDC = CDC::FromHandle(lpDrawItemStruct->hDC); if ...
- 解决ListCtrl控件第一列文字不能居中显示的问题/修改网格线
把CListCtrl设置为Report风格,但是插入第一列的时候(InsertColumn)的时候会发现文字不能居中.即使使用了LVCFMT_CENTER,其他列都可以正常居中,但第一列仍然靠左显示. ...
随机推荐
- keepalived(nat)+ftp+http
一. 环境要求需要2台LVS和n(n>=2)台RS操作系统 负载均衡模式 VIP NVIPRHEL7.4 NAT 193.168.141.30 192.168.102.165 LVS1 LVS2 ...
- IntelliJ IDEA运行项目成功后,无法访问Tomcat主页
问题 初次使用IntelliJ IDEA,但今天在运行项目启动Tomcat后,发现无法访问Tomcat首页,出现404错误:输入http://localhost:8080时无法访问Tomcat首页,但 ...
- 转自 BotVS 量化平台社区 --- 如何从绩效报告中分辨出“好模型 or 坏模型”
## NO:01 在投资行业一直有一个说法,靠交易盈利是所有赚钱方式中最难的一种,以至于有人戏谑称交易为投资领域的搬砖工作. 为了提升交易效率.挖掘潜在投资机会,量化交易伴随着信息技术的发展大行其道, ...
- JavaScript(三) 数据类型
数据类型 5+1种数据类型 5种 基础数据类型 Number String boolean null undefined 1种 复杂数据类型 object typeof 操作符 typeof 操作 ...
- python 中__setattr__, __getattr__,__getattribute__, __call__使用方法
object._getattr_(self, name) 拦截点号运算.当对未定义的属性名称和实例进行点号运算时,就会用属性名作为字符串调用这个方法.如果继承树可以找到该属性,则不调用此方法 实例in ...
- 【ASP.NET Core】准备工作:在 Windows 10 上配置 Linux 子系统
ASP.NET Core 其实比传统的 ASP.NET 要简单很多,而且也灵活很多,并且可以跨平台独立运行. 在 Windows 平台上,我们只要在安装 Visual Studio 的时候选择跨平台的 ...
- Python 集合 深浅copy
一,集合. 集合是无序的,不重复的数据集合,它里面的元素是可哈希的(不可变类型),但是集合本身是不可哈希(所以集合做不了字典的键)的.以下是集合最重要的两点: 去重,把一个列表变成集合,就自动去重了. ...
- 线程池内的异步线程创建UI控件,造成UI线程卡死无响应的问题分析
winform应用在使用一段时间后,切换到其他系统或者打开word.excel文档,再切换回winform应用时,系统有时出现不响应的现象.有时在锁屏后恢复桌面及应用时也发生此问题. 经微软支持确认, ...
- CTF---安全杂项入门第一题 丘比龙的最爱
丘比龙的最爱分值:10 来源: 2014HCTF 难度:易 参与人数:4498人 Get Flag:1366人 答题人数:1384人 解题通过率:99% 传说,丘比龙是丘比特的弟弟,丘比龙是一只小爱神 ...
- 解决JSONObject.fromObject数字为null时被转换为0
在使用JSONObject.fromObject的时候会遇到一种情况就是当对象的某一个Double型或Integer型的属性为空的时候,转JSON的时候会变成0.当一个布尔型的属性为空的时候,转JSO ...