一直很羨慕那些有水波效果的程序,可是無奈我水平差勁。自己寫不出來,好不容易見一好友發的程序上有這特效邊向他索要源碼,才得知那是Delphi的一個控件,由于本人對Delphi實在不通,所以很是遺憾。
忽然想起,曾經在老羅的站點上看到過這樣的匯編代碼,因此對它有了“不軌之心”,今天在網上參考了好多資料終于將它編譯成了一個Lib,寫了一個對應的頭文件,哈哈,以后我的程序上也可以有這樣的特效了。
這里我給出我改寫的ASM源文件以及Rasm的工程文件和編譯后的Lib及.h文件,希望大家喜歡。
具體的用法如下:
1、先加載這個庫文件
2、通過查看原先的匯編代碼我們可以知道,這個庫需要先用_WaveInit()初始化。然后在相應的消息函數中調用相應的特效函數就可以了。因此我們根據_WaveInit()的參數來聲明兩個變量。
添加單擊效果的響應
退出銷毀對象的代碼如下:
我還是貼一下測試的效果吧:

庫的下載地址:
/Files/besterChen/WaveObject/WaveObject.rar
忽然想起,曾經在老羅的站點上看到過這樣的匯編代碼,因此對它有了“不軌之心”,今天在網上參考了好多資料終于將它編譯成了一個Lib,寫了一個對應的頭文件,哈哈,以后我的程序上也可以有這樣的特效了。
這里我給出我改寫的ASM源文件以及Rasm的工程文件和編譯后的Lib及.h文件,希望大家喜歡。
具體的用法如下:
1、先加載這個庫文件
#include "./WaveObject/WaveObject.h"
#pragma comment(lib, "./WaveObject/WaveObject.lib")
#pragma comment(lib, "./WaveObject/WaveObject.lib")
2、通過查看原先的匯編代碼我們可以知道,這個庫需要先用_WaveInit()初始化。然后在相應的消息函數中調用相應的特效函數就可以了。因此我們根據_WaveInit()的參數來聲明兩個變量。
WAVE_OBJECT m_WaveObject;
HBITMAP m_hBitmap;
初始化代碼如下: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); // 隨便的使用一個特效,具體參數含義見頭文件。
_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);
}
至于那個右鍵切換效果自己琢磨吧,嘿嘿{
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();
}
{
_WaveFree(&m_WaveObject); // 釋放水波對象
CDialog::OnClose();
}
我還是貼一下測試的效果吧:

庫的下載地址:
/Files/besterChen/WaveObject/WaveObject.rar