• 締切済み

スクリーンに四角い線(中抜き状態)を書きたい

Win32 APIを使って、 スクリーンに四角い線(中抜き状態)を書き、 そこにウィンドウをずらしても その線が常に上位で表示された状態にしたいのですが、 そのようなことは可能でしょうか。

みんなの回答

回答No.2

VB5の環境はないのでVB6のコードですが、たぶん同じでしょう。 Private Declare Function GetWindowLong Lib "user32" Alias _ "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long Private Declare Function SetWindowLong Lib "user32" Alias _ "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, _ ByVal dwNewLong As Long) As Long 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 Declare Function SetLayeredWindowAttributes Lib "user32" _ (ByVal hwnd As Long, ByVal crKey As Long, ByVal bAlpha As Byte, _ ByVal dwFlags As Long) As Long Private Const HWND_TOPMOST = -1 Private Const SWP_NOMOVE = &H2 Private Const SWP_NOSIZE = &H1 Private Const GWL_EXSTYLE = -20 Private Const WS_EX_LAYERED = &H80000 Private Const LWA_COLORKEY = 1 '※※※ Formのプロパティ BorderStyle を 0 にしておく Private Sub Form_Load() With Me .BackColor = vbBlack .AutoRedraw = True Line (400, 400)-(4000, 4000), vbRed, B Call SetWindowPos(.hwnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE + SWP_NOSIZE) Call SetWindowLong(.hwnd, GWL_EXSTYLE, GetWindowLong(Me.hwnd, GWL_EXSTYLE) + WS_EX_LAYERED) Call SetLayeredWindowAttributes(.hwnd, vbBlack, 0, LWA_COLORKEY) End With End Sub

skyhand777
質問者

お礼

ありがとうございます。 また、動作確認を試してみたいと思います。

回答No.1

スクリーンに直接描画すると、ウィンドウに隠れてしまいます。 最前面(TopMost)の透明ウィンドウに描画します。 VB.NETならWin32APIは不要ですが、VB6ですか? Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load With Me .FormBorderStyle = Windows.Forms.FormBorderStyle.None .TransparencyKey = Color.AliceBlue .BackColor = .TransparencyKey .TopMost = True End With End Sub Private Sub Form1_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles Me.Paint e.Graphics.DrawRectangle(Pens.Red, 0, 0, 200, 100) End Sub

skyhand777
質問者

お礼

返答ありがとうございます。 >VB.NETならWin32APIは不要ですが、VB6ですか? 環境はVB5です。 なるべく言語に依存しない形がよかったので、 Win32APIでの方法がわかるとうれしいです。

関連するQ&A