GDI : 从 HGDIOBJ 或 HPEN 获取 LOGPEN

GDI : Get LOGPEN from HGDIOBJ or HPEN

我想得到 LOGPEN 当前使用的结构 HGDIOBJ(实际上是 HPEN).让我们假设我们有这样的东西:

CPen ColoredPen;
ColoredPen.Create(...);
...
HGDIOBJ PriorPen = SelectObject(PaintingDC, ColoredPen);

现在我需要从 PriorPen 获取 LOGPEN 结构。我尝试了两种方式:

1. LOGPEN LogPen;
CPen* pPen = CPen::FromHandle((HPEN)PriorPen);
pPen->GetLogPen(&LogPen);

2. LOGPEN LogPen;
GetObject(PriorPen, sizeof(LogPen), &LogPen);

None 其中的

None 给了我一个正确的 LOGPEN 结构对象,因为所有字段都是 0。我还尝试为实际的 CPen 获取 LOGPEN,它完美地工作:

ColoredPen.GetLogPen(&LogPen);

但我只需要使用 HPEN。所以我的问题是如何从 HPEN 获取 LOGPEN?

您可以执行以下操作:

LOGPEN LogPen;     
CPen* pTempPen = CPen::FromHandle(hPen);
pTempPen->GetLogPen(&LogPen);

请注意,此临时 CPen 对象仅在下一次应用程序在其事件循环中有空闲时间之前有效,此时所有临时图形对象都将被删除。也就是说,临时对象只在一条window条消息的处理过程中有效。