« 10.09 なんで再放送 | ココ | 10.11 影付きウィンドウ(Layered-window) »

2006年10月10日

影付きウィンドウ  このエントリーを含むはてなブックマーク 

OSXのような影が付いてるウィンドウを表示するには、どうやったらうまくできるんやろうか…。

  • 表示したいウィンドウの下に、もう1つウィンドウを作って表示してやれば?

残念ながらモーダルの場合は、都合良く下に表示されてくれない。Ownerを設定すると、モーダルの上に来てしまい、おまけにクリックしてもメッセージを無視るので不可。

  • じゃあ、Regionを設定すれば?

Ownerを設定すると上に来てしまうのだから、上に来るということが確実であることを利用して、ウィンドウの形を変形してやる。つまり、影を描画するための領域を作り、かつ、ダイアログの表示部分を邪魔しないようにする。

  • Regionを設定したけど、うまく透明に描けない

ウィンドウを透明にすることはできる。FormBorderStyleをNoneにして、TransparentKeyをBackColorにすれば。しかし、それではアルファブレンドの描画をしてもBackColorが浮き出てしまって効果がなくなる…。

  • 背景を再描画しつつ、影を作る

であれば、デスクトップからイメージをコピーしつつ、それに影を付けて描画すれば…とこれでは面白みがない、というか再描画するたびに影が濃くなる。

なんとか探し出したら、答えはここに…と思ったら。ただし、これはクライアントコントロールの場合であって、Formの場合ではない。こんな子供騙しいらない!!

一応書いときますが、デスクトップに描画できなくなってるんですよ。WinNT系になってから。それまでは、スクリーンセーバーとかでデスクトップに落書きし放題やったのが、セキュリティ上の問題からそれを不可にしたので。てことは、UIパーミッションがあれば描けるんでしょうな。…パーミッションを取れと? そういうことか? でもどうやって。

  • 正解はこれっぽい

SelfSub 2.1 updates and additions. Apr 13を発見。どうやら、サブクラスかを行うハイエンドなクラスっぽいけど、サンプルとして表示されてる画面(下)に思いっきり影が付いてる。これはっ!! と思い、とりあえずダウンロードして探したら、一応サンプルには含まれているようだ。

ただ…世界にやさしいVB6.0仕様。.NETぢゃねー。
お陰で、レイヤーだと分かっただけ良しとしよう。

By ただ at 23:46 カテゴリー ; さんぷるライブラリー , PinMarch Samples , VB, VB .net , プログラミング単語帳 , mein Erbe , 仕事関係

« 10.09 なんで再放送 | 10月の記事 | 10.11 影付きウィンドウ(Layered-window) »




トラックバック

このエントリーのトラックバックURL:
http://pinmarch.sakura.ne.jp/mt/mt-tb.cgi/664