ListCtrl控件[建议收藏]

一CListCtrl类型LVS_EDITLABELSLVS_OWNERDRAWFIXEDLVS_REPORTLVS_SHOWSELALWAYSLVS_SINGLESELLVS_SMALL

大家好,又见面了,我是全栈君,今天给大家准备了Idea注册码。

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(20,20,300,300), 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(16,16,ILC_COLOR32|ILC_MASK,4,4);
m_ImageList.Add(&bmp1, RGB(255,255,255));
m_ImageList.Add(&bmp2,RGB(255,255,255));
pListCtrl->SetImageList(&m_ImageList, LVSIL_SMALL);

  (4)插入列,行

pListCtrl->InsertColumn(0, "学号",LVCFMT_LEFT, 100);
pListCtrl->InsertColumn(1, "姓名",LVCFMT_LEFT,100);
pListCtrl->InsertColumn(2, "成绩",LVCFMT_LEFT,100);
// 方法1
pListCtrl->InsertItem(0, "1", 0);
pListCtrl->SetItemText(0,1,"张三");
pListCtrl->SetItemText(0,2,"100");
方法2
{
    LV_ITEM lvItem = {0};
    lvItem.mask = LVIF_TEXT|LVIF_IMAGE|LVIF_PARAM;
    lvItem.iItem = 1;
    lvItem.iSubItem = 0;
    lvItem.iImage = 1;
    lvItem.lParam = (LPARAM)0;
    lvItem.pszText="1";
    pListCtrl->InsertItem(&lvItem);
}
{
    LV_ITEM lvItem = {0};
    lvItem.mask = LVIF_TEXT;
    lvItem.iItem = 1;
    lvItem.iSubItem = 1;
    lvItem.lParam = 1;
    lvItem.pszText="张三";
    pListCtrl->SetItem(&lvItem);
}
{
    LV_ITEM lvItem = {0};
     lvItem.mask = LVIF_TEXT|LVIF_IMAGE;
    lvItem.iItem = 1;
    lvItem.iSubItem = 2;
    lvItem.iImage = 0;          // 特别测试该位置的iImage无效
    lvItem.pszText="100";
    pListCtrl->SetItem(&lvItem);
}  

三 自绘ListCtrl控件
  效果图

  ListCtrl控件[建议收藏]

  代码实现

ListCtrl控件[建议收藏]
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);
};

View Code

ListCtrl控件[建议收藏]
ListCtrl控件[建议收藏]

// 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(222,33,33)); dc.SetTextColor(GetSysColor(COLOR_WINDOWTEXT)); } int nRow = lpDrawItemStruct->itemID; CHeaderCtrl *pHeadCtrl = GetHeaderCtrl(); int nColCount = pHeadCtrl->GetItemCount(); CRect rcCell; // 注意单元格rcCell的处理 for (int nCol = 0;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 += 18; } // 文字  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 = 0; hi.iImage = k; k = !k; int nColCount = pHeadCtrl->GetItemCount(); for (int i = 0; i < nColCount; i ++) { if (i == nCol) hi.fmt |= HDF_IMAGE; else hi.fmt &= ~HDF_IMAGE; pHeadCtrl->SetItem(i, &hi); } *pResult = 0; } 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 = 0; } 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 (3==nRow&&1==nCol) { CEdit *pEdit = new CEdit; pEdit->Create(WS_CHILD|WS_VISIBLE|WS_TABSTOP|ES_LEFT, rcCell, this, IDC_ADDEDIT); } *pResult = 0; }

View Code

 

  

  

 

 

  

  

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/120232.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • PyTorch中的转置卷积详解——全网最细

    PyTorch中的转置卷积详解——全网最细前言转置卷积,学名transposedconvolution,在tf和torch里都叫这个。有时在论文里可以看到别人叫它deconvolution(反卷积),但这个名词不合适。因为转置卷积并非directconvolution的逆运算(reverse),并不能还原出原张量。只是从形状上看,其结果的形状等同于逆运算。写这篇文章还是因为网上介绍转置卷积的博客,都讲不清楚,我看了半天还是云里雾里。只能自己手动来一篇了。一、基本运算——错位扫描定义本文中,我们将平时用到的普通卷积,称为dir

  • axios实现跨域三种方法_vue跨域配置

    axios实现跨域三种方法_vue跨域配置axios地址

  • tasklist详解

    tasklist详解TASKLIST[/Ssystem[/Uusername[/P[password]]]]     [/M[module]|/SVC|/V][/FIfilter][/FOformat][/NH]描述:  该工具显示在本地或远程机器上当前运行的进程列表。参数列表:  /S  system     指定连

  • javascript实现一个自制网页音乐播放器

    javascript实现一个自制网页音乐播放器序接触简书也有一段日子了,这中间的时光还是比较轻松加愉快的,那种可以和他人分享知识的欣喜和愉悦的确是非常棒。我一向都是觉得专心写自己的文就可以了,不会总是纠结有多少人在看,有多少点击等等。用心写好自己的文,体会那种分享的快乐,就可以了。之前写的《js常用方法和一些封装》系列暂且告一段落,接下来,我会通过各种案例,来分享javascript的各种技巧,所以最终将这个系列的名称定为:《从案例中学习

  • android120 zhihuibeijing 开机页面[通俗易懂]

    android120 zhihuibeijing 开机页面

  • 根据两点经纬度计算距离

    根据两点经纬度计算距离在实际应用当中,一般是通过一个个体的编码来查找该编码对应的地区中心的经纬度,然后再根据这些经纬度来计算彼此的距离,从而估算出某些群体之间的大致距离范围(比如酒店旅客的分布范围-各个旅客的邮政编码对应的经纬度和酒店的经纬度所计算的距离范围-等等)。用GPS测出两个点的经纬度后,如何计算这两个点之间的距离呢?设两点A、B的经、纬度分别为(jA,wA)(jB,wB),则半径为

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号