异或线画法using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Text;using System.Windows.Forms;using System.Runtime.InteropServices;namespace XorLine{ public partial class Form1 : Form { public Form1() { InitializeComponent(); } [DllImport("Gdi32.dll")] static extern IntPtr CreatePen(int fnPenStyle, int width, int color); [DllImport("Gdi32.dll")] static extern int SetROP2(System.IntPtr hdc, int rop); [DllImport("Gdi32.dll")] static extern int MoveToEx(IntPtr hdc, int x, int y, IntPtr lppoint); [DllImport("Gdi32.dll")] static extern int LineTo(IntPtr hdc, int X, int Y); [DllImport("Gdi32.dll")] static extern IntPtr SelectObject(IntPtr hdc, IntPtr obj); private void button1_Click(object sender, EventArgs e) { Graphics grfx = base.CreateGraphics(); System.IntPtr hdc = grfx.GetHdc(); //interop and good old GDI System.IntPtr hpen = CreatePen(0, 5, System.Drawing.ColorTranslator.ToWin32(Color.White)); int rop = SetROP2(hdc, 5); IntPtr oldpen = SelectObject(hdc, hpen); MoveToEx(hdc, 20, 20, IntPtr.Zero); LineTo(hdc, 170 , 20); LineTo(hdc,170,170); LineTo(hdc, 20, 170); LineTo(hdc, 20, 20); SelectObject(hdc, oldpen); SetROP2(hdc, rop); grfx.ReleaseHdc(hdc); } private void button2_Click(object sender, EventArgs e) { Graphics grfx = base.CreateGraphics(); Rectangle theRect = this.ClientRectangle; theRect.Inflate(-this.Width / 4, -this.Height / 4); grfx.FillRectangle(new SolidBrush(Color.Blue), theRect); } }}
评论