DOBON.NET DOBON.NETプログラミング掲示板過去ログ

ウィンドウの最背面表示について

分類:[.NET]

はじめて投稿するtosと申します。

開発環境
VB.NET
OS:WinXP Pro

ウィンドウを最背面表示にする方法を調べています。
SetParent API関数を使って 親ウインドウを "Program Manager" にするという
情報を見つけたので試したのですができませんでした。

下記は、Form1 に Botton をはりつけ、ボタンを押したら最背面表示に
しようとしているコードです。
実際に動作させると、ボタンを押した一瞬ウィンドウが消えて、またすぐ
通常の状態で表示されます。

その他、気になるところとして、SetParentの第一引数で Me.Handle.ToInt32 を
指定してますがこれが正しいか分かりません。VB6で Form1.hwnd としている
サンプルをいくつか見つけられたのですが、.Netでは Me.Handle.ToInt32 で
あってるのでしょうか?

よろしくお願いします。

■Form1.vb
--------------------------------------------------------------------------
Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal cnm As String, ByVal cap As String) As Long
Declare Function SetParent Lib "user32" (ByVal hWndChild As Long, ByVal hWndNewParent As Long) As Long

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim i As Long
Dim winhdl As Long
winhdl = FindWindow(vbNullString, "Program Manager")
i = SetParent(Me.Handle.ToInt32, winhdl)
End Sub
--------------------------------------------------------------------------

以上
> .Netでは Me.Handle.ToInt32 であってるのでしょうか?

引数の型をIntegerにしているならそれでよいと思います。

旧VBのLong型は4バイト、VB.NETのLong型は8バイト、Integer型は4バイトです。
なので、旧VBでLongとしていたものはIntegerとする必要があります。

この変更だけでたぶん大丈夫じゃないでしょうか。
2003/10/15(Wed) 12:58:57 編集(投稿者)

よねKENさん、コメントありがとうございます。

> 旧VBのLong型は4バイト、VB.NETのLong型は8バイト、Integer型は4バイトです。
> なので、旧VBでLongとしていたものはIntegerとする必要があります。

Long型となってた箇所をすべてInt32型としたことにより無事できました。
参考までに動作確認済みのソースを記載します。

■Form1.vb
--------------------------------------------------------------------------
Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal cnm As String, ByVal cap As String) As Int32
Declare Function SetParent Lib "user32" (ByVal hWndChild As Int32, ByVal hWndNewParent As Int32) As Int32

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim i As Int32
Dim winhdl As Int32
winhdl = FindWindow(vbNullString, "Program Manager")
i = SetParent(Me.Handle.ToInt32, winhdl)
End Sub
--------------------------------------------------------------------------

以上
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板