使用GetUpdateRect和GetClipBox的体会

提高绘图效率以及避免闪屏 -- 双缓存,剪裁区 多数情况下窗口重绘的产生大多是因为窗口部分被遮挡或者窗口有滚动发生,改变的区域并不是整个图形而只有一小部分,这一部分需要改变的就是pDC中的裁剪区了。因为显示(往内存或者显存都叫显示)比绘图过程的计算要费时得多,有了裁剪区后显示的就只是应该显示的部分,大大提高了显示效率。但是这个裁剪区是MFC设置的,它已经为我们提高了显示效率,在进行复杂图形的绘制时如何进一步提高效率呢?那就只有去掉在裁剪区外的绘 阅读详情

个人在实际使用中的体会(基于WINCE),不具有权威性。
1、GetUpdateRect是获得需要刷新的无效区域,在调用了InvalidRect后可以用这个函数来获得无效区域,但是如果在之前调用了BeginPaint/EndPaint则取到的无效区域为空,这也是为什么要在WM_PAINT中调用BeginPaint的原因。在需要做局部刷新的时候这个函数很有用。
2、GetClipBox是获得裁剪区域大小,在很多时候最终效果是和GetUpdateRect相同的。但是有两点不太相同的
1)在InvalidateRect触发WM_PAINT后直接调用GetClipBox取得的可显示区域是和GetUpdateRect取得的无效区域是一样的
2)看GetClipBox的返回值(NULLREGION、SIMPLEREGION、COMPLEXREGION、RGN_ERROR)可以得知,第一种和第二种情况和GetUpdateRect相同(无效区域无或有),而第三种情况在需要进行复杂不规则图形局部刷新时很有用也更有效率,举个简单的例子:在屏幕左上角和右下角各有一个矩形,在InvalidRect后如果不调用UpdateWindow,则系统会取两个矩形的最大化区域(也就是全屏幕)并触发WM_PAINT,此时GetUpdateRect获得的无效区域也就是全屏无效区域,应用程序是不知道实际刷新区域的;GetClipBox尽管也是返回的全屏区域,但是在创建裁剪区(CreateRectRgnIndirect)并选入(SelectClipRgn)后,应用程序尽管也不知道实际刷新区域但最终的效果只会刷新两个角的矩形。关于这一点是在实际开发中得知的,这种情况下SelectClipRgn返回值是COMPLEXREGION,我猜测有可能在CreateRectRgnIndirect的时候系统内部查询了一下实际无效区域再创建并组合剪裁区(这个猜测不知道是不是对的),或者SelectClipRgn取得是CreateRectRgnIndirect区域和InvalidateRect区域的交集
补充:根据BitBlt在贴图的时候如果是有效区域则跳过来看,应该是GDI的优化机制,这个与region关系不大。所以提倡在WM_PAINT中用BeginPaint来画图的深层次目的就是为了利用GDI的优化机制进行无效区域管理及局部绘图提高效率,而用GetDC主动画图获得的是全屏无效区域,想局部刷新就必须用户自已来管理无效区域或使用裁剪区域功能。GetUpdateRect和GetUpdateRgn获得的数据应该是系统记录的,在BeginPaint后就被reset了

【MicroPython编程-ESP32篇:设备驱动】-BNO08X系列传感器驱动 BNO08X 系列(BNO085/BNO086)是一款系统级封装 (SiP),集成了三轴加速度计、三轴陀螺仪、磁力计以及运行 CEVA SH-2 固件的 32 位 ARM® Cortex™-M0+ 微控制器。SH-2 包含 MotionEngine™ 软件,该软件提供复杂的信号处理算法来处理传感器数据,并提供精确的实时 3D 姿态、航向、校准加速度和校准角速度,以及更高级的上下文输出。BNO08X 集成在一个 28 引脚 LGA 封装中,尺寸为 3.8mm x 5.2mm x 1.1mm。它兼容 Andro 阅读详情

相关推荐

minist手写数字的识别代码复现(pytorch 版本)

电脑系统:Windows 10语言环境:Python 3.8.18编译器:jupyter notebook深度学习环境:torch == 1.13.1+cu116显卡及显存: Tesla V100-PCIE-32GB卷积神经网络(Convolutional Neural Network,CNN或ConvNet)是一种 具有局部连接、权重共享等特性的深层前馈神经网络. 目前的卷积神经网络一般是由卷积层、汇聚层和全连接层交叉堆叠而成的 前馈神经网络。

2202_75521293的博客 2618

GetClipBox与GetClientRect

GetClipBox得到的是要刷新的区域,比如调用InvalidateRect(CRect rc);后,提到的就是rc GetClientRect得到的是客户区,这个一般随窗口大小变化 当点击滚动条上下箭头使之滚动后,GetClipBox得到的是需要更新重绘的部分;而GetClientRect得到的是整个客户区。

