質問
一部のテキストが表示されたすべてが透明な複数のウィンドウを持つ C# アプリケーションを作成したいと考えています。
難しいのは、これらのフォームをデスクトップの上、デスクトップ アイコンの下に配置することです。これは可能でしょうか?
解決
ウィンドウを透明にするだけで非常に簡単です。
this.BackColor = Color.Fuchsia;
this.TransparencyKey = Color.Fuchsia;
次のようなことを行うと、デスクトップやウィンドウの下にあるその他のものを引き続き操作できるようになります。
public const int WM_NCHITTEST = 0x84;
public const int HTTRANSPARENT = -1;
protected override void WndProc(ref Message message)
{
if ( message.Msg == (int)WM_NCHITTEST )
{
message.Result = (IntPtr)HTTRANSPARENT;
}
else
{
base.WndProc( ref message );
}
}
他のヒント
ジェフ、ヒントをありがとう。それはまだ私が求めているものではありません。ウィンドウをデスクトップの一部であるかのように表示して、アイコンをフォームの上に配置できるようにしたいと考えています。
もしかしたら別の方法があるかもしれません。実際にテキストやグラフィックをデスクトップに直接描画することはできますか?
Jeff Hillman が上記で説明した方法は、ウィンドウを透明にするのに効果的です。これにより、あたかもデスクトップの一部であるかのように表示できるようになります (これが目標であると述べました)。
あなたが遭遇する可能性のある問題の 1 つは、私も最近遭遇した問題ですが、アンチエイリアス フラグが設定された状態でウィンドウに描画することです。具体的には、DrawText を使用すると、アンチエイリアシング フラグを設定してレンダリングされたテキストは、背景が透明でないかのようにレンダリングされます。最終的には、テキストの周囲にわずかに色の境界線が付いたテキストが得られます。これは他のものにも当てはまると思いますが、試したことはありません。
それを解決する方法について何か考えはありますか?
所属していません StackOverflow