请问关于用GDI+绘制鼠标拖动方框时其他部分闪烁的问题 我用WindowsSDK处理时也有这个问题(可以用双缓存来解决).建议你到专门的图象处理网站上去看看吧.www.image2003.com 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 对这个网站www.image2003.com不错 this.SetStyle(ControlStyles.DoubleBuffer,true);//设置双缓冲,防止图像抖动 this.SetStyle(ControlStyles.AllPaintingInWmPaint,true);// 忽略系统消息,防止图像闪烁 this.SetStyle(ControlStyles.UserMouse,true);//控制鼠标完成事件 .net 绘图确实比较慢,只能针对具体动作写一些算法,比如,如果矩形是实心的,在画的过程是不断增大的,可以每次不要刷新整个画面,只绘制增加部分;另外,this.invalidate()也可以只作用于画面的部分 Point ptStart;Image bbb ; //放在内存里Graphics gg;Graphics ggg;bool down = false;private void panel1_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e){ down = true; ptStart = new Point(e.X,e.Y); ggg = Graphics.FromHwnd(this.panel1.Handle);}private void panel1_MouseMove(object sender, System.Windows.Forms.MouseEventArgs e){ if(down == true) { bbb = new Bitmap(this.panel1.Width,this.panel1.Height); gg = Graphics.FromImage(bbb); panel1.Refresh(); gg.DrawRectangle(Pens.Yellow,ptStart.X,ptStart.Y,e.X- ptStart.X,e.Y-ptStart.Y); ggg.DrawImage(bbb,0,0); } }private void panel1_MouseUp(object sender, System.Windows.Forms.MouseEventArgs e){ down =false; gg.Dispose(); ggg.Dispose();}private void panel1_Paint(object sender, System.Windows.Forms.PaintEventArgs e){ if(bbb!=null) e.Graphics.DrawImage(bbb,0,0);}楼主是怎么画的?我是先画在一个IMAGE里,然后再画到PANEL上的。我没用双缓冲,实验里我在panel1上放了30多个button,label,textbox,datagrid,之类的control,每什么闪烁,自我感觉良好。呵呵。 双缓冲里重要的一点是背景不被清空,所以要重载一个方法,将其内容置为空 protected override void OnPaintBackground(PaintEventArgs pevent) { }把这个加上试一下 to:The123(在我地盤這 伱就得聽我的)我是直接在Paint方法中绘制的,我不可能绘制在图片中,因为我的鼠标画出来的是矩形是空心的 C# WebClient下载文件的疑问 关于HttpWebRequest的重试问题 listview控件工作在 View.Details模式下,不出现垂直滚动条? c#产生随机数 电子书(exe 格式的)如何转成flash格式的文件 非常诡异的问题关于oracle的带参数的sql,大家进来看看这灵异事件。 大家帮忙指点一下结构体! 请问C#怎么进行延时(或者说是停顿/等待)?? c#反射问题 请问Assembly.LoadFrom怎样实例化一个带参数的组件??? 优秀的软件供大家使用。 有关图片显示的问题
this.SetStyle(ControlStyles.AllPaintingInWmPaint,true);// 忽略系统消息,防止图像闪烁
this.SetStyle(ControlStyles.UserMouse,true);//控制鼠标完成事件
Image bbb ; //放在内存里
Graphics gg;
Graphics ggg;
bool down = false;
private void panel1_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)
{
down = true;
ptStart = new Point(e.X,e.Y);
ggg = Graphics.FromHwnd(this.panel1.Handle);
}private void panel1_MouseMove(object sender, System.Windows.Forms.MouseEventArgs e)
{
if(down == true)
{
bbb = new Bitmap(this.panel1.Width,this.panel1.Height);
gg = Graphics.FromImage(bbb);
panel1.Refresh();
gg.DrawRectangle(Pens.Yellow,ptStart.X,ptStart.Y,e.X- ptStart.X,e.Y-ptStart.Y);
ggg.DrawImage(bbb,0,0);
}
}private void panel1_MouseUp(object sender, System.Windows.Forms.MouseEventArgs e)
{
down =false;
gg.Dispose();
ggg.Dispose();
}private void panel1_Paint(object sender, System.Windows.Forms.PaintEventArgs e)
{
if(bbb!=null)
e.Graphics.DrawImage(bbb,0,0);
}楼主是怎么画的?我是先画在一个IMAGE里,然后再画到PANEL上的。
我没用双缓冲,实验里我在panel1上放了30多个button,label,textbox,datagrid,之类的control,每什么闪烁,自我感觉良好。呵呵。
protected override void OnPaintBackground(PaintEventArgs pevent)
{
}把这个加上试一下