在窗体OnPaint事件内重绘窗体颜色时发生的问题

popo0762 2008-11-10 03:36:13
在效果截图中大家可以看见,当我将重绘了窗体颜色的窗体拖至停靠控件出现的小方格上后,移开窗体,窗体上就出现了小方格的阴影...

不知如何去掉这个移动时产生的效果

重绘代码如下:

protected override void OnPaint(PaintEventArgs e)
{
Rectangle rect = e.ClipRectangle;
BufferedGraphicsContext currentContext = BufferedGraphicsManager.Current;
BufferedGraphics myBuffer = currentContext.Allocate(e.Graphics, e.ClipRectangle);
Graphics g = myBuffer.Graphics;
g.SmoothingMode = SmoothingMode.HighQuality;
g.PixelOffsetMode = PixelOffsetMode.HighSpeed;
g.Clear(Color.Transparent);

Brush backbrush =
new LinearGradientBrush(rect, Color.White, Color.FromArgb(125,125,125),LinearGradientMode.Vertical);

g.FillRectangle(backbrush, rect);

myBuffer.Render(e.Graphics);
g.Dispose();
backbrush.Dispose();
myBuffer.Dispose();

base.OnPaint(e);
}

private void Form1_Load(object sender, EventArgs e)
{
this.SetStyle(ControlStyles.OptimizedDoubleBuffer |
ControlStyles.ResizeRedraw |
ControlStyles.AllPaintingInWmPaint, true);
}

效果截图顺序: 一开始.bmp → 拖动窗体至停靠小方格所在位置.bmp → 放开窗体.bmp → 将窗体由停靠小方格所在位置移开.bmp
...全文
103 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
popo0762 2008-11-10
  • 打赏
  • 举报
回复
明白了,谢谢
popo0762 2008-11-10
  • 打赏
  • 举报
回复
To zx005:

很抱歉,上传的效果图下载不了,无法让你们看到效果.

我这里若修改的话,该如何修改呢?



zx005 2008-11-10
  • 打赏
  • 举报
回复
protected override void OnPaint(PaintEventArgs e)
{
Rectangle rect = ClientRectangle;
BufferedGraphicsContext currentContext = BufferedGraphicsManager.Current;
BufferedGraphics myBuffer = currentContext.Allocate(e.Graphics, e.ClipRectangle);
Graphics g = myBuffer.Graphics;
g.SmoothingMode = SmoothingMode.HighQuality;
g.PixelOffsetMode = PixelOffsetMode.HighSpeed;
g.Clear(Color.Transparent);

Brush backbrush =
new LinearGradientBrush(rect, Color.White, Color.FromArgb(125,125,125),LinearGradientMode.Vertical);

g.FillRectangle(backbrush, rect);

myBuffer.Render(e.Graphics);
g.Dispose();
backbrush.Dispose();
myBuffer.Dispose();

base.OnPaint(e);
}

private void Form1_Load(object sender, EventArgs e)
{
this.SetStyle(ControlStyles.OptimizedDoubleBuffer |
ControlStyles.ResizeRedraw |
ControlStyles.AllPaintingInWmPaint, true);
}
你的代码只是重绘被窗口覆盖了的clip区域

110,537

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