【プログラミング】 半透明のウインドウへの憧れ
 私はVB.NETの一番最初のバージョン(2002?)でプログラミングをしています。いまでは2008年版もでていてだいぶ便利になった機能もあるようですが、VB6とVB.NET2002との差を比較するとビックリするほどの差ではないし、その割には結構な金額で棚に並んでおり貧乏な私にはそんなものを買うお金を出せるわけがないわけで、いまでも2002のバージョンでプログラミングしている今日この頃、皆さん如何お過ごしでしょうか。今回の記事はプログラミングを知らない人にとっては苦痛以外の何者でもないので、是非読み飛ばしてください。

 さて、このページではおなじみのInternet Radio Playerですが、当初のプログラミング知識の低さから、「とにかく簡単に聴ける」こと以外は高くて遠い棚へと置き去りにして開発したものの、そこそこ形になってくるといろんなことがしたくなりまして、ガジェットなどでおなじみの半透明のウインドウにできないかと模索しました。

 そこで辿り着いたのが「レイヤードウインドウ」なる言葉。どうやらWindows2000以降に導入された仕組みで、ちょっとしたコードを追加するだけで透過pngを背景に指定でき、自由で綺麗な半透明のウインドウを作ることができるようだ。

 最初はそんなことできるなんて知らなくて、とりあえずフォームの背景を透明にすることぐらいしかできなかった。以下そのソース(冒頭部の部分抜粋)。


Form1.vb:

Public TransKeyColor As Color = Color.FromArgb(127, 127, 127)
Public TransKey As Color

Public Sub New()
MyBase.New()

' この呼び出しは Windows フォーム デザイナで必要です。
InitializeComponent()

' InitializeComponent() 呼び出しの後に初期化を追加します。
Dim img As New Bitmap(1, 1)
img.SetPixel(0, 0, transkeycolor)
TransKey = img.GetPixel(0, 0)
img.MakeTransparent(TransKey)
Me.BackColor = TransKey
Me.TransparencyKey = TransKey
Me.lTime_back.BackColor = TransKey
End Sub

'以下・・・

 いろいろと端折っているけど、要は透明のキーカラーを設定(ここでは#777777)して、Formのnew()の中に、フォーム(とコントロール)の背景色をそのキーカラーに設定すると、テキスト文字のみで描画されるようにできる。勿論プログラムの途中で背景色を変更すると、キーカラー以外であればその色に変更されます。
b0000480_0424884.jpg ただ、この方法だと(本来の)ウインドウの描画領域の背景の描画が微妙であったり、32bitカラーの環境では透過しなたっかり、そもそもテキストのアンチエイリアシングがうまく効かないみたいで非常に使い勝手が悪いのです。まあ、書き方が悪いのかもしれないけど、一部ではバグとも言われているそうな。んで、右のようになる。

 んで、これの解決をしてくれそうなのがレイヤードウインドウだったのです。ここまでで若干記事が長めになってしまったので、つづく。
[PR]
by hidemite | 2008-05-10 00:36 | PC
<< 【プログラミング】 レイヤード... 【音楽】 Internet R... >>