VBでメディアプレイヤーで動画を再生させてます。
再生している動画のお上に、円を書きたいです。
モニターの見た目でかまいません。
一つの方法ですが、
透明化の設定をした、フォームを最善面に表示して、
透明化設定以外の色で円を書けば、実装できますが、
大きな領域で、透明化フォームを表示させると、パフォーマンスに
大きな影響がでてしまいます。
他の方法はないでしょうか?
レイヤード ウィンドウのかわりに、
円形のリージョンを切ったウィンドウだとどうでしょう?
んー…
描こうとする円自体は、大きいの?
大きくなければ、フォーム自体を小さめにして
フォーム自体を移動させることで何とかならないだろうか?
用途的に合わないかもしれないが…
あと気になったのだが、透明フォームってレガシーVBで
無理やり表示してるの?
もしかして実は.NETのネタだったりしない?
アプローチを間違えています。
SDK的には、 IWMPGraphEventHandler などを用いて FilterGraph のインスタンスを取得し、
そこからVMRのインスタンスを得て、そのVMRでミキシングするのでしょう。
# でも、OCX版では使えなかったかも。
一般的には、特殊な表示を行いたい場合は、WMPを使うのではなく、 DirectShow
を直接用いて、そういう機能を持つフィルタを追加するとか、VMRを利用して
合成するように作ります。
フォーム透過OCX Ver 2.00(KTrans32)
とMicrosoft Tablet PC Type Libraryを使用して
それぞれのコントロールをフォームに貼り付けて、
次の手順のコードをForm_Loadに書けば、自由に線がマウスで書けますよ。
パフォーマンス的には軽いと思います。
フォーム透過OCX Ver 2.00(KTrans32)
とMicrosoft Tablet PC Type Libraryを使用して
それぞれのコントロールをフォームに貼り付けて、
次の手順のコードをForm_Loadに書けば、自由に線がマウスで書けますよ。
パフォーマンス的には軽いと思います。
すみません、送信ボタンをダブルクリックしてしましました。
削除できねーahh
とりあえず俺はこんな感じに作ってみました。
描いて(半透明状態)->ホイールクリック(透明状態)
メディアプレイヤー上で描けるかは不明です。
Option Explicit
Private Declare Function SetWindowPos _
Lib "user32" (ByVal hWnd As Long, ByVal hWndInsertAfter As Long, _
ByVal x As Long, ByVal y As Long, ByVal Cx As Long, _
ByVal Cy As Long, ByVal wFlags As Long) As Long
Private Const conHwndTopmost = -1
Private Const conHwndNoTopmost = -2
Private mode_ As Boolean
Private Sub Form_Load()
SetWindowPos Me.hWnd, conHwndTopmost, _
Me.Left / Screen.TwipsPerPixelX, _
Me.Top / Screen.TwipsPerPixelY, _
Me.Width / Screen.TwipsPerPixelX, _
Me.Height / Screen.TwipsPerPixelY, 0
Me.Top = 0
Me.Left = 0
KTrans1.LayeredFlag = 1
KTrans1.TransMode = 4
End Sub
Private Sub InkPicture1_MouseDown(ByVal Button As MSINKAUTLibCtl.InkMouseButton, ByVal Shift As MSINKAUTLibCtl.InkShiftKeyModifierFlags, ByVal pX As Long, ByVal pY As Long, Cancel As Boolean)
If Button = IMF_Middle Then
If mode_ = False Then
KTrans1.LayeredFlag = 0
KTrans1.TransMode = 4
mode_ = True
Else
KTrans1.LayeredFlag = 1
KTrans1.TransMode = 4
mode_ = False
End If
End If
If Button = IMF_Right Then
End
End If
End Sub
Private Sub InkPicture1_MouseWheel(ByVal Button As MSINKAUTLibCtl.InkMouseButton, ByVal Shift As MSINKAUTLibCtl.InkShiftKeyModifierFlags, ByVal Delta As Long, ByVal x As Long, ByVal y As Long, Cancel As Boolean)
If Button = IMF_Middle Then
KTrans1.LayeredAlpha = KTrans1.LayeredAlpha + Delta
End If
End Sub
Private Sub InkPicture1_Stroke(ByVal Cursor As MSINKAUTLibCtl.IInkCursor, ByVal Stroke As MSINKAUTLibCtl.IInkStrokeDisp, Cancel As Boolean)
KTrans1.LayeredFlag = 1
KTrans1.TransMode = 4
End Sub
遅レスですみません。
見た目でよいのなら,デスクトップのデバイスコンテキストを取得し,
デスクトップにGDIで直接描画すればできると思います。