透明ウィンドウの作り方は?

解決


のび太とか言うなさん。  2004-02-10 16:27:29  No: 81937  IP: [192.*.*.*]

透明ウィンドウをVBで作成したいのですが、
オブジェクト類は透明ではなくしっかり表示したいと思っています。
例えばラベルの字を表示したとき背景は透明で字だけしっかり写るとか
そういうものって作成可能ですか?
半透明とかじゃなくウィンドウは透明なものを目指しています。

編集 削除
いちゆ  2004-02-10 17:33:58  No: 81938  IP: [192.*.*.*]

…作成は可能だろうが、したことがない。
たぶんリージョン設定して、ウィンドウの描写イベントを透過にするんだろう。

編集 削除
たかみちえ  URL  2004-02-10 19:50:47  No: 81939  IP: [192.*.*.*]

ええ、その通り可能です。ただし、ラベルはグラフィックオブジェクト(ウィンドウハンドルを持ってない)ものなので、無理です。
透明にしても表示させるには、APIをつかうなりしてスタティックテキストをつかうかなりします。

  ここのお隣、DelphiQ&A掲示板の投稿ですが…
http://madia.world.coocan.jp/cgi-bin/DelphiBBS/wwwlng.cgi?print+200402/04020003.txt

  こちらで同じことが質問されていますので、参考にしてみてください。
Delphiのコードではありますけど、基本的にVBと変わりないです。

※ 変わりなくない部分について
・HRGN型は、Cardinal型——4バイトの符号なし整数値です。入れ物を用意しておけば十分なので、Long型でいいでしょう。
・CreateEllipticRgn, SetWindowRgn これらがAPIです。
API情報については、おそらくネットですぐに見つかるでしょう。リージョンの使い道は多いそうなので、VBのサンプルも見つかると思いますよ。

編集 削除
いちゆ  2004-02-12 16:20:02  No: 81940  IP: [192.*.*.*]

気になったんで自分のうちでやってみたんだが、
リージョンの設定が悪いのか、ウィンドウの透過ができていないのか怪しい動きになった。
それなりのAPIとウィンドウズのウィンドウ描写関係のシステムがわからないとできないらしい。

編集 削除
魔界の仮面弁士  2004-02-12 17:05:11  No: 81941  IP: [192.*.*.*]

VB6以下なら、Layered Window にしてカラーキーを指定すればOKです。
例えば下記は、フォーム上の「白い部分」を透過させます。(API宣言は省略しています)

'要 Win2000以降
Private Sub Form_Load()
    Me.BackColor = vbWhite
    SetWindowLongW hWnd, GWL_EXSTYLE, WS_EX_LAYERED
    SetLayeredWindowAttributes hWnd, vbWhite, 0&, LWA_COLORKEY
End Sub


# VB.NETの場合は、TransparencyKeyプロパティで設定できたような
# 気がしますが、手元にVisual Studio.NETが無いので試せません。m(_ _)m

編集 削除
のび太とか言うなさん。  2004-02-17 08:46:49  No: 81942  IP: [192.*.*.*]

おおお!出来ました!
魔界の仮面弁士さんありがとうございました。
ちなみにLabelの背景色も白にすれば、背景も透明になって文字だけが表示されました。どうもです!

編集 削除