- ベストアンサー
コントロールの上に描画
Visual C# Express Edition で開発を行っています。 ユーザーコントロールで前景(背景の逆という意味で・・)を描画したくて困っています。 どういうことかというと、ユーザーコントロール上にボタン・リストボックス等を配置して、それらの上に1枚の大きな絵を半透明で描画したいのです。 ユーザーコントロールのOnPaintやPaintイベントで描画しても背景としてしか描画されず、描画された絵の上にコントロールが乗ってしまいます。 上記処理の実現方法がありましたら、教えて下さい。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
C#でできるか分かりませんが、ウィンドウ自体にアルファ値を設定できます。 コントロール群が被さる程度の大きさのウィンドウを別に作成し、そのウィンドウのアルファ値を操作してみてはいかがでしょう?
その他の回答 (2)
- clsdi99
- ベストアンサー率63% (31/49)
なるほど~ たしかにSetLayeredWindowAttributesなどは子ウィンドウに設定できませんでしたね^^; そうなると、punioさんのやられているようにTopMostで別ウィンドウを作成するしかないですかね・・・ でも気になるのは、コントロールにコンボボックスがあった場合、ドロップリスト部がTopMostの半透明ウィンドウのさらに上に出ちゃったりしないですかね・・
お礼
リストは前面にでますね・・・(´д`;) まぁこれはこれでいいかな、と。 他の方法は・・・ちょっと無理っぽいですかね~。 一応この方法と今後の試行錯誤をYahooBlogに書く(つもり)ので、このページを見に来てくれた人のためにURL乗っけておきます。 http://blogs.yahoo.co.jp/yse_99/folder/1404297.html clsdi99さんありがとうございました
- shobon
- ベストアンサー率66% (14/21)
既に描画自体の処理は心得ておられるようなので、簡単に。 ラベル(等の描画可能なコントロール)をコントロール上に貼り付けて、その下に各種コントロールを配置されると良いのでは?
お礼
回答ありがとうございます。 ラベルで試してみたのですが、背景として透過できるのはコントロールの親のみ(Label.Parentに指定した物が背景となる?)という点と、イベントが下のコントロールに届かないという問題があり、この方法では実現できそうもありませんでした。 私の実装方法がまずいのかも知れませんが・・(´д`;)
お礼
回答ありがとうございます。 私もその方法でいけると思い試したのですが、透過できるのはトップレベルのWindowだけ見たいですね。(いろいろ試しましたが子Windowではできませんでした) そこでトップレベルの半透明Form(Window)を作ってそれをTopMostで表示でできたんですが、TopMostなので他のWindowがアクティブの時でも最前面に見えてしまうんですよね。(フォーカス失ったらTopMostやめる、という処理を入れればいいんですが) やはりこの方法で行くしか無いんですかね~。