亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來(lái)到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? ripplewnd.cpp

?? nettalk
?? CPP
字號(hào):
//NetTalk
/*------------------------------------------------------------------------------*\
 =============================
   模塊名稱: RippleWnd.cpp
 =============================
 //Download by http://www.codefans.net
 [版權(quán)]
 
                                                 
\*------------------------------------------------------------------------------*/
//借鑒來(lái)的水波特效,作者不詳,在此謝過(guò)
#include "WndX.h"

#include "RippleWnd.h"
#include <Stdio.h>
#include <Windowsx.h>
#pragma comment(lib,"ddraw")


/*------------------------------------------------------------------------------*/
CRippleWnd::CRippleWnd()
{
	m_iCount=0;
	m_dwFps=0;
	
}

/*------------------------------------------------------------------------------*/
CRippleWnd::~CRippleWnd()
{
	
}
/*------------------------------------------------------------------------------*/
BOOL CRippleWnd::Create(RECT &rc, HWND hParent,UINT uBmpID,int iWidth,int iHeight)
{
	BOOL bRet=FALSE;
	m_iWidth=iWidth;
	m_iHeight=iHeight;
	if(!CWndX::Create(0,0,0,WS_CHILD|WS_VISIBLE,rc,hParent,0,0))
		goto RET;
	SetClassLong(m_hWnd,GCL_HBRBACKGROUND,0);
	if(!InitDDraw(uBmpID,iWidth,iHeight))
		goto RET;
	SetTimer(m_hWnd,1,30,0);
	m_dwTime=GetTickCount();
	bRet=TRUE;
RET:
	return bRet;
}
/*------------------------------------------------------------------------------*/
LRESULT CRippleWnd::WndProc(UINT uMsg, WPARAM wParam, LPARAM lParam)
{
	switch(uMsg)
	{
	case WM_DESTROY:
		KillTimer(m_hWnd,1);
		FreeObject();
		break;
	case WM_TIMER:
		{
			if(IsWindowVisible(m_hWnd))
			{
				UpdateFrame();
			}
		}
		break;
	case WM_LBUTTONDOWN:
		
		DropStone(LOWORD(lParam),HIWORD(lParam),3,128);
		break;
	
	case WM_MOUSEMOVE:
		if (wParam==MK_LBUTTON )
		{
			
			DropStone(LOWORD(lParam),HIWORD(lParam),3,128);
		}
		break;
			
	}
	return CWndX::WndProc(uMsg,wParam,lParam);
}
/*------------------------------------------------------------------------------*/
BOOL CRippleWnd::InitDDraw(UINT uBmpID,int iWidth,int iHeight)
{
	DDSURFACEDESC       ddsd;
    HRESULT             ddrval;

    //創(chuàng)建DirectDraw對(duì)象
	ddrval = DirectDrawCreate( NULL, &lpDD, NULL );
    if( ddrval != DD_OK )
        return FALSE;

    ddrval = lpDD->SetCooperativeLevel(NULL, DDSCL_NORMAL);
    if( ddrval != DD_OK )
        return FALSE;

    ddsd.dwSize = sizeof( ddsd );
    ddsd.dwFlags = DDSD_CAPS ;
    ddsd.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE;

    ddrval = lpDD->CreateSurface( &ddsd, &lpDDSPrimary, NULL );
    if( ddrval != DD_OK )
        return FALSE;

	ZeroMemory(&ddsd, sizeof(ddsd));
    ddsd.dwSize = sizeof(ddsd);
    ddsd.dwFlags = DDSD_CAPS | DDSD_HEIGHT |DDSD_WIDTH;
    ddsd.ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN |DDSCAPS_SYSTEMMEMORY ;
	ddsd.dwWidth = iWidth;
    ddsd.dwHeight = iHeight;

    if (lpDD->CreateSurface(&ddsd, &lpDDSPic1, NULL) != DD_OK)
		return FALSE;
    if (lpDD->CreateSurface(&ddsd, &lpDDSPic2, NULL) != DD_OK)
		return FALSE;

	lpDD->CreateClipper(0, &lpClipper, NULL);
	lpClipper->SetHWnd(0, m_hWnd);
	lpDDSPrimary->SetClipper(lpClipper);

	
	DDReLoadBitmap(lpDDSPic1, MAKEINTRESOURCE(uBmpID));

    buf1 = new short[iWidth*iHeight];
	buf2 = new short[iWidth*iHeight];
	ZeroMemory(buf1, iWidth*iHeight*sizeof(short));
	ZeroMemory(buf2, iWidth*iHeight*sizeof(short));

	
    return TRUE;
}
/*------------------------------------------------------------------------------*/
void CRippleWnd::FreeObject()
{
	if( lpDD != NULL )//釋放DirectDraw對(duì)象
    {
        if( lpDDSPrimary != NULL )//釋放主頁(yè)面。
        {
            lpDDSPrimary->Release();
            lpDDSPrimary = NULL;
        }
        if( lpDDSPic1 != NULL )//釋放離屏頁(yè)面。
        {
            lpDDSPic1->Release();
            lpDDSPic1 = NULL;
        }
        if( lpDDSPic2 != NULL )
        {
            lpDDSPic2->Release();
            lpDDSPic2 = NULL;
        }
		if (lpClipper!=NULL)
		{
			lpClipper->Release();
			lpClipper=NULL;
		}
        lpDD->Release();
        lpDD = NULL;
    }
	if(buf1)
		delete buf1;
	if(buf2)
		delete buf2;
}
/*------------------------------------------------------------------------------*/
void CRippleWnd::DropStone(int x,int y,int stonesize,int stoneweight)
{
	
	//判斷坐標(biāo)是否在屏幕范圍內(nèi)
	if ((x+stonesize)>m_iWidth || 
		(y+stonesize)>m_iHeight||
		(x-stonesize)<0||
		(y-stonesize)<0)
		return;

	for (int posx=x-stonesize; posx<x+stonesize; posx++)
		for (int posy=y-stonesize; posy<y+stonesize; posy++)
			if ((posx-x)*(posx-x) + (posy-y)*(posy-y) < stonesize*stonesize)
				buf1[m_iWidth*posy+posx] = -stoneweight;
}
/*------------------------------------------------------------------------------*/

