CreatePen (gdi32)
Last changed: -50.32.25.5

.
Summary

C# Signature:

[DllImport("gdi32.dll")]
static extern IntPtr CreatePen(int fnPenStyle, int nWidth, uint crColor);

The first argument specifies a pen style defined in the header. A value from enum PenStyle below can be used to fake the defined value.

[DllImport("gdi32.dll")]
static extern IntPtr CreatePen(PenStyle fnPenStyle, int nWidth, uint crColor);

User-Defined Types:

public enum PenStyle

{

    PS_SOLID        = 0, //The pen is solid.
    PS_DASH         = 1, //The pen is dashed.
    PS_DOT          = 2, //The pen is dotted.
    PS_DASHDOT      = 3, //The pen has alternating dashes and dots.
    PS_DASHDOTDOT       = 4, //The pen has alternating dashes and double dots.
    PS_NULL         = 5, //The pen is invisible.
    PS_INSIDEFRAME      = 6,// Normally when the edge is drawn, it’s centred on the outer edge meaning that half the width of the pen is drawn
            // outside the shape’s edge, half is inside the shape’s edge. When PS_INSIDEFRAME is specified the edge is drawn
            //completely inside the outer edge of the shape.
    PS_USERSTYLE    = 7,
    PS_ALTERNATE    = 8,
    PS_STYLE_MASK       = 0x0000000F,

    PS_ENDCAP_ROUND     = 0x00000000,
    PS_ENDCAP_SQUARE    = 0x00000100,
    PS_ENDCAP_FLAT      = 0x00000200,
    PS_ENDCAP_MASK      = 0x00000F00,

    PS_JOIN_ROUND       = 0x00000000,
    PS_JOIN_BEVEL       = 0x00001000,
    PS_JOIN_MITER       = 0x00002000,
    PS_JOIN_MASK    = 0x0000F000,

    PS_COSMETIC     = 0x00000000,
    PS_GEOMETRIC    = 0x00010000,
    PS_TYPE_MASK    = 0x000F0000

};

Notes:

None.

Tips & Tricks:

Please add some!

Sample Code:

// create a bitmap and get a pointer suitable for GDI

Bitmap maskImage = new Bitmap (width, height);

Graphics maskg = Graphics.FromImage(maskImage);

IntPtr maskHbitmap = maskImage.GetHbitmap();

void PaintLine3(IntPtr hbitmap, Point start, Point end, bool erase)

{

    IntPtr pTarget = maskg.GetHdc();
    IntPtr pDC = CreateCompatibleDC(pTarget);
    IntPtr pOrig = SelectObject(pDC, hbitmap);

    Color penColor = Color.Blue;
    int penWidth = 20;

    IntPtr pen = CreatePen(PenStyle.PS_SOLID | PenStyle.PS_GEOMETRIC | PenStyle.PS_ENDCAP_ROUND, penWidth, (uint)ColorTranslator.ToWin32(penColor));

    // select the pen into the device context
    IntPtr oldpen = SelectObject(pDC, pen);

    MoveToEx(pDC, start.X, start.Y, IntPtr.Zero);
    LineTo(pDC, end.X, end.Y);

    // select the old pen back
    DeleteObject(SelectObject(pDC, oldpen));
    SelectObject(pDC, pOrig);
    maskg.ReleaseHdc();

}

Alternative Managed API:

Do you know one? Please contribute it!

Documentation
CreatePen on MSDN