C#フォームアプリケーションではなく、C#コンソールを使用するだけで画面に大きな白い四角形を作成できますか?フォームなしで画面に描画
可能であれば、画面全体をカバーする必要があります。 私はSystem.Drawingを使用しなければならないことを知って、いくつかの手順を試しましたが、実際に画面上に何も印刷されません!
C#フォームアプリケーションではなく、C#コンソールを使用するだけで画面に大きな白い四角形を作成できますか?フォームなしで画面に描画
可能であれば、画面全体をカバーする必要があります。 私はSystem.Drawingを使用しなければならないことを知って、いくつかの手順を試しましたが、実際に画面上に何も印刷されません!
System.Drawing
とSystem.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);
これに伴う問題メソッドは、画面がまったく更新されると、長方形が上書きされ、ほとんどの実用的なアプリケーションでは役に立たないということです。
を作成し、プロジェクトの参照を必要としています。今回は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のような描画コードを書く必要があります。フォームの背景を透明にするには、TransparentKey
をBackolor
と同じに設定します。
.NET 4.5とWindows 7でこれらの両方をテストしたので、以前のバージョンでは異なる場合があります。詳細情報hereおよびhere
これは私が探しているものです – user1988147
これは実際には本当に良いです! – user1988147
はい、画面に描画することは可能ですが、一番上のボーダレスフォームを使用する方が簡単です。
必要な場合は、コンソールアプリケーションからもこれを行うことができますが、必要なアセンブリを参照すれば、アプリケーションの有効期間中画面にコンソールウィンドウが残ります。
this.TopMost = true;
this.FormBorderStyle = FormBorderStyle.None;
代わりに私はあなたがWindow
のインスタンスを作成し、その上Show
を呼び出すことができると信じています。
This answer to a different questionは、GDI +の呼び出しを使用して画面に直接描画する方法を説明しています。
thxでしたが、コンソールウィンドウの外部にこれを描こうとしていました – user1988147
私が質問を理解する方法は、それは本当に意味のある方法ではありません。私は、user32.dllとgdi32.dllにプラットフォームを呼び出すことができ、メッセージループなどでクラシックなWindows UIアプリケーションを実装することができますが、Formsを使用するほうがはるかに簡単です。あなたはそれをすることができない理由は何ですか?
理由がなくdownvotersを理解していない、あなたの問題の人は何ですか? –
私にとって、これはコメントだったはずです。それは答えよりももっと問題です。 –
コンソールウィンドウの外に描画する方法を尋ねていますか? – Tharwen
@Tharwenええ私はこれまでのところ – user1988147