ウィンドウを常に手前に表示する

ウィンドウを常に手前に表示するテクニックです。
SetWindowPos関数を使用して実現できます。

サンプル(32bit) ダウンロード

'Windowの生成API
Private Declare Sub 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)
Private Const HWND_TOPMOST = -1      '常に手前に表示
Private Const SWP_SHOWWINDOW = &H40  'Windowの表示
Private Const SWP_NOACTIVATE = &H10  'アクティブにしない
Private Const SWP_NOMOVE = &H2       '移動しない
Private Const SWP_NOSIZE = &H1       'サイズ変更しない

Private Sub Form_Activate()
    
    Call SetWindowPos(Me.hwnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_SHOWWINDOW Or SWP_NOSIZE Or SWP_NOMOVE)

End Sub

サンプル解説

フォームがアクティブになった時に、SetWindowPos関数でフォームを常に手前に表示します。
(ロードイベントだと、他のウィンドによって「常に手前に表示状態」が破棄される可能性があるのでアクティブイベントで再度「常に手前に表示状態」にしています)

引数は次の通りです。
(引数の名前は、Declare Functionで指定したものです)

メンバー I/O 説明
hwnd In 表示するウィンドウのハンドル
hWndInsertAfter In Zオーダー
サンプルでは、HWND_TOPMOSTを指定して常に手前に表示にしています。
x In 表示位置のX座標
サンプルは、動作フラグにSWP_NOMOVEを指定しているため無視されます。
y In 表示位置のY座標
サンプルは、動作フラグにSWP_NOMOVEを指定しているため無視されます。
cx In ウィンドウの幅
サンプルは、動作フラグにSWP_NOSIZEを指定しているため無視されます。
cy In ウィンドウの高さ
サンプルは、動作フラグにSWP_NOSIZEを指定しているため無視されます。
wFlags In 動作フラグ
サンプルではウィンドウを表示して、サイズ・位置を変更しないようにしています。

座標情報はすべてピクセルです。


[ Window Close ]