以前、アルファ値付きのウィンドウを作りたくて、
リージョンではなくレイヤードウィンドウについて色々調べてたのですが、なかなかうまくいかず。
結局HSPは32bitのウィンドウではなくて24bitのウィンドウのために、
アルファ値付きは不可能なんだと勝手に決めつけ断念していました・・・
それで、もう1度、昨日から再度調査しなおしていたのですが、
UpdateLayeredWindowを使えばいいことが判明!
駄目もとで、一度HSPで作ってみようと頑張ったら完成しました!
32bitのDIBの作り方は、すぽいと君のBITMAPのコピー処理の時に勉強してたので、そこらへんを流用。
何とか動いたんだけど、なんとなくで動いている部分もありプログラム的にはちょっと心配。
ゲームとかと違って、Windowsプログラムはソース自体は短いのに理解するまでが大変だ。
ちなみに、ただ単に透過色指定のSetLayeredWindowAttributesを利用したレイヤードウィンドウや、リージョンウィンドウと比べると
やっぱり、半透明の値をしっかりもっているので、UpdateLayeredWindowで作ったウィンドウはめっちゃきれい!!
アルファチャンネル付きレイヤードウィンドウとの比較画像
下の方は、ディザリング処理と言うか、灰色の中間色が透過されないためギザギザしている・・・
モジュール化して公開してみたのでよかったら使ってください!
なたでラボのHSPのモジュールの「レイヤードウィンドウ総合モジュール」です。
Windows2000はGetLayeredWindowAttributesがないので動きません。
コメント