CGI中使用双缓冲遇到问题
关于Invalidate的使用 刚学C#
函数好像是指定某一区域无效,可我用下面代码 鼠标拖动会闪烁 这是为什么?
为什么我重绘改变的区域 会一直闪 而重绘非常小的一块 却看起来正常呢
MFC的Invalidate BOOL参数是指定是否先用背景填充区域 False直接覆盖 而C#没有?! 跟这有关吗?
项目里 我测出是对话框背景先重绘了次 这是为什么呢?
新手求解 OTL
Rectangle rc;
public Form1()
{
InitializeComponent();
rc = new Rectangle(5, 5, 0, 0);
}
private void Form1_Paint(object sender, PaintEventArgs e)
{
BufferedGraphicsContext current = BufferedGraphicsManager.Current;
BufferedGraphics bg;
bg = current.Allocate(this.CreateGraphics(), this.DisplayRectangle);
Graphics g = bg.Graphics;
g.Clear(Color.LightGray);
Brush mybush = new SolidBrush(Color.Black);
g.FillRectangle(mybush, new Rectangle(0, 0, 400, 400));
Brush mybush2 = new SolidBrush(Color.Red);
g.FillRectangle(mybush2, rc);
bg.Render();
g.Dispose();
}
private void Form1_MouseMove(object sender, MouseEventArgs e)
{
rc.Width = e.X;
rc.Height = e.Y;
this.Invalidate(rc,true);
//this.Invalidate(new Rectangle(0, 0, 5, 5), true); //上面换成这行效果还好
}
[最优解释]
你可以考虑用WPF做界面
[其他解释]
设置 form 的doublebuffer = true;
[其他解释]
啊咧咧 小顶下
[其他解释]
没人么 = =
我试了下 图片画在picturebox上 用Invalidate就不会闪
而在form下直接画 用invalidate就有事
这是为什么 有木有人解答下
[其他解释]
不是这问题 加上去刷新更厉害了
[其他解释]
我现在只是奇怪 为什么同样的代码 一个在Picturebox画 和在 form上画效果会不一样
同样使用invalidate FORM 还限定了范围 可是还是会用背景填充
而Pbox上invalidate()直接OK 这有点搞不懂
顺便问下 我程序里大量按键用CGI画 为了点效果多次刷新 CPU瞬间一半 不画效果 只贴图又显单调
有什么折中方法吗?
刚刚学C# 表示不太懂用什么方法表现按钮
[其他解释]
放弃这种做法了 (_)