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条消息的处理过程中有效。
我想得到 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条消息的处理过程中有效。