2012-06-27 170 views
1

我试图在检测到mousedown事件时在窗口的特定位置绘制一个椭圆。椭圆不保留绘制

椭圆绘制时没有任何问题,但绘制后立即消失。

我认为这与应用程序不断处理WM_PAINT消息有关,但应用程序不在每个绘制消息上绘制椭圆。

如何使椭圆保持绘制在窗口的特定坐标上?

private void rtbLogicCode_MouseDown(object sender, MouseEventArgs e) 
    { 
     Point p = new Point(e.X, e.Y); 
     if (p.X < 39 && p.Y < 817) 
     { 
      LinearGradientBrush lgb = new LinearGradientBrush(new Rectangle(0, p.Y, 15, 15), Color.LightPink, Color.Red, 45); 

      System.Drawing.Graphics formGraphics = rtbLogicCode.CreateGraphics(); 
      formGraphics.FillEllipse(lgb, 0, p.Y, 15, 15); 
      this.Invalidate(); 
      lgb.Dispose(); 
      formGraphics.Dispose(); 
     } 
     ... 
    } 

回答

3

通常的模式应该是WM_MOUSEDOWN处理程序只记录位置并使窗口无效。然后WM_PAINT处理程序检索信息并进行适当的绘制。