MASM ImageFader






3.89/5 (12投票s)
一个图像淡入淡出应用程序。它将信息隐藏在图像后面,并在鼠标悬停时淡出图像以显示隐藏的内容。可用于隐藏某些内容,或作为一种时尚的配件。
引言
我想到了一种最初在屏幕上向用户隐藏信息的方法。但如果他知道在哪里点击或将鼠标指针移动到哪里,他应该能够访问这些信息。这个想法是制作一个图像淡入淡出器,它最初显示一个图像,当你悬停时淡出图像。
初始状态
这显示了最初如何显示淡入图像,你无法看到图像后面的内容
淡出状态
在这里你可以看到当你悬停在控件上时控件的样子。它会在短暂的延迟后淡出图像,并显示控件后面的内容。
淡出例程
这里是使用 AlphaBlend
(Win32) 将图像与最初获取的背景图像混合的淡出例程
; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
;
; Procedure: SetTrans
; Parameter: nAlpha (new AlphaValue)
; Version: 1.0
; Date/Author: 10.09.2005, dave (juniorsoft)
; Description: This procedure draws the backround together with the
; new bitmap with a given alphavalue to get a
; transparent effect.
;
; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
SetTrans proc nAlpha:BYTE
local hdc:HDC
local hMemDC:HDC
local hMemDC2:HDC
local hMemDC3:HDC
local hBmpTmp:HBITMAP
local bf:BLENDFUNCTION
;invoke GetWindowDC,hWndBitmap
invoke GetDC,hWndBitmap
mov hdc, eax
invoke CreateCompatibleDC,hdc
mov hMemDC,eax
invoke SelectObject,hMemDC,hBmpBack
;Create copy of Bitmap
invoke CreateCompatibleDC,hdc
mov hMemDC2,eax
invoke CreateCompatibleBitmap,hdc,nPicWidth,nPicHeight
mov hBmpTmp, eax
invoke SelectObject,hMemDC2,hBmpTmp
invoke BitBlt,hMemDC2,0,0,nPicWidth,nPicHeight,hMemDC,0,0,SRCCOPY
;Alpha blending bitmap over background
mov bf.AlphaFormat, 0
mov bf.BlendFlags, 0
mov bf.BlendOp, AC_SRC_OVER
mov al,nAlpha
mov bf.SourceConstantAlpha, al
invoke CreateCompatibleDC,hdc
mov hMemDC3,eax
invoke SelectObject,hMemDC3,hBitmap
;Call the AlphaBlend Func direct cuz "invoke" Macro
;doesn't work right (addr bf)
push bf
push nPicHeight
push nPicWidth
push 0
push 0
push hMemDC3
push nPicHeight
push nPicWidth
push 0
push 0
push hMemDC2
call AlphaBlend
;invoke AlphaBlend,hMemDC2,0,0,nPicWidth,nPicHeight,
; addr hMemDC3,0,0,nPicWidth,nPicHeight,addr bf
;Copy new bitmap back to Ctrl
invoke BitBlt,hdc,0,0,nPicWidth,nPicHeight,hMemDC2,0,0,SRCCOPY
;Cleanup
invoke DeleteDC,hMemDC3
invoke DeleteDC,hMemDC2
invoke DeleteDC,hMemDC
invoke ReleaseDC,hWndBitmap,hdc
invoke DeleteObject,hBmpTmp
Ret
SetTrans EndP
这个例子还展示了在 MASM 中使用多个 Win32 GDI 函数。我使用 ASM 的原因是,我认为 ASM 仍然是一种很好的语言,并且在“深入”调试时,无论如何都需要对 ASM 有基本的了解。如果你可以查看一个例程并且完全不迷失方向,那总是好的。
使用的工具
- MASM v8.2
- WinASM v5.1.1.0
- OllyDbg v1.10
你可以随意在你的任何应用程序中使用此源代码。如果有任何问题或疑问,请随时与我联系。
祝好,kim (又名 dave)。