37

フォームアプリケーションを使用せずに、画面上に大きな白い長方形を作成することは可能ですか?

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

4

2 に答える 2

70

方法1:WindowsAPIを呼び出す

あなたが必要System.DrawingSystem.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);

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

方法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キーを押すだけで済むことです。より複雑なグラフィックを作成する場合は、次のような描画コードを作成する必要があります。フォームの背景を透明にするには、フォームTransparentKeyをと同じに設定しBackolorます。

.NET4.5とWindows7でこれらの両方をテストしたばかりなので、以前のバージョンでは異なる場合があります。ここここの詳細情報。

于 2013-01-18T11:56:33.130 に答える
6

はい、画面に描画することは可能ですが、一番上のフチなしフォームを使用する方が簡単な場合があります。

必要に応じて、必要なアセンブリを参照することを条件に、コンソールアプリケーションからこれを行うこともできますが、これにより、アプリケーションの存続期間中、コンソールウィンドウが画面に表示されたままになります。

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

または、のインスタンスを作成してWindow呼び出すことができると思いますShow

別の質問に対するこの回答は、 GDI+呼び出しを使用して画面に直接描画する方法を説明しています。

于 2013-01-17T18:42:58.167 に答える