タイトル一覧   関連タグ: Win VB
タグ:Win VB タイトル:透明な背景のForm上に半透明の楕円を
1 2 3
21:  お名前:中 博俊 2004/11/26 23:34:39

背景のBMPを拾ってきて自前で描画するっていうことかな?
22:  お名前:渋木宏明(ひどり) 2004/11/27 0:00:26

WS_EX_TRANSPARENT にしておいて、透明にしたいところを、後ろにいるウィンドウ(デスクトップだったかな?)に描画させるんだったと思う。

23:  お名前:Jumbo 2004/11/27 16:12:23

WS_EX_TRANSPARENTについて検索中...
あった...
「ウィンドウ作成直後は確かに透過ウィンドウとなり、ウィンドウの背景にある画像が表示されます。しかしこのスタイルで作成したウィンドウは、ウィンドウの移動をすると、背景も一緒に移動してしまいます。」
とあります。ウィンドウを作成したときのバックが背景となるって事ですよね、きっと。ん~どう使えば良いのでろう???
24:  お名前:渋木宏明(ひどり) 2004/11/27 22:49:52

>ウィンドウを作成したときのバックが背景となるって事ですよね、

そです。

>ん~どう使えば良いのでろう???

だから、「透けさせたい箇所」を無効領域だってことにして、自分の後ろにいるウィンドウに描画させてやるんだったと思います。

# 具体的には、InvalidateRgn() して UpdateWindow() のはず。

太古の技術なので、インターネット検索で見つけるのは難しいかも。

前にも書きましたが、大昔のデスクトップアクセサリなんかで使われていた手法なので、その辺のソースが発見できれば参考になるかもしれないです。

25:  お名前:Jumbo 2004/11/29 16:54:20

SetWindowLongでWS_EX_TRANSPARENTを指定して、Invalidateメソッドを呼び出してみましたが、思う通りの結果になってくれませんでした...
透過しようとがんばってるみたいですが、透過されません。タイトルバーなど潰されてしまいます。
やっぱりAPIでごり押しするのは無理なようです。
26:  お名前:渋木宏明(ひどり) 2004/11/29 17:03:48

上書きして欲しくないところは無効リージョンから取り除かなくちゃ駄目すよ。

なので、Invalidate() じゃなくて InvalidateRgn() するんです。(後ろにいるウィンドウに対して)


27:  お名前:Jumbo 2004/11/29 17:49:04

まずは透過されることを確認しようと思ってウィンドウ全体に対して行ったつもりだったんですが...
InvalidateはAPIではなくMe.Invalidateでやってるんですが、まずかったですかね?
28:  お名前:渋木宏明(ひどり) 2004/11/29 20:14:34

WS_EX_TRANSPARENT なウィンドウに対して Invalidate しても、それこそ何も起きないのでは。。。

29:  お名前:渋木宏明(ひどり) 2004/11/29 21:58:35

今ちょっと試してみたんですが、WS_EX_TRANSPARENT を設定すると、キャプションバーやウィンドウの「ふち」まで再描画されなくなっちゃいますね。。。

30:  お名前:Rdzalayu 2011/06/01 21:25:44


duvall florida school district,
1 2 3
お名前
メッセージ
次回のために入力情報を記録