ふぢのVB小技集

ウィンドウを常に最前面にしたい。

(質問)
ウィンドウを常に最前面にするにはどうするのでしょうか?



(回答)
WindowsAPIの'SetWindowPos'を使用します。



(解説)
WindowsAPIの'SetWindowPos'の使用方法は以下の通りです。

標準モジュール、またはFormのGeneralプロシージャに以下の宣言文を追加する
'*************************************************************
'ウィンドウの位置やサイズ、表示を設定するAPI
'*************************************************************

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

'hWndInsertAfterに指定する値の定義
Const HWND_TOP = 0           '手前にセット
Const HWND_BOTTOM = 1        '後ろにセット
Const HWND_TOPMOST = -1      '常に手前にセット
Const HWND_NOTOPMOST = -2    '常に手前を解除

'wFlagsに指定する値の定義
Const SWP_SHOWWINDOW = &H40  'ウィンドウを表示する
Const SWP_NOSIZE = &H1       'ウィンドウのサイズを変更しない
Const SWP_NOMOVE = &H2       'ウィンドウの位置を変更しない



FormのLoadイベントプロシージャ等に以下のように処理を記述する。
Private Sub Form_Load()
    Dim mHwnd As Long

    'フォームのハンドルを取得する
    mHwnd = FrmTest.hwnd

    'ウィンドウを常に手前に表示
    Ret = SetWindowPos(mHwnd, HWND_TOPMOST, 0, 0, 0, _
                       0, SWP_SHOWWINDOW Or SWP_NOMOVE Or SWP_NOSIZE)
End Sub


SetWindowAPIには、他にもたくさんの機能があります。詳しくはWindowsAPIの書籍等を読んでください。



戻る