本文共 4782 字,大约阅读时间需要 15 分钟。
public partial class Form2 : Form
{ public Form2() { InitializeComponent(); }private void button1_Click(object sender, EventArgs e)
{ Task.Factory.StartNew(() => { Form form = new Form(); form.StartPosition = FormStartPosition.CenterScreen; form.Width = 500; form.Height = 500; Button button = new Button(); form.Controls.Add(button); button.Location = new Point(0, 0); button.Width = 50; button.Height = 20; button.Click += new EventHandler(button_Test_Click); form.ShowDialog(); //或 //Application.Run(form) // Application.DoEvents();唤醒窗体 //form.Show(); });} private void button_Test_Click(object sender, EventArgs e) { Thread.Sleep(10000); }
Bitmap bit=new Bitmap(800,500);
private void button2_Click(object sender, EventArgs e) { SetParameter(this.pictureBox1, bit, 20, 400, 250); DrawPosition(60, 60); }public void DrawPosition(int x,int y)
{ BufferedGraphicsContext current=BufferedGraphicsManager.Current; BufferedGraphics bg; bg=current.Allocate(_PictureBOx.CreateGraphics(),_PictureBOx.DisplayRectangle); Graphics g=bg.Graphics; g.FillRectangle(Brushes.Black, new Rectangle(0, 0, _PictureBOx.Width, _PictureBOx.Height)); g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias; //标准坐标图 Pen pen=new Pen(Color.Red,1); g.DrawLine(pen, new Point(GetX(0), GetY(_CenterY)), new Point(GetX(_bitMap.Width), GetY(_CenterY))); for (int i = 0; i < 10;i++ )//横线 { g.DrawLine(pen ,new Point(GetX(i*_CenterX/10+_CenterX),GetY(_CenterY)),new Point(GetX(i*_CenterX/10+_CenterX),GetY(_CenterY)-5)); g.DrawLine(pen, new Point(GetX(_CenterX-i * _CenterX / 10), GetY(_CenterY)), new Point(GetX(_CenterX - i * _CenterX / 10), GetY(_CenterY) - 5)); }g.DrawLine(pen, new Point(GetX(_CenterX), GetY(0)), new Point(GetX(_CenterX), GetY(_bitMap.Height)));
for (int i = 0; i < 10; i++)//纵线
{ g.DrawLine(pen, new Point(GetX(_CenterX), GetY(_CenterY + i * _CenterY / 10)), new Point(GetX(_CenterX) + 5, GetY(_CenterY+i * _CenterY / 10))); g.DrawLine(pen, new Point(GetX(_CenterX), GetY(_CenterY - i * _CenterY / 10)), new Point(GetX(_CenterX) + 5, GetY(_CenterY - i * _CenterY / 10))); } int elliValue = _CenterX / 4; int pad = 29; int coefficient = 0; for(int i=0;i<3;i++)//圆 { coefficient = Convert.ToInt32(pad / 2*i); g.DrawEllipse(pen, new Rectangle(GetX(_CenterX - elliValue * i) + coefficient, GetY(_CenterY - elliValue * i) + coefficient, elliValue * i - coefficient, elliValue * i - coefficient)); }int tempWidth = 3;
int tempOffset = 25; g.DrawLine(pen, new Point(GetX(_CenterX) - tempWidth, GetY(_CenterY) - tempWidth), new Point(GetX(_CenterX) - tempWidth, GetY(_CenterY) - tempOffset));//纵上左 g.DrawLine(pen, new Point(GetX(_CenterX) - tempWidth, GetY(_CenterY) + tempWidth), new Point(GetX(_CenterX) - tempWidth, GetY(_CenterY) + tempOffset));//纵下左 g.DrawLine(pen, new Point(GetX(_CenterX) + tempWidth, GetY(_CenterY) - tempWidth), new Point(GetX(_CenterX) + tempWidth, GetY(_CenterY) - tempOffset));//纵上右 g.DrawLine(pen, new Point(GetX(_CenterX) + tempWidth, GetY(_CenterY) + tempWidth), new Point(GetX(_CenterX) + tempWidth, GetY(_CenterY) + tempOffset));//纵下右g.DrawLine(pen, new Point(GetX(_CenterX) - tempWidth, GetY(_CenterY) - tempWidth), new Point(GetX(_CenterX) - tempOffset, GetY(_CenterY) - tempWidth));//横上左
g.DrawLine(pen, new Point(GetX(_CenterX) - tempWidth, GetY(_CenterY) + tempWidth), new Point(GetX(_CenterX) - tempOffset, GetY(_CenterY) + tempWidth));//横下左 g.DrawLine(pen, new Point(GetX(_CenterX) + tempWidth, GetY(_CenterY) - tempWidth), new Point(GetX(_CenterX) + tempOffset, GetY(_CenterY) - tempWidth));//横上右 g.DrawLine(pen, new Point(GetX(_CenterX) + tempWidth, GetY(_CenterY) + tempWidth), new Point(GetX(_CenterX) + tempOffset, GetY(_CenterY) + tempWidth));//横下右 //实时中心 Pen pen2=new Pen(Color.Green,1); g.DrawEllipse(pen2, new Rectangle(GetX(x) - 5, GetY(y) - 5, 10, 10));//画中心点 g.FillEllipse(Brushes.Green , new Rectangle(GetX(x) - 5, GetY(y) - 5, 10, 10)); g.DrawLine(pen2, new Point(GetX(x), GetY(y) - 20), new Point(GetX(x),GetY(y)+20)); g.DrawLine(pen2, new Point(GetX(x)-20, GetY(y) ), new Point(GetX(x)+20, GetY(y))); bg.Render(); bg.Dispose(); } int _Margin=20; int _CenterX=400; int _CenterY=250; PictureBox _PictureBOx; Bitmap _bitMap; public void SetParameter(PictureBox pictureBOx,Bitmap bitmap,int margin, int centerX, int centerY) { _Margin = margin; _CenterX = centerX; _CenterY = centerY; _PictureBOx = pictureBOx; _bitMap = bitmap; } public int GetX(double x) { x = (x / _bitMap.Width) * (_PictureBOx.Width - 2 * _Margin) + _Margin; return Convert.ToInt32(x);}
public int GetY(double y) { y = (y / _bitMap.Height) * (_PictureBOx.Height - 2 * _Margin) + _Margin; return Convert.ToInt32(y);}
private void button3_Click(object sender, EventArgs e)
{ DrawPosition(Convert.ToInt32(textBox1.Text), Convert.ToInt32(textBox2.Text)); }}
转载地址:http://irows.baihongyu.com/