65.9K
CodeProject 正在变化。 阅读更多。
Home

MASM ImageFader

starIconstarIconstarIcon
emptyStarIcon
starIcon
emptyStarIcon

3.89/5 (12投票s)

2007年2月8日

CPOL

1分钟阅读

viewsIcon

71683

downloadIcon

695

一个图像淡入淡出应用程序。它将信息隐藏在图像后面,并在鼠标悬停时淡出图像以显示隐藏的内容。可用于隐藏某些内容,或作为一种时尚的配件。

Sample image

引言

我想到了一种最初在屏幕上向用户隐藏信息的方法。但如果他知道在哪里点击或将鼠标指针移动到哪里,他应该能够访问这些信息。这个想法是制作一个图像淡入淡出器,它最初显示一个图像,当你悬停时淡出图像。

初始状态

这显示了最初如何显示淡入图像,你无法看到图像后面的内容

淡出状态

在这里你可以看到当你悬停在控件上时控件的样子。它会在短暂的延迟后淡出图像,并显示控件后面的内容。

淡出例程

这里是使用 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)。

© . All rights reserved.