首页 > 解决方案 > Windows GDI - FillRect vs MoveToEx & LineTo?

问题描述

当阅读使用GDI在 Windows 中画线的源代码时,尽管唯一的目的是画线,但使用FillRect()是相对常见的。但是绘制一条具有宽度值的线和一个填充的矩形的最终产品非常相似,不是吗?

FillRect() 是 1 个函数调用,使用 MoveToEx 和 LineTo 需要 2

当需要画线时,使用FillRect()MoveToEx( ) 和LineTo()哪个更有效?

标签: windowsgdi

解决方案


在最常见的情况下,FillRect 将与 MoveToEx 和 LineTo 执行相同的操作,以获得完美的水平和垂直矩形。如今,GDI 和屏幕之间有太多的间接层,以至于性能差异几乎可以肯定是无关紧要的。

GDI 中的绘图操作通常取决于设备上下文 (DC) 的当前“状态”。使用当前选择到 DC 中的任何笔来绘制线条。笔决定颜色、样式(实线、虚线等)、粗细、端盖等。

然而,FillRect 并不依赖于大部分 DC 状态。所有绘图图元都依赖于映射模式和剪切区域,但与线条不同的是,FillRect 甚至不依赖于选定的画笔,因为您可以在调用中提供一个权限。

更改状态(选择哪些对象进入 DC)可能需要做很多工作。如果你知道你想要一条 2 像素粗的蓝色水平线,那么使用 FillRect 比先创建一支笔,将它选择到 DC,画线,选择笔,然后决定如何管理那支笔的生命周期(什么时候删除它?)。如果绘图的其余部分是一堆带有圆形端盖的黄色虚线,则不必保持切换状态可以使代码更简单。


推荐阅读