DOBON.NET DOBON.NETプログラミング掲示板過去ログ

Vista(Aero)のようなウィンドウ

分類:[.NET]

Vista(Aero)のようなウィンドウをVB.NET(2003または2005)で作成ようとしているのですが,色々と調べても実現できる方法が見つかりません。
透明度の情報を持った画像ファイル(PNGなど)をそのまま画面で透過させて表示するにはどうしたら良いのでしょうか?
Opacity,TransparencyKey,SetLayeredWindowAttributes,PaintDesktopなど試しましたがダメでした。

どなたかお教えいただけると幸いです。
■No16917に返信(SEBさんの記事)

Opacityではフォーム全体を透過しますが、部分的に透過する方法ということであれば、UpdateLayeredWindow関数を使うことになりそうです。画像のアルファ値を調べて、それに応じてUpdateLayeredWindowで透過させれば、できるのではないでしょうか。
コメントありがとうございます。

UpdateLayeredWindow関数でアルファ値を持ったPNGファイルを透過させて表示させることに成功しました。
しかし,デザイン画面でフォームに配置したコントロールが1つも見えなくなってしまいました。
コントロールを表示させる方法は何か考えられますでしょうか?

私はフォームを重ねて回避をしようと考えていたのですが,2つのフォームを同時に見えるように移動させることができず,行き詰っています。
SetDesktopLocation関数では,2つ目のフォームの遅れが目立って格好が悪いのです。何か思い当たる方法はございますでしょうか?

質問が2つになってしまいましたが,どちらか一方でも大変ありがたいです。

よろしくお願いいたします。
> UpdateLayeredWindow関数でアルファ値を持ったPNGファイルを透過させて表示させることに成功しました。
> しかし,デザイン画面でフォームに配置したコントロールが1つも見えなくなってしまいました。
> コントロールを表示させる方法は何か考えられますでしょうか?

コントロールは表示されませんので、自分で描画することになるかと思います。または、例えば、

VG.net: Animated Vector Graphics
http://www.vgdotnet.com/

のようなものを使ってもできるようです。
またまた,コメントありがとうございます。

なるほど,毎回,ビットマップを書き換えるということになるのでしょうね。

> VG.net: Animated Vector Graphics
> http://www.vgdotnet.com/
>
> のようなものを使ってもできるようです。

ドキュメントが英語のようで,難しそうですが挑戦してみます。
ありがとございます。

ちなみに,ウィンドウの同時移動は難しいでしょうか?
2006/08/13(Sun) 11:24:26 編集(投稿者)

>ちなみに,ウィンドウの同時移動は難しいでしょうか?

「まったく違和感無く」ってのは難しいと思いますよ。

Vista 以外で簡単に「Vista 風」のウィンドウが実現できるなら、MS 自身が MSN Messanger とかでやってるでしょうね。

太古の昔に確立された「リージョンを使わない不定形ウィンドウ」の実装手法を応用すれば、見た目的に似たようなものは作れそうな気がします。

が、前景と後景のブレンドを自分でやる羽目になるなど、かなり面倒だと思います。

DOBON.NET | プログラミング道 | プログラミング掲示板