工控编程吧
标题:
398上位机VC MFC实现水波特效
[打印本页]
作者:
qq263946146
时间:
2016-9-15 16:13
标题:
398上位机VC MFC实现水波特效
(, 下载次数: 1)
上传
点击文件名下载附件
实现水波特效
功能展示
经常在一些小界面的程序看到水波等特效,鼠标划过窗口,或在窗口上点击都会产生水面涟漪效果,我们当前例程也通过VC代码编辑实现这一功能,效果如图,程序运行就可用鼠标在窗口上点击或划动欣赏涟漪效果,水波的半径和高度可以在鼠标消息中进行更改如DropStone(point.x, point.y, 1, 256); 1为半径,256为高度
要点提示
例程封装一个简单的类CRipple实现水波功能,在例程中实现两种水波效果,例程仅演示一种,另一种可更改类中的函数WaveRender()实现,在函数中有下面相关代码
//**/特效1
iPosX = x + (m_pWaveBuf1[lineIndex - 1] - m_pWaveBuf1[lineIndex + 1]);
iPosY = y + (m_pWaveBuf1[lineIndex - m_iBmpWidth] - m_pWaveBuf1[lineIndex + m_iBmpWidth]);
/*特效2
short waveData = (1024 - m_pWaveBuf1[lineIndex]);
iPosX = (x - m_iBmpWidth/2)*waveData/1024 + m_iBmpWidth/2;
iPosY = (y - m_iBmpHeight/2)*waveData/1024 + m_iBmpHeight/2;
*/
进行特效1与2的替换就可;
实现功能
1.新建基于对话框的应用程序
2.准备一位图或复制例程中的位图1.bmp到工程目录并载入工程,位图ID改为IDB_RIPPLE。复制例程根目录水波类Cripple的两文件CRipple.cpp,CRipple.h到自己工程根目录并载入到工程中;
3.在主对话框添加头文件#include “CRipple.h”及变量CRipple g_Ripple;初始化变量
HBITMAP hBt;
BITMAP BTTop;
hBt=LoadBitmap(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDB_RIPPLE));;
GetObject(hBt, sizeof(BTTop), &BTTop);
::SetWindowPos(m_hWnd, HWND_TOPMOST, 0, 0,BTTop.bmWidth,BTTop.bmHeight,SWP_NOMOVE); //设置窗口大小
m_Ripple.InitRipple(m_hWnd, 10, hBt);//初始化水波参数
4.分别在主对话框类添加鼠标点击及移动函数,调用水波类的水波产生函数
void CGkbc8Dlg::OnLButtonDown(UINT nFlags, CPoint point)
{
m_Ripple.DropStone(point.x, point.y, 10, 128);
CDialog::OnLButtonDown(nFlags, point);
}
void CGkbc8Dlg::OnMouseMove(UINT nFlags, CPoint point)
{
m_Ripple.DropStone(point.x, point.y, 2, 128);
CDialog::OnMouseMove(nFlags, point);
}
我们来演示下功能实现的整个过程
[iqiyi]http://player.video.qiyi.com/a8ea883f4abb5e6906c434a1eb8910d1/0/0/w_19rswzdo7x.swf-albumId=6288562609-tvId=6288562609-isPurchase=0-cnId=12[/iqiyi]
(, 下载次数: 3)
上传
点击文件名下载附件 [weixinlianxi]1[/weixinlianxi]
[note]1[/note]
欢迎光临 工控编程吧 (https://www.gkbc8.com/)
Powered by Discuz! X3.4