フォームを最前面に(T)             <TOP>


SetWindowPos 指定のウィンドウサイズ・位置・Zオーダー(ウィンドウの重なる順)を設定する


ノーマル状態
    起動状態

他のアプリケーションと重なった場合は背面に



最前面状態

    初期状態

他のアプリケーションと重なった場合でも最前面に

 

'================================================================
'= フォームを最前面に

'=    (SetWindowPos.bas)
'================================================================
#include "Windows.bi"

' ウィンドウのサイズ、位置、および Z オーダーを設定。(ウィンドウの重なり順のことを「Zオーダー」といいZオーダーのトップに置くと一番手前に表示される)
Declare Function Api_SetWindowPos& Lib "user32" Alias "SetWindowPos" (ByVal hWnd&, ByVal hWndInsertAfter&, ByVal X&, ByVal Y&, ByVal CX&, ByVal CY&, ByVal uFlags&)

#define HWND_BOTTOM 1                   'ウィンドウを最背面に配置
#define HWND_NOTOPMOST (-2)             'ウィンドウを常に最前面に配置(他のウィンドウがHWND_TOPMOSTに配置されている場合はその配下)
#define HWND_TOP 0                      'ウィンドウを最前面に配置
#define HWND_TOPMOST (-1)               'ウィンドウを常に最前面に配置

#define SWP_SHOWWINDOW &H40             'ウインドウを表示する
#define SWP_NOSIZE &H1                  'ウインドウの現在のサイズを保持する
#define SWP_NOMOVE &H2                  'ウインドウの現在位置を保持する

Var Shared Button1 As Object
Button1.Attach GetDlgItem("Button1")

Declare Sub MainForm_Start edecl ()
Declare Sub Form_State edecl ()

Var Shared FLG As Byte

'================================================================
'= 
'================================================================
Sub MainForm_Start()
    FLG = 0
    Form_State
End Sub

'================================================================
'= 
'================================================================
Declare Sub Button1_on edecl ()
Sub Button1_on()
    FLG = Not FLG
    Form_State
End Sub

'================================================================
'= 
'================================================================
Sub Form_State()
    Var Ret As Long

    If FLG = 0 Then
        Ret = Api_SetWindowPos(GethWnd, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_SHOWWINDOW Or SWP_NOMOVE Or SWP_NOSIZE)
        Button1.SetWindowText "「常に手前に表示」する"
        SetWindowText "現在は「ノーマル」状態です"
    Else
        Ret = Api_SetWindowPos(GethWnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_SHOWWINDOW Or SWP_NOMOVE Or SWP_NOSIZE)
        Button1.SetWindowText "「常に手前に表示を解除」する"
        SetWindowText "現在は「常に手前に表示」状態です"
    End If
End Sub

'================================================================
'= 
'================================================================
While 1
    WaitEvent
Wend
Stop
End