2011-10-21 12 views
0

私は数ヶ月間これを使いこなしていましたが、私が望むことを達成するために何ができるかはまだ分かりません。C#画面のあるデバイスをシミュレートして暗くする最善の方法

実際のデバイスを構築する必要があります。つまり、現実の世界に存在し、画面があります。これまでは、私はいくつかの異なる方法でそれをやっていました。例えば、パネルを使ってレイズなどをシミュレートしました。現在、私は現在、コードを使って各コントロールを構築しています。

この画面を描画する方法はありますか? どのように私はそれを暗くすることができます、それを暗くまたは明確にするには? 私はそれらを処分した後、パネルの後ろに透明な背景を維持しています。このゴースト効果を除去する方法はありますか?

ありがとうございます!

答えて

1

基本的には、フォームの上にオーバーレイが必要です。

オープンソースプロジェクトObjectListViewは、同様のオーバーレイを実装しています。私は少しハックし、それは動作します。
あなたはで溶液をダウンロードすることができます:
https://github.com/hamxiaoz/Misc/tree/master/DimScreen

は、ソリューションをビルドして、フォームが淡色表示されて見ることができるトラックバーをドラッグします。また、オーバーレイをクリックすることもできます。私はそれがあなたが望むものだと思う。

+0

私の答えは、ちょうど拡大しましたか? –

+0

確かにコンセプトは同じですが、私はそれを実装する方法が最も重要だと思います(ウィンドウメッセージ/ウィンドウ作成パラメータ/ピンボケなど) –

+0

これはP-E-R-F-E-C-Tです! – henriquesirot

1

最も侵襲的な方法は、おそらく黒または灰色の半透明のオーバーレイになります。必要に応じて透明度を調整して、望むように見えます。

この作品かどうかは分かりませんが、それは、少なくとも技術を示す必要があります。

using System; 
using System.Drawing; 
using System.Windows.Forms; 

static class Utils { 
    public static Form Plexiglass(Form tocover) { 
     var frm = new Form(); 
     frm.BackColor = Color.DarkGray; 
     frm.Opacity = 0.30; 
     frm.FormBorderStyle = FormBorderStyle.None; 
     frm.ControlBox = false; 
     frm.ShowInTaskbar = false; 
     frm.StartPosition = FormStartPosition.Manual; 
     frm.AutoScaleMode = AutoScaleMode.None; 
     frm.Location = tocover.Location; 
     frm.Size = tocover.Size; 
     frm.Show(tocover); 
     return frm; 
    } 
} 
+0

もう1つは...タッチスクリーンがあるので、クリックスルーする必要があります... – henriquesirot

+0

私はこの作業を行う方法があると確信していますが、私はこの時点で正しい答えを持っていません。 –

+0

私の更新された答えをチェックしてください、それはあなたのために働くはずです。 –

0

私はそれがより生産的にするために何かを追加しました。ここに私のコードです。

using System; 
using System.Drawing; 
using System.Windows.Forms; 

static class Utils 
{ 
    static Form ChildForm; 
    public static Form OpenMask(Form tocover) 
    { 
     Form frm = new Form(); 
     ChildForm = frm; 
     tocover.SizeChanged += AdjustPosition; 
     tocover.Move += AdjustPosition; 

     //frm.Move += AdjustPosition; 
     //frm.SizeChanged += AdjustPosition; 
     frm.BackColor = Color.Black; 
     frm.Opacity = 0.50; 
     frm.FormBorderStyle = FormBorderStyle.None; 
     frm.ControlBox = false; 
     frm.ShowInTaskbar = false; 
     frm.StartPosition = FormStartPosition.Manual; 
     frm.AutoScaleMode = AutoScaleMode.None; 
     //frm.Location = tocover.Location; 
     frm.Location = tocover.PointToScreen(System.Drawing.Point.Empty); 
     frm.Size = tocover.ClientSize; 
     frm.Show(tocover); 
     return frm; 
    } 

    public static void CloseMask() 
    { 
     if (ChildForm != null) 
     { 
      ChildForm.Close(); 
      ChildForm.Dispose(); 
     } 
    } 

    private static void AdjustPosition(object sender, EventArgs e) 
    { 
     Form parent = sender as Form; 
     if (ChildForm != null) 
     { 
      ChildForm.Location = parent.PointToScreen(System.Drawing.Point.Empty); 
      ChildForm.ClientSize = parent.ClientSize; 
     } 
    } 
} 
関連する問題