函数原型为:
BOOL
HWND hwnd, //指定产生动画窗口的句柄;
DWORD dwTime, //指明动画持续的时间(以微秒计),完成一个动画的标准时间为200微秒;
DWORD dwFlags //指定动画类型。这个参数可以是一个或多个标志的组合。
);
dwFlags有效值::
AW_SLIDE:使用滑动类型。缺省为滚动类型。使用AW_CENTER标志时被忽略;
AW_ACTIVATE:激活窗口。在使用了AW_HIDE标志后不能使用这个标志;
AW_BLEND:实现淡出效果。只有当hWnd为顶层窗口的时候才可以使用此标志;
AW_HIDE:隐藏窗口,缺省则显示窗口;
AW_CENTER:若使用了AW_HIDE标志,则使窗口向内重叠,即收缩窗口;若未使用AW_HIDE标志,则使窗口向外扩展,即展开窗口;
AW_HOR_POSITIVE:自左向右显示窗口。该标志可以在滚动动画和滑动动画中使用。当使用AW_CENTER标志时,该标志将被忽略;
AW_VER_POSITIVE:自顶向下显示窗口。该标志可以在滚动动画和滑动动画中使用。当使用AW_CENTER标志时,该标志将被忽略;
AW_VER_NEGATIVE:自下向上显示窗口。该标志可以在滚动动画和滑动动画中使用。当使用AW_CENTER标志时,该标志将被忽略;
返回值:如果函数成功,返回值为非零;如果函数失败,返回值为零。
注:
如果
1、窗口使用了窗口边界;
2、窗口已经可见仍要显示窗口;
3、窗口已经隐藏仍要隐藏窗口。
函数调用将失败。
演示代码:
;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< ; FileName: AninWin.asm ; Author: Purple Endurer ; Functiion: Demo the way to use AnimateWindow() ; DevEnv: Win XP SP2 + MASM32 v7 ; log ; ------------------------------ ; 2008-09-18 Created! ;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< .586 .model flat, stdcall option casemap:none ;------------------ incboth macro incl include d:/masm32/include/incl.inc includelib d:/masm32/lib/incl.lib endm include d:/masm32/include/windows.inc incboth kernel32 incboth user32 incboth gdi32 incboth comctl32 incboth shell32 ; prototypes DlgProc PROTO :HWND, :UINT, :WPARAM, :LPARAM ; .const IDD_dlgSetState equ 1000 .data g_szAnimWin db "AnimateWindow", 0 g_szUser32Dll db "user32.dll", 0 .data? hInstance HINSTANCE ? pAnimateWindow DD ? .code start: invoke GetModuleHandle, NULL mov [hInstance], eax invoke DialogBoxParam, [hInstance], IDD_dlgSetState, NULL, OFFSET DlgProc, NULL invoke ExitProcess, NULL invoke InitCommonControls DlgProc proc hWnd:HWND, wMsg:UINT, lParam:LPARAM, wParam:WPARAM .if wMsg == WM_INITDIALOG ;--- 获取AnimateWindow()地址 invoke SendMessage, [hWnd], WM_SETTEXT, NULL, OFFSET g_szAnimWin invoke GetModuleHandle, OFFSET g_szUser32Dll invoke GetProcAddress, eax, OFFSET g_szAnimWin mov [pAnimateWindow], eax ;--- 如果取得地址,则渐入显示对话框窗口 .if [pAnimateWindow] push AW_BLEND + AW_ACTIVATE push 400h ; time push [hWnd] ; window Handle call [pAnimateWindow] .endif invoke InvalidateRect, hWnd, 0, TRUE .elseif wMsg == WM_CLOSE ;--- 如果取得地址,则渐出关闭对话框窗口 .if [pAnimateWindow] push AW_BLEND + AW_HIDE push 400h push [hWnd] call [pAnimateWindow] .endif invoke EndDialog, [hWnd], NULL .else mov eax, FALSE ret .endif xor eax, eax ret DlgProc endp end ;;;;;;;;;;; ;rsrc.rc ;;;;;;;;;;; #include "/masm32/include/resource.h" #define IDC_lblAppInfo 3009 #define IDD_dlgSetState 1000 IDD_dlgSetState DIALOG 10, 10, 120, 114 STYLE 0x0004 | DS_CENTER | WS_CAPTION | DS_SYSMODAL | WS_SYSMENU | WS_VISIBLE | WS_OVERLAPPED | DS_MODALFRAME | DS_3DLOOK CAPTION "Get Color" FONT 9, "宋体" { LTEXT "purpleendurer@163.com/n2004.04.02 广西河池/n开发环境:MASM32 V8", IDC_lblAppInfo, 0, 75, 105, 30, WS_DISABLED + SS_CENTER }