我用GDI+(C#)语言编了个程序,单击按钮后出来个图形,然后鼠标可以拖动(已实现),但当第二次单击鼠标出来图形并拖动后,第一个图形就没有了。请问如何才能使前面的图形不消失?先谢谢各位了!我是个初学者。

解决方案 »

  1.   

    可不可以先定义一个bitmap的全局变量g_bmp,先在g_bmp图像上画,然后在在Pain函数中,复制g_bmp,把复制得到的文件贴到界面上?
      

  2.   

    GDI中,你不添加一个BITMAP到CD中,CD是没有的。当你第2次点击鼠标的时候,你的程序中,肯定是加载第2张图片并显示,没错吧,那么第一张图片呢??首先你要搞清楚一点,Windows显示图片的变化是要刷新的,如果你刷新了,那么你就必须得重绘刷新的无效区域。在你的例子中,无效区域应该是整个Dialog的Client区域,那么当你在画第2张图片的时候,第一张图片你同样得画上去,才会显示两张图片,因为你在画第2张图片的时候,第1张图片没有再加载了,被屏幕刷掉了。
      

  3.   

    全局变量:Bitmap originbmp = new Bitmap(400,400);在点击按钮的时候
    Graphics gs = Graphics.FromImage(originbmp);
    然后在这个gs画布上画,画完之后this.Invalidate();Form中有一个事件是Paint,在这个事件中
    Bitmap DesBmp = (Bitmap)originbmp.Clone();
    Graphics gs = this.CreateGraphics();
    gs.DrawImage(DesBmp, new Point(200, 50));大体就是这个意思吧
      

  4.   

    全局变量:Bitmap originbmp = new Bitmap(400,400);在点击按钮的时候
    Graphics gs = Graphics.FromImage(originbmp);
    然后在这个gs画布上画,画完之后this.Invalidate();Form中有一个事件是Paint,在这个事件中
    Bitmap DesBmp = (Bitmap)originbmp.Clone();
    Graphics gs = this.CreateGraphics();
    gs.DrawImage(DesBmp, new Point(200, 50));大体就是这个意思吧
      

  5.   

    我觉得你不如定义一个数组,点击按钮时就向数组新增一条数组。
    然后在GDI+在OnPaint里循环绘出每个对象,要知道,GDI+对象在OnPaint不停的读取的(你调试一下就知道),
      

  6.   

    GDI中,你不添加一个BITMAP到CD中,CD是没有的。 当你第2次点击鼠标的时候,你的程序中,肯定是加载第2张图片并显示,没错吧,那么第一张图片呢?? 首先你要搞清楚一点,Windows显示图片的变化是要刷新的,如果你刷新了,那么你就必须得重绘刷新的无效区域。在你的例子中,无效区域应该是整个Dialog的Client区域,那么当你在画第2张图片的时候,第一张图片你同样得画上去,才会显示两张图片,因为你在画第2张图片的时候,第1张图片没有再加载了,被屏幕刷掉了。
      

  7.   

     protected override void OnPaint(PaintEventArgs e)
    {
       //绘制图片方法
    }
      

  8.   

    矢量么?那就定义一堆东西保存你的画图的数据,可以参考.dxf文件