CListCtrl大数据显示[通俗易懂]

CListCtrl大数据显示[通俗易懂]CListCtrl是个很方便的东西,但是当数据大到一个程度(比如说10万条数据),显示速度就会非常的慢。解决办法就是用虚拟列表。CListCtrl显示数据的原理是将需显示的所有数据拷贝在它内部的一块空间里,然后显示出来。一但数据量过大,拷贝的时间就会延长,显示速度当然也就非常慢了。而虚拟列表则不需要将显示数据拷贝到内部空间,它的做法是当需要显示某个数据时,才将数据拷入内部空间。看上去好像和普通CLi

大家好,又见面了,我是你们的朋友全栈君。

CListCtrl是个很方便的东西,但是当数据大到一个程度(比如说10万条数据),显示速度就会非常的慢。解决办法就是用虚拟列表。

CListCtrl显示数据的原理是将需显示的所有数据拷贝在它内部的一块空间里,然后显示出来。一但数据量过大,拷贝的时间就会延长,显示速度当然也就非常慢了。而虚拟列表则不需要将显示数据拷贝到内部空间,它的做法是当需要显示某个数据时,才将数据拷入内部空间。看上去好像和普通CListCtrl的做法相同,实则大不一样。因为列表一屏的数据,最多也就几百行。也就是说虚拟列表每次最多也就只需要拷贝几百行的数据,对现在计算机的速度而言,速度的延迟是完全可以忽略的。

好了,原理说到这里。接下来该说做怎么做了。

class CVirtaulListCtrl : public CListCtrl
{
DECLARE_DYNAMIC(CVirtaulListCtrl)
public:
    CVirtaulListCtrl();
    virtual ~CVirtaulListCtrl();
public:
//导入数据
    void ImportData(CStringArray *pDataArray)
    {
        m_pDataArray = pDataArray;
        SetItemCount(m_pDataArray->GetSize());
    }
protected:
    CStringArray *m_pDataArray;
protected:
DECLARE_MESSAGE_MAP()
public:
    afx_msg void OnLvnGetdispinfo(NMHDR *pNMHDR, LRESULT *pResult)
    {
        LV_DISPINFO* pDispInfo = (LV_DISPINFO*)pNMHDR;
        LV_ITEM* pItem= &(pDispInfo)->item;
        int  iItemIndex= pItem->iItem;  //行号
        int col = pItem->iSubItem;  //列号
        if(pItem->mask & LVIF_TEXT)
        {
            if(col == 0)
            {
                //序号
                char numberStr[10];
                itoa(iItemIndex+1, numberStr, 10);
                lstrcpyn(pItem->pszText, numberStr, pItem->cchTextMax);
            }
            else if(col == 1)
            {
                lstrcpyn(pItem->pszText, m_pDataArray->GetAt(iItemIndex), pItem->cchTextMax);
            }
        }
    }
};

上面一共只有两个函数。一个是ImportData,作用是导入需要显示的数据。里面只有两条语句,第一条为获取数据指针,第二条为设置列表长度(一共有多少条数据)。这个是自定义函数,可以自定义函数名和导入的数据结构。

第二个函数是OnLvnGetdispinfo。这个函数是事件函数,当列表中的一个单元格需显示的时候调用。

使用时,还需要将列表控件的“所有者数据”属性设为“true”。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/152513.html原文链接:https://javaforall.net

(0)
上一篇 2022年6月23日 上午6:16
下一篇 2022年6月23日 上午6:36


相关推荐

  • C# 互斥锁 Mutex

    C# 互斥锁 Mutex当两个或更多线程需要同时访问一个共享资源时,系统需要使用同步机制来确保一次只有一个线程使用该资源。Mutex 是同步基元,它只向一个线程授予对共享资源的独占访问权。如果一个线程获取了互斥体,则要获取该互斥体的第二个线程将被挂起,直到第一个线程释放该互斥体。privatestaticMutexmut=newMutex();两个线程访问资源需要互斥时,两个线程都要用互斥锁。

    2022年6月26日
    57
  • 大数据面试题(六)—-HBASE 面试题

    大数据面试题(六)—-HBASE 面试题版权声明:本文为CSDN博主「北京小辉」的原创文章,遵循CC4.0BY-SA版权协议,转载请附上原文出处链接及本声明。原文链接:https://blog.csdn.net/silentwolfyh/article/details/103864901———————————————————————————————————“无意中发现了一个巨牛的人工智能教程,忍不住分享一下给大家。教程不仅…

    2022年5月30日
    34
  • 讯飞星火 X1 升级,号称整体效果对标 OpenAI o1 和 DeepSeek R1

    讯飞星火 X1 升级,号称整体效果对标 OpenAI o1 和 DeepSeek R1

    2026年3月14日
    2
  • PetShop4架构与技术分析

    PetShop4架构与技术分析2006-4-1722:20:17(被阅读7246次)1.项目概述与架构分析微软刚推出了基于ASP.NET2.0下的PetShop4,该版本有了一个全新的用户界面。是研究ASP.NET2.0的好范例啊,大家都知道,一直以来,在.NET和Java之间…

    2022年10月17日
    5
  • 企业微信配置小程序

    企业微信配置小程序准备 1 注册企业微信服务商地址 https open work weixin com wwopen developer index2 开发好的小程序 已发布的 企业微信仅可关联已在微信小程序平台审核并发布的小程序 所关联的小程序的帐号主体必须与本企业微信的帐号主体一致配置小程序 1 进入企业微信管理后台关联小程序 在 应用管理 gt 小程序 中 点击 关联小程序 2 点击 开始关联 3 管理员账号使用微信扫码 在授权后的界面选择要授权的小程

    2026年3月17日
    2
  • PHP TCPDF导出支持中文的pdf

    PHP TCPDF导出支持中文的pdfPHP使用TCPDF导出支持中文的pdf一、下载https://github.com/tecnickcom/tcpdf下载TCPDF压缩包二、使用方法 require_once(‘./TCPDF/tcpdf.php’); $pdf=new\TCPDF(); $pdf->AddPage(); $html=”<p>helloworld你好世界</p>”; $pdf->WriteHtml(20,$html); //四种模式I输出

    2025年10月3日
    4

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

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