Windows GDI - FillRect 与 MoveToEx 和 LineTo?

Windows GDI - FillRect vs MoveToEx & LineTo?

当阅读使用 GDI it is relatively common to see FillRect() 在 Windows 中画线的源代码时,尽管唯一的目的是画线,但仍被使用。但是绘制一条宽度值和填充矩形的线的最终产品非常相似,不是吗?

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

需要画线时,使用FillRect() or MoveToEx() and LineTo()哪个效率更高?

在最常见的情况下,对于完全水平和垂直的矩形,FillRect 将执行与 MoveToEx 和 LineTo 相同的操作。现在,GDI 和屏幕之间有很多间接层,性能差异几乎肯定不相关。

GDI 中的绘图操作通常取决于设备上下文 (DC) 的当前 "state"。使用当前 select 插入 DC 的笔绘制线条。笔决定颜色、样式(实线、虚线等)、粗细、端盖等

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

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