【VC开源代码栏目提醒】:以下是网学会员为您推荐的VC开源代码-EffectDisplay.cpp,希望本篇文章对您学习有所帮助。
#include "StdAfx.h"
#include "mainfrm.h"
#include "EffectDisplay.h"
#include <cmath>
// 静态成员变量初始化
int EffectDisplay::s_nOffsetX = 0;
int EffectDisplay::s_nOffsetY = 0;
int EffectDisplay::s_nPicWidth = 0;
int EffectDisplay::s_nPicHeight = 0;
int EffectDisplay::s_nCDCWidth = 0;
int EffectDisplay::s_nCDCHeight = 0;
/******************************************************************************
* 作用: 延时函数
* 参数:
* dwMilliseconds 延时时间,单位毫秒
******************************************************************************/
void EffectDisplay::DelayTime(DWORD dwMilliseconds)
{
LARGE_INTEGER litmp;
LONGLONG lTimeBeign;
LONGLONG lTimeEnd;
double dMinus;
double dFreq;
double dTim;
QueryPerformanceFrequency(&litmp); // 获得机器内部定时器的时钟频率
dFreq = (double)litmp.QuadPart; // 获得计数器的时钟频率
QueryPerformanceCounter(&litmp);
lTimeBeign = litmp.QuadPart; // 获得时间起始值
do
{
QueryPerformanceCounter(&litmp);
lTimeEnd = litmp.QuadPart; //获得中止值
dMinus = (double)(lTimeEnd - lTimeBeign);
dTim = dMinus / dFreq; // 获得对应的时间值,单位为秒
} while (dTim < dwMilliseconds * 0.001);
}
/******************************************************************************
* 作用: 向下扫描特效
******************************************************************************/
void EffectDisplay::ScanDownDisplay(CDC* pDC, CDC* pMemDC)
{
// 扫描高度
int nHeight = min(s_nPicHeight, s_nCDCHeight);
// 扫描宽度
int nWidth = min(s_nPicWidth, s_nCDCWidth);
for (int i = 0; i <= nHeight; i += 1)
{
pDC->BitBlt(s_nOffsetX, i + s_nOffsetY, nWidth, 1,
pMemDC, s_nOffsetX, i + s_nOffsetY, SRCCOPY);
DelayTime(1);
}
}
/******************************************************************************
* 作用: 垂直双重扫描特效
******************************************************************************/
void EffectDisplay::VSScanDisplay(CDC* pDC, CDC* pMemDC)
{
// 扫描高度
int nHeight = min(s_nPicHeight, s_nCDCHeight);
// 扫描宽度
int nWidth = min(s_nPicWidth, s_nCDCWidth);
for (int i = 0; i <= nHeight / 2; i += 1)
{
// 上面部分
pDC->BitBlt(s_nOffsetX, i + s_nOffsetY, nWidth, 1,
pMemDC, s_nOffsetX, i + s_nOffsetY, SRCCOPY);
// 下面部分
pDC->BitBlt(s_nOffsetX, nHeight - i + s_nOffsetY, nWidth, 1,
pMemDC, s_nOffsetX, nHeight - i + s_nOffsetY, SRCCOPY);
DelayTime(2);
}
}
/******************************************************************************
* 作用: 向右移动特效
******************************************************************************/
void EffectDisplay::MoveRightDisplay(CDC* pDC, CDC* pMemDC)
{
// 扫描高度
int nHeight = min(s_nPicHeight, s_nCDCHeight);
for (int i = 0; i <= s_nCDCWidth - s_nOffsetX; i += 2)
{
pDC->BitBlt(0, s_nOffsetY, i, nHeight,
pMemDC, s_nCDCWidth - s_nOffsetX - i, s_nOffsetY, SRCCOPY);
DelayTime(1);
}
// 修正图像位置
pDC->BitBlt(0, s_nOffsetY, s_nCDCWidth - s_nOffsetX, nHeight,
pMemDC, 0, s_nOffsetY, SRCCOPY);
}
/******************************************************************************
* 作用: 水平双重移动特效
******************************************************************************/
void EffectDisplay::HSMoveDisplay(CDC* pDC, CDC* pMemDC)
{
// 扫描高度
int nHeight = min(s_nPicHeight, s_nCDCHeight);
// 扫描宽度
int nWidth = min(s_nPicWidth, s_nCDCWidth);
for (int i = 0; i <= s_nCDCWidth / 2; i += 2)
{
// 左面部分
pDC->BitBlt(0, s_nOffsetY, i, nHeight,
pMemDC, nWidth / 2 - i + s_nOffsetX, s_nOffsetY, SRCCOPY);
// 右面部分
pDC->BitBlt(s_nCDCWidth - i,