Winforms应用程序中填充的橡皮筋

Winforms应用程序中填充的橡皮筋

问题描述:

如何在0.3窗口的窗体上绘制零不透明橡皮筋? (橡胶带一个Microsoft例如后作出Winforms应用程序中填充的橡皮筋


更新:

我需要橡皮筋的工作有点像面膜如果你使用敬或任何其他屏幕截图工具,当您尝试制作屏幕截图时,您会看到我需要做的事情:屏幕变得半透明,当您进行选择时,您将看到0不透明度选择

+2

零不透明度表示完全透明。我认为你的意思是不透明的。 – SLaks 2010-01-14 15:28:10

+0

你将如何看到它? – Matt 2010-01-14 15:29:15

+0

顺便说一下,那篇文章是错误的。你可以简单地调用'ControlPaint.DrawReversibleFrame':http://msdn.microsoft.com/en-us/library/system.windows.forms.controlpaint.drawreversibleframe.aspx。 (虽然在.Net 1.0中不存在) – SLaks 2010-01-14 15:30:40

这是你要找的机器人?

public Form1() 
    { 
     InitializeComponent(); 
     DoubleBuffered = true; 
    } 

    bool mouseDown = false; 
    Point mouseDownPoint = Point.Empty; 
    Point mousePoint = Point.Empty; 

    protected override void OnMouseDown(MouseEventArgs e) 
    { 
     base.OnMouseDown(e); 
     mouseDown = true; 
     mousePoint = mouseDownPoint = e.Location; 
    } 

    protected override void OnMouseUp(MouseEventArgs e) 
    { 
     base.OnMouseUp(e); 
     mouseDown = false; 
    } 

    protected override void OnMouseMove(MouseEventArgs e) 
    { 
     base.OnMouseMove(e); 
     mousePoint = e.Location; 
     Invalidate(); 
    } 

    protected override void OnPaint(PaintEventArgs e) 
    { 
     base.OnPaint(e); 

     if (mouseDown) 
     { 
      Region r = new Region(this.ClientRectangle); 
      Rectangle window = new Rectangle(
       Math.Min(mouseDownPoint.X, mousePoint.X), 
       Math.Min(mouseDownPoint.Y, mousePoint.Y), 
       Math.Abs(mouseDownPoint.X - mousePoint.X), 
       Math.Abs(mouseDownPoint.Y - mousePoint.Y)); 
      r.Xor(window); 
      e.Graphics.FillRegion(Brushes.Red, r); 
      Console.WriteLine("Painted: " + window); 
     } 
    } 
+0

不错,谢谢! – andySF 2010-01-16 12:43:22

+0

Horray,现在我可以发表评论。感谢您标记答案 – Dearmash 2010-01-22 19:30:55

+1

这完全是我一直在寻找的机器人 – 2010-03-27 16:00:25

您需要使用部分不透明颜色绘图时:从链接文章

更新线,在MyDrawReversibleRectangle方法:

ControlPaint.DrawReversibleFrame(rc, Color.FromArgb(80, 120, 120, 120), FrameStyle.Dashed); 
+0

抱歉,这不起作用。我不知道为什么,但这里是一个屏幕拍摄http://screencast.com/t/NjM1NjBkZTc。灰色的颜色来自我的.4不透明度全屏幕形式,而虚线矩形是完全忽略背景色参数的DrawReversibleFrame方法。谢谢你,原谅我的英语。 – andySF 2010-01-15 06:45:45

只需使用另一种形式,而没有显示在任务栏,或其它形式的选项它。设置只显示橡皮筋的形状区域。并确保两个窗口的行为就像是一个窗口(移动,关闭......)。我知道这不是一种优雅的方式,但通过一点工作就可以产生好的结果。您可以确保表单在表单层次结构中处于顶部,但仍然不会获得焦点。

通过设置区域良好,所有事件将转到其他表单。

这是我制定了一个等效问题的方式(我不说这是一个很好的解决方案,但它的工作原理)

+0

我不认为这将适用于可逆框架。 – SLaks 2010-01-14 15:36:15

+0

如果我不会成功,这可能是我的解决方案。谢谢 – andySF 2010-01-15 06:47:19

我使用@Dearmash在我的开源应用程序BugTracker.NET附带的屏幕捕获实用程序中提供的代码。该应用程序不是很大,所以如果你正在做屏幕截图的话,这可能是一个很好的起点。这里更多的信息:

http://ifdefined.com/blog/post/Screen-capture-utility-in-C-NET.aspx