void CRippleWnd::RenderRipple()
{
	//鎖定兩個(gè)離屏頁(yè)面
	DDSURFACEDESC ddsd1, ddsd2;
	ddsd1.dwSize = sizeof (DDSURFACEDESC);
	ddsd2.dwSize = sizeof(DDSURFACEDESC);
	
	lpDDSPic1->Lock(NULL, &ddsd1, DDLOCK_WAIT, NULL);
	lpDDSPic2->Lock(NULL, &ddsd2, DDLOCK_WAIT, NULL);
	
	//取得頁(yè)面象素位深度,和頁(yè)面內(nèi)存指針
	int depth=ddsd1.ddpfPixelFormat.dwRGBBitCount/8;
	BYTE *Bitmap1 = (BYTE*)ddsd1.lpSurface;
	BYTE *Bitmap2 = (BYTE*)ddsd2.lpSurface;
	
	//下面進(jìn)行頁(yè)面渲染
	int xoff, yoff;
	int k = m_iWidth;
	for (int i=1; i<m_iHeight-1; i++)
	{
		for (int j=0; j<m_iWidth; j++)
		{
			//計(jì)算偏移量
			xoff = buf1[k-1]-buf1[k+1];
			yoff = buf1[k-m_iWidth]-buf1[k+m_iWidth];

			//判斷坐標(biāo)是否在窗口范圍內(nèi)
			if ((i+yoff )< 0 ) {k++; continue;}
			if ((i+yoff )> m_iHeight) {k++; continue;}
			if ((j+xoff )< 0 ) {k++; continue;}
			if ((j+xoff )> m_iWidth ) {k++; continue;}

			//計(jì)算出偏移象素和原始象素的內(nèi)存地址偏移量
			int pos1, pos2;
			pos1=ddsd1.lPitch*(i+yoff)+ depth*(j+xoff);
			pos2=ddsd2.lPitch*i+ depth*j;

			//復(fù)制象素
			for (int d=0; d<depth; d++)
				Bitmap2[pos2++]=Bitmap1[pos1++];
			k++;
		}
	}
	//解鎖頁(yè)面
	lpDDSPic1->Unlock(&ddsd1);
	lpDDSPic2->Unlock(&ddsd2);
	HDC hdc;
	lpDDSPic2->GetDC(&hdc);
	char szFps[10];
	
	sprintf(szFps,"%dFPS",m_dwFps);
	
	SetBkMode(hdc,TRANSPARENT);
	SetTextColor(hdc,0x00ffaaaa);
	DrawText(hdc,szFps,strlen(szFps),&CRectX(200,5,280,20),DT_RIGHT);
	
	lpDDSPic2->ReleaseDC(hdc);
}


