【问题标题】:How to clear screen area or Redraw screen in C#如何在 C# 中清除屏幕区域或重绘屏幕
【发布时间】:2010-01-15 08:14:15
【问题描述】:

我正在 C#.Net 2.0 中创建用户控件。 我必须在这些控件之间应用拖放图像。 我已经做了拖放效果。

但问题是我必须在鼠标拖动时显示控件移动。 为此,我在 ControlDraw.DrawReversibleFrame() 的帮助下在屏幕上绘制了一个矩形

问题是,当使用鼠标移动事件绘制时,矩形被绘制在整个屏幕上,因为屏幕上没有重绘它存在于屏幕上。

所以请谁能告诉我如何清除绘制的图形或如何强制重绘屏幕。

【问题讨论】:

  • 您的意思是当您拖动某些东西并将鼠标移到控件上时(左键向下),您希望看到一个矩形显示在鼠标下方的控件上?那个矩形会随着鼠标移动,直到你把东西放在上面?
  • 我想将控件本身拖放到 Like Panel 上。因此,为了显示控件正在拖动,我想显示一个与控件大小相同的矩形。

标签: c# gdi+


【解决方案1】:

在将下一帧绘制到新位置之前,您必须在与之前相同的位置绘制“可反转”帧以反转它。

伪代码为:

bool prev_rev_frame = false;
Rect prev_rev_rect;

...

void on_mouse_move() {
  if(prev_rev_frame)
    Control.drawReversableFrame(prev_rev_rect);
  Rect new_rev_rect = ....
  Control.drawReversableFrame(new_rev_rect);
  prev_rev_frame = true;
  prev_rev_rect = new_rev_rect;
}

但总的来说,我建议将鼠标光标更改为拖放图标或图像的缩略图会更合适。

【讨论】:

  • 感谢 Will,ControlPaint.DrawReversibleFrame() - 它在屏幕上绘制一个与背景颜色相反的框架。在这里我没有问题。我可以更改鼠标光标,但这不是我的要求。要求是显示用户控件正在拖动。谢谢
猜你喜欢
  • 1970-01-01
  • 2012-11-10
  • 2015-04-15
  • 2020-07-01
  • 1970-01-01
  • 2013-08-11
  • 2016-01-15
  • 2011-06-16
  • 2013-06-24
相关资源
最近更新 更多