フォームをアニメーション起動・終了(W) <TOP>
起動時は、タスクバー右端から画面左上に向かってアニメーション起動し、終了時はタスクバー右端に向かってアニメーション終了します。
SetRect RECT構造体の値を設定
DrawAnimatedRects 矩形のアニメーションを実行
参照
'================================================================ '= フォームをアニメーション起動・終了(W)
'= (SetRect.bas) '================================================================ #include "Windows.bi" #define IDANI_OPEN &H1 'クローズ状態からオープン状態へのアニメーション #define IDANI_CLOSE &H2 'オープン状態からクローズ状態へのアニメーション #define IDANI_CAPTION &H3 'アニメーション矩形にタイトルバーを含める Type RECT Left As Long Top As Long Right As Long Bottom As Long End Type ' RECT構造体の値を設定 Declare Function Api_SetRect& Lib "user32" Alias "SetRect" (lpRect As RECT, ByVal X1&, ByVal Y1&, ByVal X2&, ByVal Y2&) ' 矩形のアニメーションを実行 Declare Function Api_DrawAnimatedRects& Lib "user32" Alias "DrawAnimatedRects" (ByVal hWnd&, ByVal idAni&, lprctStart As RECT, lprctEnd As RECT) Var Shared scWidth As Long Var Shared scHeight As Long '================================================================ '= タスクバー右から画面左上方向へアニメート起動 '================================================================ Declare Sub MainForm_Start edecl () Sub MainForm_Start() Var rSource As RECT Var rDest As RECT Var Ret As Long 'スクリーンサイズ取得 scWidth = GetDeviceCaps(8) scHeight = GetDeviceCaps(10) 'スクリーン(rSource)/作成するウインドウサイズ(rDest) Ret = Api_SetRect(rSource, scWidth, scHeight, scWidth, scHeight) Ret = Api_SetRect(rDest, 0, 0, 240, 140) 'アニメート Ret = Api_DrawAnimatedRects(GethWnd, IDANI_CLOSE Or IDANI_CAPTION, rSource, rDest) 'フォームの位置設定 SetWindowSize 240, 140 MoveWindow 0, 0 ShowWindow -1 End Sub '================================================================ '= タスクバー右端に向かってアニメート終了 '================================================================ Declare Sub MainForm_QueryClose edecl () Sub MainForm_QueryClose() Var rSource As RECT Var rDest As RECT Var Ret As Long 'スクリーン(rSource)/作成するウインドウサイズ(rDest) Ret = Api_SetRect(rSource, 0, 0, 240, 140) Ret = Api_SetRect(rDest, scWidth, scHeight, scWidth, scHeight) 'アニメート Ret = Api_DrawAnimatedRects(GethWnd, IDANI_OPEN Or IDANI_CAPTION, rSource, rDest) End Sub '================================================================ '= '================================================================ While 1 WaitEvent Wend Stop End