- 題名: 複数のコントロール上をまたぐように画像や線を描画する方法
- 日時: 2012/03/01 6:13:01
- ID: 30004
- この記事の返信元:
- (なし)
- この記事への返信:
- [30005] Re[1]: 複数のコントロール上をまたぐように画像や線を描画する方法2012/03/01 8:02:33
- [30009] Re[1]: 複数のコントロール上をまたぐように画像や線を描画する方法2012/03/01 9:36:58
- ツリーを表示
■No30004に返信(宝玉さんの記事)
Label + Regionの例
Label1.BackColor = Color.Black
Label1.Text = ""
Dim path = New GraphicsPath({New Point(0, 0), New Point(Label1.Width, Label1.Height),
New Point(Label1.Width + 10, Label1.Height + 10), New Point(10, 10)},
New Byte() {CByte(PathPointType.Start), CByte(PathPointType.Line),
CByte(PathPointType.Line), CByte(PathPointType.Line)})
path.FillMode = FillMode.Alternate
Label1.Region = New Region(path)
2012/03/01(Thu) 10:32:19 編集(投稿者)
■No30004に返信(宝玉さんの記事)
> やりたいのは、通常のFrom上にいくつかコントロール(RichTextBoxやPictureBox
> ListBoxなど様々です)を配置した上で、それらの「上」に重ねるように
> 画像を表示したいのです。
> 旧VBにあったImageやLine、Shapeのように……と言えばおわかり頂けるでしょうか?
旧 VB の場合でいうと、RichTextBox/PictureBox/ListBoxは
フォーム上層に配置されるコントロールであり、それに対して
Image/Line/Shape などは、中層に配置されるものですよね。
だとしたら、「上(手前方向)」ではなく「下(奥側)」になってしまいますが…。
> ・リアルタイムで操作が入るので、「他FormをTopMost、Oqpacy=0で配置」という手段は使えない
Oqpacy は Opacity のことだと読み替えますが、それを 0.0 にしてしまうと
何も見えなくなってしまいます。TransparencyKey のことでしょうか?
TransparencyKey での透過は、モニタが32bitカラー設定だと、
うまくいかなかったりもしますけれどね。
http://support.microsoft.com/kb/822495
> (フォーカスがそちらに移ってしまうため)
マウス操作を透過させるだけなら、こんな感じで。
Public Class Form2
Protected Overrides ReadOnly Property CreateParams As CreateParams
Get
Dim p As CreateParams = MyBase.CreateParams
If Not MyBase.DesignMode Then
Const WS_EX_NOACTIVATE As Integer = &H8000000
Const WS_EX_TRANSPARENT As Integer = &H20
p.ExStyle = p.ExStyle Or WS_EX_NOACTIVATE Or WS_EX_TRANSPARENT
End If
Return p
End Get
End Property
End Class
関連情報として、このあたりも。
http://homepage1.nifty.com/yasunari/VB/VB2005/ScreenKeyBoardMaking.htm
> DirectXのような手段でデスクトップというか、画面上に直接描画でもできればよいのですが……
GetDC(IntPtr.Zero) API で取得したデバイスコンテキストハンドルを使う事で、
画面上に直接描画することができます。(最後に ReleaseDC も必要です)
ただしこの場合、Graphics クラス経由で描画できるのは、
プライマリモニターのみという制限が入ります。
もし、それ以外のモニターに対しても描画したいのであれば、
描画処理も API を利用して処理することになります。
分類:[.NET]
当方、VB2010+.NetFramework各種、OSはXPにて開発を行っております。
いろいろと調べてみましたがどうしても自力では実現できそうにないので
皆様のお知恵をお貸し頂ければと想います。
やりたいのは、通常のFrom上にいくつかコントロール(RichTextBoxやPictureBox
ListBoxなど様々です)を配置した上で、それらの「上」に重ねるように
画像を表示したいのです。
旧VBにあったImageやLine、Shapeのように……と言えばおわかり頂けるでしょうか?
これがどうしても自力では解決できません。
条件としては
・他Controlの上に画像や線を描画したい
・複数のControlをまたぐ(Button1中央からButton2中央まで矢印をひく、など)
・画像のない部分は透過し、「下のControlが見える」ようにしたい
・リアルタイムで操作が入るので、「他FormをTopMost、Oqpacy=0で配置」という手段は使えない(フォーカスがそちらに移ってしまうため)
となります。
DirectXのような手段でデスクトップというか、画面上に直接描画でもできればよいのですが……
どうかよろしくお願いします。