tianyu的专栏 - Linux site:blog.youkuaiyun.com/wishfly 4007

反激电源反馈环路设计:从TL431+PC817原理到动态补偿实战

本文深入解析了反激电源中由TL431和PC817构成的经典反馈环路设计。从静态工作点计算到动态补偿实战,详细阐述了如何通过Type II补偿网络优化环路稳定性与动态响应,并分享了应对光耦CTR离散性、布局噪声等常见调试难题的实用技巧,帮助工程师设计出高性能、高可靠的开关电源。

moon9的博客 699

5.6 矩形、区域和裁剪

摘录于《Windows程序(第5版,珍藏版).CHarles.Petzold 著》P161         Windows 还有其他几个使用 RECT(矩形)结构和区域的绘图函数。一个区域指的是屏幕上的一块空间,它由矩形、多边形和椭圆组合而成。 5.6.1  处理矩形         下面三个绘图函数需呀一个指向矩形结构的指针: FillRect (hdc, &rect, hBr

wilim 1366

避开爬虫坑:手把手教你合法获取百度地图POI边界数据(以学校为例)

本文详细介绍了如何合规获取百度地图POI边界数据的方法论,特别以学校为例。通过解析POI数据结构、合法使用百度地图API接口、优化请求策略以及数据处理技巧,帮助开发者和研究者在遵守平台规则的前提下高效获取地理信息。适用于学术研究、商业分析等多种场景,确保数据采集的合法性与准确性。

weixin_28683065的博客 394

从零开始,用Cadence Virtuoso手把手仿真一个1.5V LDO(附完整电路与仿真脚本)

本文详细介绍了如何使用Cadence Virtuoso从零开始仿真一个1.5V LDO,包括环境准备、电路导入、Testbench构建、核心仿真类型分析以及高级调试技巧。通过完整的电路与仿真脚本,帮助读者掌握LDO设计与仿真的关键技术,提升电路设计能力。

weixin_31309419的博客 445

VC++ 关于窗口刷新的几个函数InvalidateRect、UpdateWindow、RedrawWindow

在前面写了那么多自绘控件,有必要对这几个接口做下声明解释: 这几个接口都是对执行窗体重绘的消息,那么什么时候才会发生重绘窗口的消息?答案是:当窗体需要更新内容或是重绘外观背景的时候,应用程序通常会发送一条WM_PAINT消息,通知窗体进行重新绘制。 InvalidateRect(m_hWnd, lpRect, bErase): 强制系统进行重绘,但是不一定马上会进行重绘,仅仅是通过Pos...

老狼的专栏 2341

CloudCompare 二次开发(35)——提取多条直线

使用CloudCompare与PCL编程实现的多条空间直线的提取。

点云侠的博客 438

API全功略(API编程的详细介绍)

API全功略(API编程的详细介绍)什么是API 首先,有必要向大家讲一讲,什么是API。所谓API本来是为C和C++程序员写的。API说来说去,就是一种函数,他们包含在一个附加名为DLL的动态连接库文件中。用标准的定义来讲,API就是Windows的32位应用程序编程接口,是一系列很复杂的函数,消息和结构,它使编程人员可以用不同类型的编程语言编制出的运行在Windows95和Windows NT

April的学习全纪录 1万+

【AUTOSAR SystemServices】AUTOSAR CP中Watchdog Manager模块技术解析

本文深入解析了AUTOSAR中的Watchdog Manager模块实现。该模块通过多层次监督机制(Alive/Deadline/Logical Supervision)确保系统安全运行,具备动态模式切换和分级故障处理能力。 关键实现包括: 数据结构设计:包含监督实体状态结构体(实时状态维护)、监督配置结构体(支持模式切换)和全局状态信息(系统级监控) 核心流程优化:初始化采用事务性设计,检查点处理通过条件编译优化,主监控循环采用流水线式并行处理 监督机制实现:Alive监督采用滑动窗口算法,Deadlin

1038

【2024遥感应用组一等奖】基于时空融合和水量平衡法的若尔盖高原水源涵养功能评价

考虑到水源涵养的概念和尺度特征、数据的可获得性、模型的模拟精度等,构建了一种基于遥感、气象和水量平衡原理的草原湿地水源涵养评价方法,估算若尔盖湿地近23年(2000-2022)来的水源涵养量。若尔盖湿地是我国黄河源区的重要水源地,所以本研究以若尔盖湿地的水源涵养功能评估为科学问题,基于遥感数据、GIS数据等,利用水量平衡原理,发展计算简单、便捷、数据易获取的“水源涵养估算方法”,科学估算若尔盖湿地水源涵养服务量,探究其时空动态变化趋势及其影响因素;公式中,Z1和Z2为两个不同高度面的高度,u为摩擦速率;

JData_Engineer的博客 239

WINCE UI显示优化经验:使用GetUpdateRect和GetClipBox的体会

个人在实际使用中的体会(基于WINCE),不具有权威性。 1、GetUpdateRect是获得需要刷新的无效区域,在调用了InvalidRect后可以用这个函数来获得无效区域,但是如果在之前调用了BeginPaint/EndPaint则取到的无效区域为空,这也是为什么要在WM_PAINT中调用BeginPaint的原因。在需要做局部刷新的时候这个函数很有用。 2、GetClipBox是获得裁剪

WINC开发的专栏 3770

【PyTorch】CNN(一维卷积Conv1D)实现时间序列预测

本文介绍了一维卷积神经网络(Conv1D)在时间序列预测中的应用,展示了其基本原理及实现方式。通过合适的数据预处理和模型调参,Conv1D可以有效地捕捉时间序列数据中的模式,从而进行精准预测。

走向CTO的路上... 1172

【局部刷新】GetUpdateRect和GetClipBox 获取无效区域的区别

原文地址::http://blog.sina.com.cn/s/blog_4c0cb1c001018e23.html   相关网帖 1.请问 MFC中 GetUpdateRect()怎么获得无效矩形?----http://topic.youkuaiyun.com/u/20081211/22/0eac573c-f0e4-46fd-ab2f-4e07c058262c.html?seed=3194964&r=

xqhrs232的专栏 1656

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

【局部刷新】GetUpdateRect和GetClipBox 获取无效区域 区别

使用GetUpdateRect和GetClipBox的体会 分类:GUI 2010-11-20 14:18 2099人阅读 评论(2) 收藏 举报 个人在实际使用中的体会(基于WINCE),不具有权威性。 1、GetUpdateRect是获得需要刷新的无效区域,在调用...

小鱼菜鸟的博客 182

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

GetClipBox

GetClipBox得到的是需要更新重绘的部分;而GetClientRect得到的是整个客户区 

wangy275的专栏 955

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

MFC中窗口刷新函数详解

MFC中窗口刷新函数详解

自由的天空 5485

MFC中的Invalidate、OnDraw、OnPaint函数的作用及绘图概念

1.绘图概念 GDI绘图分为背景和前景两个画布的绘制,Invalidate()函数强制重绘制, Invalidate() 如果参数为true则在OnPaint函数对背景先进行绘制,再对前景进行绘制; 如果参数为false则在OnPaint函数对背景不绘制,只对前景进行绘制; 绘制前景方法: void xxx::OnPaint() { CPaintDC dc(this); } 绘制背景方法: BOOL xxx::OnEraseBkgnd(C...

一个早起的程序员 3855

UpdateData、Invalidate、InvalidateRect和UpdateWindow及RedrawWindow

Invalidate 在消息队列中加入一条WM_PAINT消息,其无效区为整个客户区。 窗口的客户区无效意味着需要重绘。例如,如果一个被其它窗口遮住的窗口变成了前台窗口,那么原来被遮住的部分就是无效的,需要重绘。 理论:这时Windows会在应用程序的消息队列中放置WM_PAINT消息。MFC为窗口类提供了WM_PAINT的消息处理函数OnPaint,OnPaint负责重绘...

dclutwoku16741537的博客 251

谈谈MFC for WindowsCE中的CDC::GetClipBox方法

最近在学习WinCE下的程序开发。想要用MFC来开发WinCE程序。不过手头只有分别将WinCE和MFC的书,没有结合起来讲的。只有自己把两本书参照着来看了。前两天给自己出了个题目作为练习。题目是写一个程序,以二进制的形式显示文件的内容。View类继承了CScrollView。在OnDraw方法中使用CDC::GetClipBox方法取得当前需要重绘的矩形区域,并据此计算需要重绘那几行。问题就出在

BirdGu的专栏 7005

GetClipBox()和SeletClipRgn()问题

由于项目需要,需要过滤掉一些区域,就是用了GetClipBox()和SelectClipRgn()函数来实现,其中碰到了一些问题。 1、调用GetClipBox()获得当前的剪切区,得到的是逻辑坐标。 CRect rcOldClip; pDC->GetClipBox(rcOldClip);   2、调用SelectClipRgn()设置过滤后的剪切区。 //CRect rcNewCli

dc11223344的专栏 2208

GetClipBox 在scrollview中使用注意事项

在OnDraw函数中使用pDC->GetClipBox()得到裁剪区大小时,在OnPrepareDC(CDC* pDC, CPrintInfo* pInfo) 函数中不应该同时设置:         pDC->SetViewportOrg(0,0); pDC->SetWindowOrg(0,0); 如果同时设置窗口和视口为0时,,在滑动运动后,当程序最小化后再切回来时,pDC->GetC

jiangdf的专栏 1965
上一篇: 在VS2005SP1下使用标准C的isspace可能会出问题及原因
下一篇: 获取SD卡序列号和厂商ID
alien75
博客等级 码龄25年 195粉丝 116原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值