在 C# 中定义以下 Windows GDI 类型时,我需要一点帮助。我byte[]
在 C# 中有 a 形式的数据,我需要以某种方式在 C# 中将其编组或强制转换为以下形式。请参阅我的另一个问题,因为我得到了折线的答案。这是类型:
姓名
META_CREATEPENINDIRECT
最近的 API 调用
#include <windows.h>
HPEN32 CreatePenIndirect(const LOGPEN32 *pen);
typedef struct tagLOGPEN
{
UINT lopnStyle;
POINT lopnWidth;
COLORREF lopnColor;
} LOGPEN;
描述
U16 值 0 洛普风格 1 低宽 2, 3 lopnColor
lopnColor 是笔的颜色, lopnWidth 是笔的宽度,如果笔的宽度 > 1 但 lopnStyle 不是solid,那么 lopnStyle 被忽略并设置为solid。
lopnStyle 可以是
PS_SOLID
,PS_DASH
,PS_DOT
,PS_DASHDOT
,PS_DASHDOTDOT
,PS_NULL
,PS_INSIDEFRAME
,PS_USERSTYLE
,之一PS_ALTERNATE
。查看他们实际意思的来源。还有一组标志和掩码可以在 lopnStyle 中找到,以及设置用笔绘制的线条的结束和连接样式,它们是
PS_STYLE_MASK
,PS_ENDCAP_ROUND
,PS_ENDCAP_SQUARE
,PS_ENDCAP_FLAT
,PS_ENDCAP_MASK
,PS_JOIN_ROUND
,PS_JOIN_BEVEL
,PS_JOIN_MITER
,PS_JOIN_MASK
,PS_COSMETIC
,PS_GEOMETRIC
,PS_TYPE_MASK
, 再次查看源代码弄清楚这些。
更新:这是迄今为止我能做到的最接近:
fixed (byte* b = dataArray)
{
byte* ptr = (byte*)b;
// Get style
l_nStyle = (ushort)*(ptr);
++ptr;
// Get width
l_nWidth = (ushort)*(++ptr);
++ptr;
// skip one ushort
++ptr; ++ptr;
// Get RGB colors
l_nColorR = (ushort)*(++ptr);
l_nColorG = (ushort)*(++ptr);
l_nColorB = (ushort)*(++ptr);
}