フォームをアニメーション起動・終了(U)             <TOP>


起動時フォームは画面左上から中央に、終了時はタスクバー右端に移動して終了します。

DrawAnimatedRects アニメートウィンドウ

 

フォームは可視なしに設定します。

 

参照

フォームをアニメーション起動・終了(W)

 

'================================================================
'= フォームをアニメーション起動・終了(U)
'=    (DrawAnimatedRects.bas)
'================================================================
#include "Windows.bi"

Type RECT
    Left   As Long
    Top    As Long
    Right  As Long
    Bottom As Long
End Type

' ウィンドウの矩形寸法を取得
Declare Function Api_GetWindowRect& Lib "user32" Alias "GetWindowRect" (ByVal hWnd&, lpRect As RECT)

' 矩形のアニメーションを実行
Declare Function Api_DrawAnimatedRects& Lib "user32" Alias "DrawAnimatedRects" (ByVal hWnd&, ByVal idAni&, lprct As RECT, lprctEnd As RECT)

' クラス名またはキャプションを与えてウィンドウのハンドルを取得
Declare Function Api_FindWindow& Lib "user32" Alias "FindWindowA" (ByVal lpClassName$, ByVal lpWindowName$)

' クラス名 、または キャプションを与えてウィンドウのハンドルを取得
Declare Function Api_FindWindowEx& Lib "user32" Alias "FindWindowExA" (ByVal hWndParent&, ByVal hWndChildAfter&, ByVal lpszClass$, ByVal lpszWindow$)

' アニメーションモード
#define IDANI_OPEN &H1          'クローズ状態からオープン状態へのアニメーション
#define IDANI_CLOSE &H2         'オープン状態からクロース状態へのアニメーション
#define IDANI_CAPTION &H3       'アニメーション矩形にタイトルバーを含める

#define CLASS_TASKBAR "Shell_TrayWnd"
#define CLASS_TASKTRAY "TrayNotifyWnd"

Var Shared MainForm As Object
Var Shared Button1 As Object

MainForm.Attach GethWnd
Button1.Attach GetDlgItem("Button1") : Button1.SetFontSize 14

'================================================================
'=
'================================================================
Declare Sub MainForm_Start edecl ()
Sub MainForm_Start()
    Var rct As RECT
    Var rctEnd As RECT
    Var frmLeft As Long
    Var frmTop As Long
    Var Ret As Long

    ' アニメーションを開始する(Close状態)矩形を指定
    rct.Top = 0
    rct.Bottom = 0
    rct.Left = 0
    rct.Right = 0

    ' アニメーションを終了する(Open状態)矩形を指定
    ' メインフォームの境界矩形の寸法を取得
    Ret = Api_GetWindowRect(GethWnd, rctEnd)

    ' アニメーションの実行
    Ret = Api_DrawAnimatedRects(GethWnd, IDANI_OPEN Or IDANI_CAPTION, rct, rctEnd)

    frmLeft = (GetdeviceCaps(8) - GetWidth) / 2
    frmTop = (GetDeviceCaps(10) - GetHeight) / 2

    MainForm.MoveWindow frmLeft, frmTop
    MainForm.ShowWindow -1
End Sub

'================================================================
'=
'================================================================
Declare Sub Button1_on edecl ()
Sub Button1_on()
    Var rct As RECT
    Var rctEnd As RECT

    Var hTaskBar As Long
    Var hTaskTray As Long
    Var Ret As Long

    hTaskBar = Api_FindWindow(CLASS_TASKBAR, ByVal 0)
    If hTaskBar Then
        hTaskTray = Api_FindWindowEx(hTaskBar, 0&, CLASS_TASKTRAY, ByVal 0)
        If hTaskTray Then
            Ret = Api_GetWindowRect(hTaskTray, rctEnd)
            Ret = Api_GetWindowRect(GethWnd, rct)
            Ret = Api_DrawAnimatedRects(GethWnd, IDANI_CLOSE Or IDANI_CAPTION, rct, rctEnd)
        End If
    End If
    End
End Sub

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