一 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控件的更多相关文章

  1. ListCtrl控件的使用

    list contrl控件的使用 .建立基于对话框的应用程序,布置界面,设置属性. 注意添加的是listctrl控件,不是listbox控件,在控件工具箱的倒数第五行list control控件. 属 ...

  2. duilib中ListCtrl控件的实现

    转载请说明出处,谢谢~~ 昨天在编程群里聊天,提到了ListCtrl,然后有网友找我,他需要做一个ListCtrl控件,我看过需求后接下了这个活.今天就把大致的思路和过程记录一下.首先看<任务书 ...

  3. VC/MFC ListCtrl 控件功能使用汇总(转)

    以下未经说明,listctrl默认view 风格为report 相关类及处理函数 MFC:CListCtrl类 SDK:以 “ListView_”开头的一些宏.如 ListView_InsertCol ...

  4. ListCtrl控件着色

    最近在写一款山寨的反病毒软件,大致功能已经实现,还有一些细小的环节需要细化. 其中,在界面编程中,就用到了给ListCtrl控件着色,查看了网上一些文章,终于实现了. 其实说白了,原理很简单,就是Li ...

  5. LISTCTRL控件方法

    以下未经说明,listctrl默认view风格为report --------------------------------------------------------------------- ...

  6. 在ListCtrl控件中设置自定义光标

    ::SetCursor(::LoadCursor   (::AfxGetInstanceHandle(),   MAKEINTRESOURCE(IDB_BMP_MOUSE))); void   CMy ...

  7. win32 listctrl控件右键菜单的实现

    HMENU Menu_list,Menu_all; POINT point; HINSTANCE hInstance;//下面代码放到BOOL WINAPI DialogProc下 case WM_C ...

  8. 自绘listCtrl控件选中该行高亮(模拟windows)

    CListCtrl的派生类CMyListCtrl的DrawItem()函数里添加代码 CDC *pDC = CDC::FromHandle(lpDrawItemStruct->hDC); if ...

  9. 解决ListCtrl控件第一列文字不能居中显示的问题/修改网格线

    把CListCtrl设置为Report风格,但是插入第一列的时候(InsertColumn)的时候会发现文字不能居中.即使使用了LVCFMT_CENTER,其他列都可以正常居中,但第一列仍然靠左显示. ...

随机推荐

  1. islider结合react的简单实用

    我用islider都是结合react来使用,主要运用在移动端,做首页轮播图,或者是手机图片预览,左右滑动 首先需要 npm install islider.js --save 让后在jsx文件头部引入 ...

  2. HDU 1002 A + B Problem II(高精度加法(C++/Java))

    A + B Problem II Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) ...

  3. LibreOJ NOI Round #1 Day 1 B. 失控的未来交通工具

    瞬间移动 官方题解 题意:一个带边权无向图,加边以及询问在 x,x+b,...,x+(c−1)bx,x+b,...,x+(c-1)bx,x+b,...,x+(c−1)b 这些数中,有多少存在一条与之模 ...

  4. 洛谷 P1972 [SDOI2009]HH的项链【莫队算法学习】

    P1972 [SDOI2009]HH的项链 题目背景 无 题目描述 HH 有一串由各种漂亮的贝壳组成的项链.HH 相信不同的贝壳会带来好运,所以每次散步完后,他都会随意取出一段贝壳,思考它们所表达的含 ...

  5. ACM讲座心得

  6. poj_2195Going Home(最小费用最大流)

    poj_2195Going Home(最小费用最大流) 标签: 最小费用最大流 题目链接 题意: 有n*m的矩阵,H表示这个点是一个房子,m表示这个点是一个人,现在每一个人需要走入一个房间,已经知道的 ...

  7. SG 函数 S-Nim

    http://poj.org/problem?id=2960 S-Nim Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 34 ...

  8. python学习之总结

    迭代器: def gen(): a = 100 yield a a = a * 8 yield a yield 1000 for i in gen(): print(i) 创建一个函数,循环体,yie ...

  9. SpringMVC框架学习笔记(5)——数据处理

    1.提交数据的处理 a)提交的域名称和参数名称一致 http://localhost:8080/foward/hello.do?name=zhangsan 处理方法 @RequestMapping(v ...

  10. C# delegate event func action 匿名方法 lambda表达式

    delegate event action func 匿名方法 lambda表达式 delegate类似c++的函数指针,但是是类型安全的,可以指向多个函数, public delegate void ...