• 締切済み

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

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

  • illustratorでパスファインダを使用した場合きれいに中抜きできない

    WindowsXPでAdobe Illustrator9.0を使っています。 長方形の四角の上にアウトラインをとった文字を乗せて、 パスファインダで中抜きの画像を作っているのですが、 中抜きにすると抜いた部分が全体的に小さめ(細身)になってしまいます。 拡大表示にしてみると全く同じように見えるのですが、 100%表示にするとやはり小さめです。 ためしに長方形に別の色で文字画像(アウトライン済み)を乗せたものと 中抜きにしたものを並べてレーザープリンタで印刷したところ、 やはり100%表示にした時と同様に、中抜きした部分が小さくなって いたので、Illustratorの画面上だけのことではないようです。 これはレーザーなどの簡易プリンタのせいなのでしょうか。 それともIllustratorの問題なのでしょうか。 別の色で文字を乗せた状態と同様に見えるように、 中抜きをする方法をご存知の方がいらっしゃいましたら教えてください。 よろしくお願いします。

  • PCのスリーブ状態とスクリーンセーバー状態の違い?

    WIN7のデスクトップPCでスリーブ状態にしたときと スクリーンセーバーブランク状態にしたときの 違いをお教え下さい。

  • スクリーンセーバーが作動しない

    WINDOWS98を使用していますが、スクリーンセーバー を2分間どのキーを触らないと作動するように設定していますが、2分間どのキーを触らないと、スクリーンセーバーが作動し伝言版の文字が表示される時とされない時がありますが、どうしてでしょうか?自分としては、2分間キーを触らないと、常に伝言版の文字表示をしたいのですが・・・

  • スリープ状態にしようとするとブルースクリーンが表示される

    スリープ状態にしようとすると、 電源ボタンが付いたまま画面が真っ暗になり、 そのままスリープ状態になるかと思ったら2、3分後にブルースクリーンが数秒の間だけ表示されてすぐに再起動してしまいます。 これは稀に見られる現象で、1か月に1回ほど起こるのですが・・・。 OSはwindows vista home premiumで、PCはNECのVW790/Hです。 このような現象が起こるのを防ぐためにはどうすれば良いでしょうか?

  • デスクトップが見えるスクリーンセーバーありませんか?

    タイトルの通り、デスクトップが見えるスクリーンセーバーを探しています。 何がしたいかというと、スクリーンセーバーでパスワードをかけて 操作を出来ないようにしたいのですが、 デスクトップに表示されているウィンドウは表示し続けたいのです。 例えば動画を再生しておいて見れるんだけど、 透明なスクリーンセーバーでロック状態なので 操作は出来ない・・・ こんな事ができる透明なスクリーンセーバーってありませんか? わがまま言って申し訳ないのですが ちょっと急いで探しています。 ご協力お願いします。

  • スクリーンキーボード

    Vistaを使用してます。 「スクリーンキーボードを使用するに」設定しましたが解除方法を 教えてください。PCを立ち上げると常にスクリーンキーボードが 表示されてしまいます。

  • Windows7スクリーンセーバーについて

    Windows7でスクリーンセーバーの設定をすると、デスクトップ画面や開いているブラウザが消えない状態で、それに上書きするような感じでスクリーンセーバーの画像も表示されます。XPの時は、画面が真っ黒になった状態で、スクリーセーバーの画像だけ表示されていた筈ですが、表示の仕様が変更になったのでしょうか。

  • スクリーンセーバーが動きません。

    デスクトップ表示ではスクリーンセーバーが起動しますが EXCELなどのアプリケーションを起動時にスクリーンセーバーが動きません。OSはWin98です。

  • スクリーンからはみ出ないポップアップ(win32api)

    win32apiでアプリケーションを作っています。 右クリックしたときに表示されるポップアップメニューがスクリーンからはみ出ないように、右クリックされた時にポップアップがはみ出るようならポップアップの位置を調整する、ということをしたいです。 その為には表示されるポップアップのサイズが分からないといけないのですが、ポップアップのサイズを得る方法はありますか?大体でやってしまってもあまり問題はないかもしれませんが。 回答よろしくお願いします。

  • スリープ状態とスクリーンセーバーについて?

    環境は、OSが WIN7 IE8 モニタが iiyamaの ProLite E2210HDS 無銭LAN子機 NECの Aterm WL300NU-AG PCが HPのp6440jp 詳しくは「Intel(R) Core(TM) i7 CPU 870」です。 そこで、このPCの設定や今使用しているPCは遠くにいる兄に 譲り受けたものなんですが、なにせ、私はパソコン初心者でして、 このPCは 時間が10分ほどすると自動的にスクリーンセーバーになるし 20分をこえるとスリープ状態になるらしく、 例えばWEB上へファイルをUPしている時にネットが切断されている状態が しばしばあります。そこで、出来れば、スクリーンセーバーは起動してもよいですが せめてファイルがWEBへ上げている時は切断されないようにするには どうしたらよいでしょうか? モニタ?PC?無銭LAN? 今はそれぞれが何かしら各機器に働きかけが無いと判断すれば 自動切断など、便利な機能がついているので どれをどう扱ったらよいか分りません。 そもそも、WIN7は初めて使用するOSでして、 この「スリープ」状態?・・は WIN7から始まった機能なのでしょうか? 申し訳ありませんが、何卒アドバイスの程、よろしくお願い致します。