如何创建与纯色画笔颜色相同的笔?

how to create a pen that is the same color as that of a solid brush?

我想获取 SolidBrush 的颜色 (colorref) 以创建相同颜色的笔,仅使用 Windows API 函数(没有点网和类似的东西)使用C/C++/Asm/Delphi等

如果有帮助,这就是我想要完成的:我在可调整大小的 window.

中使用 PolyLine 绘制了一条曲线

每次 window 调整大小时让 Windows 清除背景会导致非常明显的闪烁。为了将闪烁减少到最低限度,我可以获得 Windows 用于清除 window (GetClassLongPr) 的背景画笔,并创建一个相同颜色的笔以仅使用该笔重绘曲线,有效地擦除它而不清除整个客户区(这是导致闪烁的原因。)当然,除非我找到一种方法从 GetClassLongPtr 返回的画笔句柄中获取颜色参考,否则我无法创建该笔。

我不知道如何创建一支颜色与实心画笔 windows 相同的笔,用于擦除客户区。

注意:我知道解决闪烁问题的另一种方法是创建一个剪切区域以仅擦除曲线,但是,区域处理比简单地用笔设置为重新绘制曲线要慢得多背景颜色。

说了这么多,问题是:如何创建一支与用于擦除 window 客户区的实心画笔颜色相同的笔?

谢谢。

您使用 GetObject() into a LOGBRUSH structure, then you use CreatePen() 获取实体画笔参数以创建笔。

然而,避免闪烁的想法是使用双缓冲:不要绘制到从 GetDC() 获得的 DC,而是绘制到内存 DC。不要使用WM_ERASEBKGND擦除背景,处理WM_ERASEBKGND和return非零不做任何事情,而是在WM_PAINT中擦除它。使用 CreateCompatibleDC() then use BitBlt() 创建内存 DC 以将您的绘图传输到实际 DC。

所有这一切,如果无论如何都使用 GDI,现在更喜欢 Direct2D。