フォームアプリケーションを使用せずに、画面上に大きな白い長方形を作成することは可能ですか?
可能であれば、画面全体をカバーする必要があります。を使用してSystem.Drawing
いくつかの手順を試してみる必要があることはわかっていますが、実際に画面に何も印刷されていません。
あなたが必要System.Drawing
とSystem.Runtime.InteropServices
。それらにプロジェクト参照を追加する必要があるかもしれません。
using System.Runtime.InteropServices;
using System.Drawing;
P/Invokeを使用してクラスにメソッドを追加します
[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キーを押すだけで済むことです。より複雑なグラフィックを作成する場合は、次のような描画コードを作成する必要があります。フォームの背景を透明にするには、フォームTransparentKey
をと同じに設定しBackolor
ます。
.NET4.5とWindows7でこれらの両方をテストしたばかりなので、以前のバージョンでは異なる場合があります。こことここの詳細情報。
はい、画面に描画することは可能ですが、一番上のフチなしフォームを使用する方が簡単な場合があります。
必要に応じて、必要なアセンブリを参照することを条件に、コンソールアプリケーションからこれを行うこともできますが、これにより、アプリケーションの存続期間中、コンソールウィンドウが画面に表示されたままになります。
this.TopMost = true;
this.FormBorderStyle = FormBorderStyle.None;
または、のインスタンスを作成してWindow
呼び出すことができると思いますShow
。
別の質問に対するこの回答は、 GDI+呼び出しを使用して画面に直接描画する方法を説明しています。