MASM32编程实现窗口渐入渐出效果

简介: MASM32编程实现窗口渐入渐出效果

函数原型为:

 

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
}
相关文章
|
18小时前
|
API
MASM32编程获取任务栏高度
MASM32编程获取任务栏高度
|
20小时前
用MASM32编程截取屏幕
用MASM32编程截取屏幕
|
4月前
|
存储 编解码 Windows
EasyX图形库学习(三、用easyX控制图形界面中的小球、图片-加载、输出)
EasyX图形库学习(三、用easyX控制图形界面中的小球、图片-加载、输出)
|
3月前
|
C#
MDI窗口嵌入,我爱惨你了
小五在WinForm项目中遇到多线程问题。起初误以为MDI子窗体与主窗体异步,但实际上它们共享同一线程。在尝试解决耗时操作影响关键方法执行时,小五先错误地使用MDI子窗体,后通过`Task.Factory.StartNew`创建新线程。然而,更新界面时遇到跨线程操作错误。最终,小五学会使用`Invoke`处理UI线程同步,但发现`Invoke`使线程回到主线程,导致问题复发。总结:MDI子窗体与主窗体同线程,需谨慎处理UI线程同步。
|
4月前
win32编程 -- 泡泡跳动
win32编程 -- 泡泡跳动
29 0
|
C语言
c语言通过easyx窗口实现小球打砖块的游戏
c语言通过easyx窗口实现小球打砖块的游戏
153 0
|
程序员 C语言 开发工具
Qt编写自定义控件57-直方波形图
一、前言 直方波形图控件非原创控件,控件大全中大概有20-30个控件非自己原创,而是参考了网上开源的代码,自己加以整理和完善,新增了插件的代码使得可以直接集成到QtDesigner或者QtCreator中。
1172 0
|
程序员 C语言
Qt编写自定义控件60-声音波形图
一、前言 这个控件源自于一个音乐播放器,在写该音乐播放器的时候,需要将音频的数据转换成对应的频谱显示,采用的fmod第三方库来处理(fmod声音系统是为游戏开发者准备的革命性音频引擎,非常强大和牛逼),fmod负责拿到音频数据对应的采样频谱数据,然后传给这个控件进行绘制即可,本控件主需要专注于绘制即可,这样fmod对应封装的类专注于音频采集等处理,实现了隔离,修改和增加功能比较方便,声音波形图控件除了可以设置采样的深度以外,还支持三种数据样式展示,线条样式、柱状样式、平滑样式。
1840 0
win10系统下如何用命令行的方式打开画图软件以及画图板汉字字体如何由竖排改为横排?
按 win + r 后输入命令 mspaint  再 回车 即可!如下图所示: 画图板正常默认的汉字排列是横排,但输入字体时选用不慎变为竖排,该怎样恢复为横排呢? 方法:字体名前不带@的,就是横排的,带@的就是竖排的。
1759 0