/*------------------------------------------------------------------------------*/
void CRippleWnd::UpdateFrame()
{
	m_iCount++;
	if(m_iCount>=20)
	{
	DropStone(
			(int)(m_iWidth*((short)rand()/32767.0)),
			(int)(m_iHeight*((short)rand()/32767.0)),
			3,
			128
			);
	DWORD temp=GetTickCount();
	m_dwFps=20000/(temp-m_dwTime);
	m_dwTime=temp;


	m_iCount=0;
	}

	
	RippleSpread();
			
	RenderRipple();//頁(yè)面渲染

	//將離屏頁(yè)面圖象Blit到主頁(yè)面
	RECT Window;
	POINT pt;
	GetClientRect(m_hWnd, &Window);
	pt.x=pt.y=0;
	ClientToScreen(m_hWnd, &pt);
	OffsetRect(&Window, pt.x, pt.y);
	lpDDSPrimary->Blt(&Window, lpDDSPic2, NULL, DDBLT_WAIT, NULL);
}
/*------------------------------------------------------------------------------*/
void CRippleWnd::RippleSpread()
{
	for (int i=m_iWidth; i<m_iWidth*m_iHeight-m_iWidth; i++)
	{
		//波能擴(kuò)散
		buf2[i] = ((buf1[i-1]+
					buf1[i+1]+
					buf1[i-m_iWidth]+
					buf1[i+m_iWidth])
					>>1)
					- buf2[i];
		//波能衰減
		buf2[i] -= buf2[i]>>5;
	}

	//交換波能數(shù)據(jù)緩沖區(qū)
	short *ptmp =buf1;
	buf1 = buf2;
	buf2 = ptmp;
}


