2013-01-17 17 views
18

C#フォームアプリケーションではなく、C#コンソールを使用するだけで画面に大きな白い四角形を作成できますか?フォームなしで画面に描画

可能であれば、画面全体をカバーする必要があります。 私はSystem.Drawingを使用しなければならないことを知って、いくつかの手順を試しましたが、実際に画面上に何も印刷されません!

+1

コンソールウィンドウの外に描画する方法を尋ねていますか? – Tharwen

+0

@Tharwenええ私はこれまでのところ – user1988147

答えて

38

方法1:あなたがSystem.DrawingSystem.Runtime.InteropServicesを必要とするWindows APIの

を呼び出します。プロジェクトへの参照を追加する必要があるかもしれません。

using System.Runtime.InteropServices; 
using System.Drawing; 

P /呼び出しを使用してクラスに

[DllImport("User32.dll")] 
public static extern IntPtr GetDC(IntPtr hwnd); 
[DllImport("User32.dll")] 
public static extern void ReleaseDC(IntPtr hwnd, IntPtr dc); 
をメソッドの追加画面全体の Graphicsオブジェクトを取得し、それに四角形を描画:

IntPtr desktopPtr = GetDC(IntPtr.Zero); 
Graphics g = Graphics.FromHdc(desktopPtr); 

SolidBrush b = new SolidBrush(Color.White); 
g.FillRectangle(b, new Rectangle(0, 0, 1920, 1080)); 

g.Dispose(); 
ReleaseDC(IntPtr.Zero, desktopPtr); 

これに伴う問題メソッドは、画面がまったく更新されると、長方形が上書きされ、ほとんどの実用的なアプリケーションでは役に立たないということです。

方法2:以前のようにボーダーレスフォーム

を作成し、プロジェクトの参照を必要としています。今回はSystem.Windows.Formsになります。あなたは再びSystem.Drawingをも必要となります:

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

新しいフォームを作成し、その境界を削除し、それを画面いっぱい、そしてタスクバーの上にそれを置く:

Form f = new Form(); 
f.BackColor = Color.White; 
f.FormBorderStyle = FormBorderStyle.None; 
f.Bounds = Screen.PrimaryScreen.Bounds; 
f.TopMost = true; 

Application.EnableVisualStyles(); 
Application.Run(f); 

で可能な問題これは、ユーザーがウィンドウからalt + tabだけ離れていることができることです。これ以上複雑なグラフィックを作成したい場合は、thisのような描画コードを書く必要があります。フォームの背景を透明にするには、TransparentKeyBackolorと同じに設定します。

.NET 4.5とWindows 7でこれらの両方をテストしたので、以前のバージョンでは異なる場合があります。詳細情報hereおよびhere

+0

これは私が探しているものです – user1988147

+0

これは実際には本当に良いです! – user1988147

5

はい、画面に描画することは可能ですが、一番上のボーダレスフォームを使用する方が簡単です。

必要な場合は、コンソールアプリケーションからもこれを行うことができますが、必要なアセンブリを参照すれば、アプリケーションの有効期間中画面にコンソールウィンドウが残ります。

this.TopMost = true; 
this.FormBorderStyle = FormBorderStyle.None; 

代わりに私はあなたがWindowのインスタンスを作成し、その上Showを呼び出すことができると信じています。

This answer to a different questionは、GDI +の呼び出しを使用して画面に直接描画する方法を説明しています。

+0

thxでしたが、コンソールウィンドウの外部にこれを描こうとしていました – user1988147

2

私が質問を理解する方法は、それは本当に意味のある方法ではありません。私は、user32.dllとgdi32.dllにプラットフォームを呼び出すことができ、メッセージループなどでクラシックなWindows UIアプリケーションを実装することができますが、Formsを使用するほうがはるかに簡単です。あなたはそれをすることができない理由は何ですか?

+0

理由がなくdownvotersを理解していない、あなたの問題の人は何ですか? –

+2

私にとって、これはコメントだったはずです。それは答えよりももっと問題です。 –

関連する問題