我需要一点帮助来定义C#中的以下Windows GDI类型。我在C#中以byte[]
的形式获得数据,我需要以某种方式封送或在C#中将其转换为以下内容。请参阅my other question,因为我得到了Polyline的答案。这是类型:
META_CREATEPENINDIRECT
#include <windows.h>
HPEN32 CreatePenIndirect(const LOGPEN32 *pen);
typedef struct tagLOGPEN
{
UINT lopnStyle;
POINT lopnWidth;
COLORREF lopnColor;
} LOGPEN;
U16 Value 0 lopnStyle 1 lopnWidth 2, 3 lopnColor
lopnColor是笔的颜色,lopnWidth是笔的宽度,如果笔的宽度是> 1。 1但是lopnStyle不是实心的,那么lopnStyle会被忽略并设置为solid。
lopnStyle可以是
PS_SOLID
,PS_DASH
,PS_DOT
,PS_DASHDOT
,PS_DASHDOTDOT
,PS_NULL
,PS_INSIDEFRAME
之一,PS_USERSTYLE
,PS_ALTERNATE
。查看它们实际意义的来源。Theres还有一组标志和面具,可以在lopnStyle中找到,用于设置用笔绘制的线条的结束和连接样式,它们是
PS_STYLE_MASK
,PS_ENDCAP_ROUND
,{{1 }},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
答案 0 :(得分:0)
byte[] buffer;
int style = BitConverter.ToUInt16(buffer, 0);
int width = BitConverter.ToUInt16(buffer, 2);
var color = Color.FromArgb(buffer[4], buffer[5], buffer[6]);
var pen = new Pen(color, width)
{
DashStyle = ..., // set style
StartCap = ...,
EndCap = ...
};
(未测试的)