C#异或画图的问题,高手帮忙解决下!!
小弟现在要在一个背景为黑色的form上点击鼠标,并以点击处为中心画一个十字型的图,也就是两条直线交叉,并且改form每隔10秒刷新一次,请问各位高手,怎么才能实现这样的异或画图啊?
------解决方案--------------------private void pictureBox1_MouseDown(object sender, MouseEventArgs e) 
         { 
             if (isDrawPt & e.Button == MouseButtons.Left) // 画点 
             { 
                 myPoint.X = e.X; 
                 myPoint.Y = e.Y; 
                 this.Capture = true; // 指示控件是否已俘获鼠标   
                 //画圆 
                 Graphics tempP = Graphics.FromHdc(MyWindowsAPI.GetWindowDC(pictureBox1.Handle)); 
                 Rectangle clipRect = new Rectangle(0, 0, ClientSize.Width, ClientSize.Height); 
                 DrawEllipseRectangle(new PaintEventArgs(tempP, clipRect)); 
                 tempP.Dispose();                   
                 //保存到xml中 
                 SavePointXml(myPoint.X, myPoint.Y, myPointRads);   
                 //添加到内存中,方便最快的读取 
                 pointAlSave.Add(myPoint.X); // 保存到数组中 
                 pointAlSave.Add(myPoint.Y); 
                 pointAlSave.Add(myPointRads);   
             } 
 }   
 这是画圆,画线自己计算一下坐标和半径,刷新我不会。 
 一定要异或线? 
                 p1 = PointToScreen(startP); 
                 p2 = PointToScreen(lastP); 
                 ControlPaint.DrawReversibleLine(p1, p2, Color.Black);
------解决方案--------------------GDI+中不能异或画图,还得用GDI的API函数~   
 此言不差,不过如果是控件上,.net 2.0里已经提供了异或笔绘制方法: 
 ControlPaint.DrawReversibleLine可以在窗体上异或绘制
------解决方案--------------------Invalidate就不要用了。 
 Invalidate是使区域无效,但无效区域是要等到处理WM_PAINT的时候才去绘制的。如果你程序里这样作: 
 Invalidate(); 
 绘图   
 这样你绘图完,系统才返回处理消息循环,这个时候你执行了invalidate,又会调用OnPaint,刚绘制的就都刷没了。
------解决方案--------------------邮件已发送。BTW,我也是刚学习GDI+的,所以代码也存在问题,不过在我的机子运行还正常。
------解决方案--------------------如果是刷新带来的问题,可以这样 
 Bitmap bit; 
 private void DrwaCross(Point p,int length,Color LineColor) 
 { 
 Graphics g =Graphics.FormImage(bit); 
 Pen pen = new Pen(LineColor); 
 g.DrawLine(pen,p.X-length,p.Y,p.X+length,p.Y); 
 g.DrawLine(pen,p.X,p.Y-length,p.X,p.Y+length); 
 pen.Dispose(); 
 g.Dispose(); 
 this.Refesh(); 
 } 
 private void Form1_Load(object sender, System.EventArgs e ) 
 { 
 bit = New Bitmap(1024, 768); 
 Graphics g =Graphics.FormImage(bit); 
 g.Clear(Color.Black); 
 g.Dispose(); 
 } 
 private void Form1_Click(object sender, System.EventArgs e ) 
 { 
 DrwaCross(this.PointToClient(this.MousePosition),5,Color.Red) 
 } 
 protected override void OnPaintBackground(System.Windows.Forms.PaintEventArgs pevent){ 
 pevent.Graphics.DrawImage(bit, 0, 0); 
 }