?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲免费观看视频| av亚洲精华国产精华| 日日欢夜夜爽一区| 亚洲最大色网站| 一区二区三区国产精华| 亚洲欧美另类小说视频| 亚洲视频一二区| 亚洲欧美韩国综合色| 亚洲美女在线一区| 亚洲靠逼com| 亚洲在线视频免费观看| 性欧美大战久久久久久久久| 一区二区高清视频在线观看| 亚洲制服丝袜av| 亚洲成人综合在线| 三级不卡在线观看| 久久国产精品免费| 韩国在线一区二区| 高清在线不卡av| 成人av网址在线| 欧美亚洲综合在线| 51精品秘密在线观看| 日韩免费看的电影| 久久精品人人做人人爽97| 国产精品久久久久久久久久免费看 | 日韩一区二区麻豆国产| 精品久久人人做人人爰| 国产精品视频看| 一区二区三区四区乱视频| 天涯成人国产亚洲精品一区av| 日韩—二三区免费观看av| 国产乱人伦偷精品视频免下载| 国产69精品久久777的优势| 色又黄又爽网站www久久| 欧美日韩成人综合天天影院| 欧美一级理论片| 国产日韩欧美在线一区| 亚洲免费观看在线观看| 日韩福利视频网| 国产精品1区2区| 欧美午夜精品理论片a级按摩| 欧美一区二区免费视频| 国产人成亚洲第一网站在线播放 | 亚洲精品亚洲人成人网在线播放| 亚洲成人在线网站| 久草这里只有精品视频| 成人午夜视频福利| 欧美久久久一区| 国产日韩av一区| 亚洲图片欧美视频| 国产一本一道久久香蕉| 在线看日韩精品电影| 欧美电视剧在线看免费| 亚洲精品水蜜桃| 精品一区二区在线免费观看| 色哟哟一区二区| 久久这里只精品最新地址| 亚洲免费av观看| 狠狠久久亚洲欧美| 欧美无乱码久久久免费午夜一区 | 欧美精品一区二区久久婷婷| 亚洲欧洲精品一区二区三区不卡| 亚洲h在线观看| 成人永久免费视频| 日韩精品最新网址| 伊人色综合久久天天| 另类人妖一区二区av| 99精品视频在线播放观看| 欧美一二三区精品| 樱桃视频在线观看一区| 国产成人小视频| 欧美一区二区黄| 亚洲夂夂婷婷色拍ww47| www.爱久久.com| 精品日韩一区二区三区| 亚洲va欧美va人人爽午夜| www.欧美色图| 国产三级一区二区三区| 日韩av一区二区三区四区| 色婷婷av一区| 久久久国产精品麻豆| 水蜜桃久久夜色精品一区的特点| 91香蕉国产在线观看软件| 国产人伦精品一区二区| 激情五月婷婷综合| 日韩一卡二卡三卡| 五月激情综合婷婷| 在线精品国精品国产尤物884a| 亚洲国产精品t66y| 国产高清久久久久| 2021久久国产精品不只是精品| 日韩1区2区日韩1区2区| 欧美日韩精品福利| 亚洲制服丝袜在线| 在线精品视频免费播放| 亚洲影院久久精品| 欧美系列在线观看| 亚洲成人高清在线| 欧美日韩在线亚洲一区蜜芽| 亚洲综合免费观看高清完整版 | 色综合天天狠狠| 国产精品免费人成网站| 国产成人综合网站| 亚洲国产激情av| 丁香六月久久综合狠狠色| 26uuu亚洲综合色欧美| 国产在线一区二区综合免费视频| 日韩女优电影在线观看| 日韩不卡在线观看日韩不卡视频| 欧美人成免费网站| 日产国产高清一区二区三区| 欧美一区二区人人喊爽| 麻豆成人免费电影| 久久影院电视剧免费观看| 国产一区三区三区| 中文在线资源观看网站视频免费不卡| 国产成人精品亚洲777人妖 | 日本在线不卡视频一二三区| 欧美一区二区三区四区五区| 美国十次综合导航| 2017欧美狠狠色| 成人午夜视频网站| 一区二区三区成人在线视频| 4438x成人网最大色成网站| 免费成人在线影院| 精品国产电影一区二区| 成人亚洲一区二区一| 一区二区三区国产精华| 欧美色中文字幕| 五月综合激情婷婷六月色窝| 日韩午夜精品电影| 国产传媒日韩欧美成人| 国产精品久久久一区麻豆最新章节| 99精品视频中文字幕| 亚洲午夜久久久久久久久电影院| 欧美一区二区视频在线观看| 国产一区二区三区在线观看免费视频| 欧美国产精品久久| 在线观看日韩av先锋影音电影院| 日韩av电影免费观看高清完整版 | 日韩国产一区二| 久久一区二区视频| 97精品久久久久中文字幕| 亚洲妇熟xx妇色黄| 久久综合色播五月| 一本高清dvd不卡在线观看| 免费成人性网站| 国产精品久久久久影视| 欧美日韩精品高清| 国产suv精品一区二区883| 一区二区不卡在线视频 午夜欧美不卡在| 在线综合视频播放| 懂色av一区二区在线播放| 亚洲午夜精品网| 亚洲国产精品传媒在线观看| 欧美日本国产一区| 不卡的av在线| 蜜桃一区二区三区在线| 亚洲欧美成人一区二区三区| 欧美大片一区二区| 91福利精品视频| 国产一区二区在线看| 亚洲成a人v欧美综合天堂下载 | 国产精品久久久一本精品| 91精品免费在线| 91在线视频免费91| 国产精品一区二区在线看| 日韩高清在线电影| 亚洲日韩欧美一区二区在线| 亚洲精品一区二区精华| 欧美亚洲综合久久| 国产99久久久精品| 看电影不卡的网站| 亚洲国产精品久久不卡毛片 | 美女一区二区三区| 亚洲综合一区在线| 国产精品卡一卡二| 国产日产欧美一区| 日韩写真欧美这视频| 欧美综合欧美视频| 99久久伊人精品| 国产成人精品1024| 捆绑调教一区二区三区| 亚洲国产日产av| 亚洲最新视频在线观看| 中文字幕一区二区不卡| 久久女同精品一区二区| 欧美一级在线免费| 欧美日韩一区三区| 色婷婷激情综合| 色噜噜狠狠一区二区三区果冻| 成年人国产精品| 成人免费毛片片v| 国产精品1区二区.| 国产一区二区0| 韩国av一区二区| 国内外精品视频| 国产精品夜夜爽| 丁香婷婷综合激情五月色| 国产精品一区一区三区|