6

不透明度 0.3 のウィンドウ フォーム上に不透明度ゼロのラバー バンドを描画するにはどうすればよいですか? (輪ゴムはマイクロソフトの例にならって作られています


アップデート:

マスクのようなものを機能させるには、その輪ゴムが必要です。Jing またはその他のスクリーン ショット ツールを使用すると、スクリーンショットを作成しようとするときに何をする必要があるかが正確にわかります。画面は半透明になり、選択すると不透明度 0 が表示されます。

4

4 に答える 4

8

これはあなたが探していたドロイドですか?

    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);
        }
    }
于 2010-01-16T00:17:48.617 に答える
1

描画するときは、部分的に不透明な色を使用する必要があります。

リンクされた記事からの更新された行、MyDrawReversibleRectangleメソッド:

ControlPaint.DrawReversibleFrame( rc, Color.FromArgb(80, 120, 120, 120), FrameStyle.Dashed );
于 2010-01-14T15:33:41.073 に答える
1

オープン ソース アプリ BugTracker.NET に付属のスクリーン キャプチャ ユーティリティで @Dearmash が提供したコードを使用しました。アプリはそれほど大きくないので、スクリーン キャプチャを行う場合は、出発点として適しているかもしれません。詳細はこちら:

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

于 2010-02-03T03:51:12.967 に答える
0

タスクバーや他のフォームオプションに表示せずに、追加のフォームを使用するだけです。輪ゴムだけが見える形の領域を設定します。また、両方のウィンドウが1つのウィンドウであるかのように動作することを確認します(移動、閉じるなど)。エレガントな方法ではないことはわかっていますが、少しの作業で良い結果を得ることができます。フォームがフォーム階層の一番上にあり、それでもフォーカスを受け取らないようにすることができます。

地域を適切に設定すると、すべてのイベントが別の形式になります。

それは私が同等の問題を解決した方法です(私はそれが良い解決策であるとは言いませんが、それはうまくいきます)

于 2010-01-14T15:35:14.803 に答える