VC GDI双缓冲绘图

news2025/1/9 2:34:31

VC GDI双缓冲绘图

  • VC GDI双缓冲绘图
    • 创建内存DC和内存图片,缺一不可
    • 最好是封装一下内存绘制
    • 绘制效果 关键是不闪烁
    • PS 重绘机制

VC GDI双缓冲绘图

双缓冲绘图,知道这个知识点,每次用的时候还得踩一遍坑,真是服,总结记录一下,下次抄~

创建内存DC和内存图片,缺一不可

创建的内存DC需要绘制到内存图片上,绘制完成以后再拷贝到内存DC,所有两者缺一不可。

void CImageView::OnDraw(CDC* pDC)
{
	// TODO: 在此添加专用代码和/或调用基类
	CRect rect;
	GetClientRect(&rect);
	CDC memDC;
	memDC.CreateCompatibleDC(pDC);
	CBitmap bitmap;
	bitmap.CreateCompatibleBitmap(pDC, rect.Width(), rect.Height());
	CBitmap* preBitmap = memDC.SelectObject(&bitmap);

	OnCompatibleDraw(&memDC);

	pDC->BitBlt(0, 0, rect.Width(), rect.Height(), &memDC, 0, 0, SRCCOPY);
	memDC.SelectObject(preBitmap);
	bitmap.DeleteObject();
	memDC.DeleteDC();
}

最好是封装一下内存绘制

void CImageView::OnCompatibleDraw(CDC * pDC)
{
	CMFCCompleteDoc* pDoc = (CMFCCompleteDoc*)GetDocument();
	if (pDoc != nullptr)
	{
		pDoc->m_UnitManager.OnDraw(pDC);
	}
}

绘制效果 关键是不闪烁

在这里插入图片描述

PS 重绘机制

由于是每次新建的内存DC和内存的图片,所以窗口失效可以选择不重新绘制,如果不是重新创建的内存DC和内存图片,则需要手动清空内存DC和内存图片。

问:需要每次重建内存DC和内存图片吗?
答:需要,因为设备DC随时会发生变化,例如窗口大小。如果需要不每次重建提升效率,则设备DC发生变化的所有地方需要重新创建内存DC和内存图片

