Posted on 2009-09-03 15:50
besterChen 阅读(2664)
评论(7) 编辑 收藏 引用
一直很羡慕那些有水波效果的程序,可是无奈我水平差劲。自己写不出来,好不容易见一好友发的程序上有这特效边向他索要源码,才得知那是Delphi的一个控件,由于本人对Delphi实在不通,所以很是遗憾。
忽然想起,曾经在老罗的站点上看到过这样的汇编代码,因此对它有了“不轨之心”,今天在网上参考了好多资料终于将它编译成了一个Lib,写了一个对应的头文件,哈哈,以后我的程序上也可以有这样的特效了。
这里我给出我改写的ASM源文件以及Rasm的工程文件和编译后的Lib及.h文件,希望大家喜欢。
具体的用法如下:
1、先加载这个库文件
#include "./WaveObject/WaveObject.h"
#pragma comment(lib, "./WaveObject/WaveObject.lib")
2、通过查看原先的汇编代码我们可以知道,这个库需要先用_WaveInit()初始化。然后在相应的消息函数中调用相应的特效函数就可以了。因此我们根据_WaveInit()的参数来声明两个变量。
WAVE_OBJECT m_WaveObject;
HBITMAP m_hBitmap;
初始化代码如下:
m_hBitmap = LoadBitmap(GetModuleHandle(NULL),MAKEINTRESOURCE(IDB_BITMAP1)); //这里是载入的图片资源
_WaveInit(&m_WaveObject,GetDlgItem(IDC_STATIC1)->GetSafeHwnd(),m_hBitmap,30,0); //IDC_STATIC1 是MFC的图片控件ID
_WaveEffect(&m_WaveObject,1,4,2,180); // 随便的使用一个特效,具体参数含义见头文件。
添加单击效果的响应
void CBesUnpackDlg::OnLButtonDown(UINT nFlags, CPoint point)
{
ClientToScreen(&point);
GetDlgItem(IDC_STATIC1)->ScreenToClient(&point);
_WaveDropStone(&m_WaveObject,point.x,point.y,2,256);
CDialog::OnLButtonDown(nFlags, point);
}
至于那个右键切换效果自己琢磨吧,嘿嘿
退出销毁对象的代码如下:
void CBesUnpackDlg::OnClose()
{
_WaveFree(&m_WaveObject); // 释放水波对象
CDialog::OnClose();
}
我还是贴一下测试的效果吧:
库的下载地址:
/Files/besterChen/WaveObject/WaveObject.rar