public static void DrawRectangle(Graphics dc, PenStyles penStyle, int penWidth, Color col,
                                         int X1, int Y1, int X2, int Y2)
        {
            // Extract the Win32 HDC from the Graphics object supplied.
            IntPtr hdc = dc.GetHdc();

            // Create a pen.
            IntPtr gdiPen = GDI.CreatePen(penStyle, penWidth, GDI.RGB(col.R, col.G, col.B));

            GDI.SetROP2(hdc, drawingMode.R2_XORPEN);
            GDI.SetBkMode(hdc, TRANSPARENT);

            // Set the ROP cdrawint mode to XOR.
            GDI.SetROP2(hdc, drawingMode.R2_XORPEN);

            // Select the pen into the device context.
            IntPtr oldPen = GDI.SelectObject(hdc, gdiPen);

            // Create a stock NULL_BRUSH brush and select it into the device
            // context so that the rectangle isn't filled.
            IntPtr oldBrush = GDI.SelectObject(hdc, GDI.GetStockObject(NULL_BRUSH));

            // Now XOR the hollow rectangle on the Graphics object with
            // a dotted outline.
            GDI.Rectangle(hdc, X1, Y1, X2, Y2);

            // Put the old stuff back where it was.
            GDI.SelectObject(hdc, oldBrush);             // no need to delete a stock object
            GDI.SelectObject(hdc, oldPen);
            GDI.DeleteObject(gdiPen);                    // but we do need to delete the pen

            // Return the device context to Windows.
            dc.ReleaseHdc(hdc);
        }
        public static void DrawLine(PenStyles penStyle, int penWidth, Color col,
                                    Graphics grp, int X1, int Y1, int X2, int Y2)
        {
            // Extract the Win32 HDC from the Graphics object supplied.
            IntPtr hdc = grp.GetHdc();

            // Create a pen.
            IntPtr gdiPen = GDI.CreatePen(penStyle, penWidth, GDI.RGB(col.R, col.G, col.B));

            GDI.SetROP2(hdc, drawingMode.R2_XORPEN);
            GDI.SetBkMode(hdc, TRANSPARENT);

            // Set the ROP cdrawint mode to XOR.
            GDI.SetROP2(hdc, drawingMode.R2_XORPEN);

            // Select the pen into the device context.
            IntPtr oldPen = GDI.SelectObject(hdc, gdiPen);

            // Draw the line.
            GDI.MoveToEx(hdc, X1, Y1, 0);
            GDI.LineTo(hdc, X2, Y2);

            // Put the old stuff back where it was.
            GDI.SelectObject(hdc, oldPen);
            GDI.DeleteObject(gdiPen);

            // Return the device context to Windows.
            grp.ReleaseHdc(hdc);
        }