void CMFCCompleteDoc::OnIdle()
{
	CDocument::OnIdle();

	CView* pView = GetActiveView();
	if (pView == nullptr)
	{
		return;
	}

	if (pView->IsKindOf(RUNTIME_CLASS(CImageView)))
	{
		CRect rect;
		pView->GetClientRect(&rect);
		pView->InvalidateRect(&rect, FALSE);
	}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/566575.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

BGP实验--联邦以及反射器

实验明细 实验拓扑实验要求实验内容 实验拓扑 实验要求 1.R2-R7每台路由器均存在一个环回接口用于建立邻居;同时还存在一个环回来代表连接用户的接口;最终这些连接用户的接口网络需要可以和R1/8的环回通讯 2.AS2网段地址为172.16.0.0/16,减少…

【开源项目】ShenYu网关中Disruptor的使用

模块封装 shenyu-disruptor定义了DisruptorProvider、DisruptorProviderManage、DataEvent、QueueConsumerFactory、DisrutporThreadFactory等一系列通用接口 该模块的搭建了一个disruptor的初始化框架, DisruptorProviderManage提供Disruptor的初始化,…

分布式事务的21种武器 - 4

在分布式系统中,事务的处理分布在不同组件、服务中,因此分布式事务的ACID保障面临着一些特殊难点。本系列文章介绍了21种分布式事务设计模式,并分析其实现原理和优缺点,在面对具体分布式事务问题时,可以选择合适的模式…

软件设计师数据结构速过

加法规则:多项相加,保留最高阶项,并将系数化为 1 乘法规则:多项相乘都保留,并将系数化为 1 加法乘法混合规则:先小括号再乘法规则最后加法规则 时间复杂度估算看最内层循环,如若没有循环和递归则…

终于!我们把 CEO 炒了,让 ChatGPT 出任 CEO

⚠️ FBI Warning:本文纯属作者自娱自乐,数字人的观点不代表 CEO 本人的观点,请大家不要上当受骗!! 哪个公司的 CEO 不想拥有一个自己的数字克隆? 想象🤔一下,如果 CEO 数字克隆上线…

【初识django】——django——如桃花来

目录索引 django引入:常见的web框架:下载问题:*下载Django之前确保工具不会发生版本问题*下载django:*检查是否下载成功:**注意事项:* 创建django项目:在cmd中创建:*整个命令流程:**…

React学习笔记六-refs

此文章是本人在学习React的时候,写下的学习笔记,在此纪录和分享。此为第六篇,主要介绍react中的refs。 目录 1.refs基本使用 1.1字符串类型ref小案例 2.回调形式的ref 2.1回调形式ref小案例 2.2回调ref中调用次数问题 3.createRef 3.…

SpringBoot 插件 spring-boot-maven-plugin 原理,以及SpringBoo工程部署的 jar 包瘦身实战

spring-boot-maven-plugin 我们直接使用 maven package (maven自带的package打包功能),打包Jar包的时候,不会将该项目所依赖的Jar包一起打进去,在使用java -jar命令启动项目时会报错,项目无法正常启动。这…

TOP RPA·脱普×实在丨日用品企业脱普签约实在智能,构建全域数据智能运营系统

近日,实在智能与脱普日用化学品(中国)有限公司(简称“脱普企业”)在脱普企业上海总部举行“全域数据智能运营”项目启动会,双方领导及项目组关键成员共同参会,就项目目标、实施进程、沟通机制等…

Spring Boot中使用Spring Data Elasticsearch访问Elasticsearch

Spring Boot中使用Spring Data Elasticsearch访问Elasticsearch Elasticsearch是一个分布式的全文搜索和分析引擎,它可以将海量数据进行快速的查询和聚合。Spring Data Elasticsearch是Spring Data家族中的一个成员,它提供了与Elasticsearch的集成&…

一起来学习怎样识别表格文件吧

你有没有经历过手头有一堆纸质表格,但是又不想手动输入数据的烦恼?现在,表格识别计数的出现,可以帮助你轻松解决这个问题。它通过拍照扫描,来自动提取表格中的信息,并将其转化为可编辑的电子文档。那么&…

c# 动态表达式

准备: 创建一个空项目,nuget查找并安装ExpressionEvaluator 示例: using ExpressionEvaluator; using System; 一、计算简单表达式 public string Test1() { return SimpleEval("0.1*(Math.Pow(10,2)20)"); …

AI小作文搞崩科大讯飞股价 科技“魔法”反噬科企

5月24日午后,A股公司科大讯飞的股价突然走出深V造型,闪崩8%。科大讯飞回应称,股价下跌系某生成式AI写作虚假小作文导致,谣传风险为不实消息。 网传的一篇“小作文”谣称“科大讯飞被曝采集用户隐私数据研究人工智能引发争议”&am…

Windows下编写的shell脚本无法在Linux上执行

这通常是由于回车换行符不兼容导致的。 出现无法执行,提示诸如“ 未预期的符号“$\r”附近有语法错误”,“syntax error near unexpected token in”之类的错误,可尝试此文方法。 1.查看shell脚本的换行符格式 vi/vim进入文件,…

2023年湖北建筑起重信号司索工报名流程是什么?个人可以报名吗?

2023年湖北建筑起重信号司索工报名流程是什么?个人可以报名吗? 建筑起重信号司索工是特种作业人员工种即是建设厅特种工。证书全国通用,两年需要年审一次,六年需要换一次证。报考有一定的条件和要求。搜一下启程别就知道啦。 湖北…

【Leetcode】697. 数组的度

[哈希表] Given a non-empty array of non-negative integers nums, the degree of this array is defined as the maximum frequency of any one of its elements. Your task is to find the smallest possible length of a (contiguous) subarray of nums, that has the sa…

20230525下载youtube的字幕的方法

20230525下载youtube的字幕的方法 百度:youtube 字幕 (英语自动生成)下载 【可以直接下载字幕!】 https://zhuanlan.zhihu.com/p/349506890?ivk_sa1025883i 下载YouTube油管字幕的2种方法 二.使用在线网站下载YouTube字幕文件 二&#xff0e…

【剧前爆米花--爪哇岛寻宝】TCP保证效率,应对特殊情况等相关机制

作者:困了电视剧 专栏:《JavaEE初阶》 文章分布:这是一篇关于网络编程的文章,在这篇文章中我会着重介绍TCP保证效率,应对特殊情况等相关机制,希望对你有所帮助! 目录 效率 批量传输 滑动窗口 …

【九章刷题录】C/C++:数组中重复的数字(JZ3)

精品题解 👉 九章刷题录👈 猛戳订阅 JZ3 - 数组中重复的数字 📜 目录: 「 法一 」暴力大法(BF) 「 法二 」排序 遍历 「 法三 」哈希集合 「 法四 」哈希无序集 「 法五 」原地哈希 「 法六 」Map …

北京筑龙作为软件服务商出席《国企阳光采购标准》研讨会

近日,由中国企业国有产权交易机构协会市场创新专业委员会主办、青岛产权交易所有限公司承办的《国企阳光采购标准》研讨会在青岛召开,该会议共有19家已开展采购业务的各地产权交易机构参加,北京筑龙作为软件服务商出席会议。 《国企阳光采购标…