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

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

?? directdraw.cpp

?? DragonRaja Client source version 1.4+ this source allow players join in (Hades Warfield or Monsters
?? CPP
?? 第 1 頁 / 共 3 頁
字號:
/*****************************************************************************\
* Copyright (c), Future Entertainment World / Seoul, Republic of Korea        *
* All Rights Reserved.                                                        *
*                                                                             *
* This document contains proprietary and confidential information.  No        *
* parts of this document or the computer program it embodies may be in        *
* any way copied, duplicated, reproduced, translated into a different         *
* programming language, or distributed to any person, company, or             *
* corporation without the prior written consent of Future Entertainment World *
\*****************************************************************************/

#include "stdafx.h"
#include <Stdio.h>
#include "dragon.h"
#include "directdraw.h"

#include "MouseCursor.h"

///////////////////////////////////////////////////////////////////////////////
//

BOOL					InitDirectDraw( HWND hWnd, LPDIRECTDRAWINFO lpDirectDrawInfo );
void					CleanupDirectDraw( LPDIRECTDRAWINFO lpDirectDrawInfo );
LPDIRECTDRAWSURFACE		CreateSurface( LPDIRECTDRAW lpDirectDraw, DWORD dwWidth, DWORD dwHeight );
void					CleanupSurface( LPDIRECTDRAWSURFACE lpSurface );
BOOL					RestoreSurface( LPDIRECTDRAWSURFACE lpSurface );
BOOL					RestoreAllSurfaces( LPDIRECTDRAWINFO lpDirectDrawInfo );
void					FlipScreen( LPDIRECTDRAWINFO lpDirectDrawInfo );
void					EraseScreen( LPDIRECTDRAWINFO lpDirectDrawInfo, WORD color );

BOOL	DDLoadBitmap( LPDIRECTDRAW lpDirectDraw, LPSURFACEINFO lpSurfaceInfo, char* lpszFilePath );
BOOL	DDReLoadBitmap( LPDIRECTDRAWSURFACE lpSurface, char* lpszFilePath );
BOOL	DDCopyBitmap( LPDIRECTDRAWSURFACE lpSurface, HBITMAP hBitmap, int x, int y, int dx, int dy );
DWORD	DDColorMatch( LPDIRECTDRAWSURFACE lpSurface, COLORREF rgb );
HRESULT	DDSetColorKey( LPDIRECTDRAWSURFACE lpSurface, COLORREF rgb );

void	StretchBltScreen( LPDIRECTDRAWSURFACE lpSurfaceDst, LPRECT lpRectDst, LPDIRECTDRAWSURFACE lpSurfaceSrc, LPRECT lpRectSrc, DWORD dwColorFill, int nDirection );
void	BltGrid( LPDIRECTDRAWSURFACE lpSurfaceDst, LPRECT lpRectDst, LPDIRECTDRAWSURFACE lpSurfaceSrc, LPRECT lpRectSrc );
void	BltTrans( LPDIRECTDRAWSURFACE lpSurfaceDst, LPRECT lpRectDst, LPDIRECTDRAWSURFACE lpSurfaceSrc, LPRECT lpRectSrc );
int		TransAlpha( LPDIRECTDRAWSURFACE lpSurfaceDst, LPDIRECTDRAWSURFACE lpSurfaceSrc, LONG x, LONG y, RECT rectSrc, WORD wAlphaValue );


void	InitGammaControl( void );
void	ResetGammaCtrl( void );
int		ColorCtrlBrightness( long v );


///////////////////////////////////////////////////////////////////////////////
//	
	
BOOL
InitDirectDraw( HWND hWnd, LPDIRECTDRAWINFO lpDirectDrawInfo )
{	
	LPDIRECTDRAW			lpDirectDraw = NULL;
	DDSCAPS					ddscaps;
	DDSURFACEDESC			ddsd;
	CLIPLIST				tClipList;
	RECT					rectClipper;
	HRESULT					hResult;
	
	if(lpDirectDrawInfo->lpDirectDraw != NULL)	return TRUE;

	hResult = DirectDrawCreate( NULL, &lpDirectDrawInfo->lpDirectDraw, NULL );
	if( hResult != DD_OK )
	{
		return	ShowErrorMessage( "DirectDrawCreate Failed!" );
	}
	
//	hResult = lpDirectDraw->QueryInterface( IID_IDirectDraw4, ( LPVOID* )&lpDirectDrawInfo->lpDirectDraw );
//	if ( hResult != DD_OK )
//	{
//		return	ShowErrorMessage( "QueryInterface Failed!" );
//	}
//	lpDirectDraw->Release( );
//	lpDirectDraw = NULL;
	
	if ( lpDirectDrawInfo->bFullscreen )
	{
		hResult = lpDirectDrawInfo->lpDirectDraw->SetCooperativeLevel( hWnd, DDSCL_EXCLUSIVE | DDSCL_FULLSCREEN );
		if ( hResult != DD_OK )
		{
			return	ShowErrorMessage( "SetCooperativeLevel Failed!" );
		}
	
#ifdef ALT_TAB_BLOCK
		while( lpDirectDrawInfo->lpDirectDraw->SetDisplayMode( SCREEN_WIDTH, SCREEN_HEIGHT, 16 ) != DD_OK )
		{
			Sleep( 1000 );
			//count++;
			//if( count > 100 ) return false;
		}
#else
		hResult = lpDirectDrawInfo->lpDirectDraw->SetDisplayMode( SCREEN_WIDTH, SCREEN_HEIGHT, 16 );
		if ( hResult != DD_OK )
		{
			return	ShowErrorMessage( "SetDisplayMode Failed!" );
		}
#endif
	
		ZeroMemory( &ddsd, sizeof( ddsd ) );
		ddsd.dwSize = sizeof( ddsd );
		ddsd.dwFlags = DDSD_CAPS | DDSD_BACKBUFFERCOUNT;
		ddsd.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE | DDSCAPS_FLIP | DDSCAPS_COMPLEX | DDSCAPS_SYSTEMMEMORY;
		ddsd.dwBackBufferCount = 1;
		hResult = lpDirectDrawInfo->lpDirectDraw->CreateSurface( &ddsd, &lpDirectDrawInfo->lpDirectDrawSurfacePrimary, NULL );
		if ( hResult != DD_OK )
		{
			return	ShowErrorMessage( "CreateSurface(Primary) Failed!" );
		}
	
		ddscaps.dwCaps = DDSCAPS_BACKBUFFER;
		hResult = lpDirectDrawInfo->lpDirectDrawSurfacePrimary->GetAttachedSurface( &ddscaps, &lpDirectDrawInfo->lpDirectDrawSurfaceBack );
		if ( hResult != DD_OK )
		{
			return	ShowErrorMessage( "GetAttachedSurface Failed!" );
		}
	
/*	
		DDSURFACEDESC       DDSDesc;
		DDSDesc.dwSize = sizeof(DDSDesc2);
		
		lpDirectDrawInfo->lpDirectDrawSurfacePrimary->Lock(NULL, &DDSDesc, 0, NULL);   // 
		lpDirectDrawInfo->lpDirectDrawSurfacePrimary->Unlock(NULL);
	
		DxSize = DDSDesc.lPitch;

*/
	}
	else
	{
		hResult = lpDirectDrawInfo->lpDirectDraw->SetCooperativeLevel( hWnd, DDSCL_NORMAL );
		if ( hResult != DD_OK )
		{
			return	ShowErrorMessage( "SetCooperativeLevel Failed!" );
		}

		/*
		DWORD	dwStyle;
		RECT	rectWork, rectClient;
		dwStyle = GetWindowStyle( hWnd );
		dwStyle &= ~WS_POPUP;
		dwStyle |= WS_OVERLAPPED | WS_CAPTION | WS_THICKFRAME | WS_MINIMIZEBOX;
		SetWindowLong( hWnd, GWL_STYLE, dwStyle );

		SetRect( &rectClient, 0, 0, SCREEN_WIDTH, SCREEN_HEIGHT );

		AdjustWindowRectEx( &rectClient, GetWindowStyle( hWnd ), GetMenu( hWnd ) != NULL, GetWindowExStyle( hWnd ) );
		SetWindowPos( hWnd, NULL, 0, 0, rectClient.right - rectClient.left, rectClient.bottom - rectClient.top, SWP_NOMOVE | SWP_NOZORDER | SWP_NOACTIVATE );
		SetWindowPos( hWnd, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE | SWP_NOACTIVATE );

		SystemParametersInfo( SPI_GETWORKAREA, 0, &rectWork, 0 );
		GetWindowRect( hWnd, &rectClient );
		if ( rectClient.left < rectWork.left )
		{
			rectClient.left = rectWork.left;
		}
		if ( rectClient.top  < rectWork.top )
		{
			rectClient.top  = rectWork.top;
		}
		SetWindowPos( hWnd, NULL, rectClient.left, rectClient.top, 0, 0, SWP_NOSIZE | SWP_NOZORDER | SWP_NOACTIVATE );
		*/

		ZeroMemory( &ddsd, sizeof( ddsd ) );
		ddsd.dwSize = sizeof( ddsd );
		ddsd.dwFlags = DDSD_CAPS;
		ddsd.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE | DDSCAPS_SYSTEMMEMORY;
		hResult = lpDirectDrawInfo->lpDirectDraw->CreateSurface( &ddsd, &lpDirectDrawInfo->lpDirectDrawSurfacePrimary, NULL );
		if ( hResult != DD_OK )
		{
			return	ShowErrorMessage( "CreateSurface(Primary Failed!" );
		}

		ddsd.dwFlags = DDSD_CAPS | DDSD_WIDTH | DDSD_HEIGHT;	
		ddsd.ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN |  DDSCAPS_SYSTEMMEMORY;
		ddsd.dwWidth = SCREEN_WIDTH;
		ddsd.dwHeight = SCREEN_HEIGHT;
		hResult = lpDirectDrawInfo->lpDirectDraw->CreateSurface( &ddsd, &lpDirectDrawInfo->lpDirectDrawSurfaceBack, NULL );
		if ( hResult != DD_OK )
		{
			return	ShowErrorMessage( "CreateSurface(Back) Failed!" );
		}
	}

	hResult = lpDirectDrawInfo->lpDirectDraw->CreateClipper( 0, &lpDirectDrawInfo->lpClipper, NULL );
	if ( hResult != DD_OK )
	{
		return	ShowErrorMessage( "CreateClipper Failed!" );
	}

	SetRect( &rectClipper, 0, 0, SCREEN_WIDTH, SCREEN_HEIGHT );
	tClipList.rgnheader.dwSize = sizeof( RGNDATAHEADER );
	tClipList.rgnheader.iType = RDH_RECTANGLES;
	tClipList.rgnheader.nCount = 1;
	tClipList.rgnheader.nRgnSize = 0;
	memcpy( &tClipList.rgnheader.rcBound, &rectClipper, sizeof( RECT ) );
	memcpy( &tClipList.rect, &rectClipper, sizeof( RECT ) );

	hResult = lpDirectDrawInfo->lpClipper->SetClipList( ( LPRGNDATA )&tClipList, 0 );
	if ( hResult != DD_OK )
	{
		return	ShowErrorMessage( "SetClipList Failed!" );
	}

	InitGammaControl();

	return	TRUE;
}

void
CleanupDirectDraw( LPDIRECTDRAWINFO lpDirectDrawInfo )
{
	if ( !lpDirectDrawInfo->bFullscreen && lpDirectDrawInfo->lpClipper )
	{
		lpDirectDrawInfo->lpClipper->SetClipList( NULL, 0 );
		lpDirectDrawInfo->lpClipper->Release( );
		lpDirectDrawInfo->lpClipper = NULL;
	}

	if ( !lpDirectDrawInfo->bFullscreen && ( lpDirectDrawInfo->lpDirectDrawSurfaceBack != NULL ) )
	{
		lpDirectDrawInfo->lpDirectDrawSurfaceBack->Release( );
		lpDirectDrawInfo->lpDirectDrawSurfaceBack = NULL;
	}

	if ( lpDirectDrawInfo->lpDirectDrawSurfacePrimary != NULL )
	{
		lpDirectDrawInfo->lpDirectDrawSurfacePrimary->Release( );
		lpDirectDrawInfo->lpDirectDrawSurfacePrimary = NULL;
	}

	if( lpDirectDrawInfo->lpDirectDraw != NULL )
	{
		lpDirectDrawInfo->lpDirectDraw->Release( );
		lpDirectDrawInfo->lpDirectDraw = NULL;
	}

//	ResetGammaCtrl();
}

LPDIRECTDRAWSURFACE
CreateSurface( LPDIRECTDRAW lpDirectDraw, DWORD dwWidth, DWORD dwHeight )
{
	LPDIRECTDRAWSURFACE		lpSurface;
	DDSURFACEDESC			ddsd;

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

	if ( lpDirectDraw->CreateSurface( &ddsd, &lpSurface, NULL ) != DD_OK )
	{
		return	NULL;
	}

	return	lpSurface;
}

void
CleanupSurface( LPDIRECTDRAWSURFACE lpSurface )
{
	if ( lpSurface )
	{
		lpSurface->Release( );
		lpSurface = NULL;
	}
}

BOOL
RestoreSurface( LPDIRECTDRAWSURFACE lpSurface )
{
	if ( lpSurface->Restore( ) != DD_OK )
	{
		return	FALSE;
	}

	return	TRUE;
}

BOOL
RestoreAllSurfaces( LPDIRECTDRAWINFO lpDirectDrawInfo )
{
	if ( !RestoreSurface( lpDirectDrawInfo->lpDirectDrawSurfacePrimary ) )
	{
		char	temp[30];
		sprintf(temp, lan->OutputMessage(7,61));//010215 lsw
		MessageBox( g_hwndMain, temp, 0, MB_OK);
		return	FALSE;
	}

	if ( !RestoreSurface( lpDirectDrawInfo->lpDirectDrawSurfaceBack ) )
	{
		char	temp[30];
		sprintf(temp, lan->OutputMessage(7,62));//010215 lsw
		MessageBox( g_hwndMain, temp, 0, MB_OK);
		return	FALSE;
	}				
					
	return	TRUE;	
}					
					
void				
FlipScreen( LPDIRECTDRAWINFO lpDirectDrawInfo )
{					
	HRESULT		hResult;
					
	extern bool chinese_input;
	if ( lpDirectDrawInfo->bFullscreen )
	{				
		if( chinese_input )
		{
			lpDirectDrawInfo->lpDirectDrawSurfacePrimary->SetClipper( lpDirectDrawInfo->lpClipper );

			hResult = lpDirectDrawInfo->lpDirectDrawSurfacePrimary->Blt( &lpDirectDrawInfo->rectPrimarySurface,
				lpDirectDrawInfo->lpDirectDrawSurfaceBack, NULL, DDBLT_WAIT, NULL );
		}
		else
		while( 1 )	
		{			
			hResult = lpDirectDrawInfo->lpDirectDrawSurfacePrimary->Flip( NULL, DDFLIP_WAIT );
			if ( hResult == DD_OK )
			{		
				break;
			}		
			if ( hResult == DDERR_SURFACELOST )
			{		
				hResult = RestoreAllSurfaces(  lpDirectDrawInfo );
				if ( hResult != DD_OK )
				{	
					return;
				}	
			}		
			if ( hResult != DDERR_WASSTILLDRAWING )
			{		
				break;
			}		
		}			
	}				
	else			
	{				
//		lpDirectDrawInfo->lpDirectDrawSurfacePrimary->SetClipper( lpDirectDrawInfo->lpClipper );
			
		hResult = lpDirectDrawInfo->lpDirectDrawSurfacePrimary->Blt( &lpDirectDrawInfo->rectPrimarySurface,
			lpDirectDrawInfo->lpDirectDrawSurfaceBack, NULL, DDBLT_WAIT, NULL );
	}				
}					
					
void				
EraseScreen( LPDIRECTDRAWINFO lpDirectDrawInfo, WORD color )
{					
	DDBLTFX		ddbltfx;
	HRESULT		hResult;
					
	ddbltfx.dwSize = sizeof( ddbltfx );
	ddbltfx.dwFillColor = color;//	RGB16( 0, 0, 255 );

	if( lpDirectDrawInfo == NULL ) return;
					
	while( 1 )		
	{				
		hResult = lpDirectDrawInfo->lpDirectDrawSurfaceBack->Blt( NULL, NULL, NULL, DDBLT_COLORFILL, &ddbltfx );
		if ( hResult == DD_OK )
		{			
			break;	
		}			
		if ( hResult == DDERR_SURFACELOST )
		{			
			hResult = RestoreAllSurfaces( lpDirectDrawInfo );
			if ( hResult != DD_OK )
			{		
				return;
			}		
		}			
		if ( hResult != DDERR_WASSTILLDRAWING )
		{			

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩欧美一级二级| 成人av免费在线播放| 欧美高清一级片在线| 亚洲在线视频免费观看| 在线成人av影院| 毛片一区二区三区| 久久免费的精品国产v∧| 国产成人综合视频| 国产精品国模大尺度视频| 一本色道**综合亚洲精品蜜桃冫| 亚洲欧美日韩国产综合在线| 欧美日韩一区不卡| 秋霞成人午夜伦在线观看| 久久噜噜亚洲综合| 91麻豆精品视频| 日韩精品乱码免费| 久久久久久97三级| 欧美在线观看视频一区二区三区| 丝袜亚洲精品中文字幕一区| 国产亚洲欧美激情| 欧美综合久久久| 国产在线播放一区三区四| 亚洲欧洲精品一区二区三区| 91精品黄色片免费大全| 成人美女视频在线看| 亚洲国产另类av| 久久久久久日产精品| 欧美伊人久久大香线蕉综合69| 久久狠狠亚洲综合| 中文字幕一区二区三中文字幕| 欧美精选在线播放| av高清不卡在线| 秋霞午夜鲁丝一区二区老狼| 日韩美女精品在线| 精品国精品国产| 在线免费观看日本欧美| 国产一区二区福利视频| 夜夜揉揉日日人人青青一国产精品 | 国产亚洲综合av| 99久久精品情趣| 极品少妇xxxx偷拍精品少妇| 亚洲精品视频自拍| 久久九九全国免费| 日韩一区二区免费在线电影| 91浏览器在线视频| 国产成人aaa| 捆绑调教一区二区三区| 亚洲图片一区二区| 亚洲欧美日韩中文播放| 国产欧美一区二区精品婷婷| 91精品国产一区二区| 91蝌蚪porny九色| 高清国产一区二区三区| 麻豆极品一区二区三区| 天天影视色香欲综合网老头| 亚洲男人的天堂一区二区| 欧美国产亚洲另类动漫| 久久久久久亚洲综合影院红桃| 欧美一区二区在线看| 欧美日韩免费在线视频| 91免费国产在线观看| 成人综合在线观看| 国产一区二区精品久久91| 麻豆成人综合网| 日本免费在线视频不卡一不卡二| 亚洲自拍与偷拍| 一区二区三区视频在线看| 国产精品久久久久久福利一牛影视| 久久青草欧美一区二区三区| 久久综合久久综合亚洲| 精品久久久久久综合日本欧美| 欧美精品丝袜久久久中文字幕| 在线观看三级视频欧美| 日本电影亚洲天堂一区| 91黄色小视频| 欧美亚洲图片小说| 欧美日韩精品一区视频| 欧美人与禽zozo性伦| 欧美日韩一级片在线观看| 精品视频一区二区不卡| 欧美日本高清视频在线观看| 7777精品伊人久久久大香线蕉 | 国产精品乱码一区二三区小蝌蚪| 久久久久久久久蜜桃| 国产人成一区二区三区影院| 久久嫩草精品久久久精品一| 国产欧美日韩另类视频免费观看| 国产欧美日韩在线| 国产精品国产馆在线真实露脸 | 久久精品夜色噜噜亚洲a∨| 久久伊人蜜桃av一区二区| 久久精品在线免费观看| 国产精品美女久久久久高潮| 自拍偷拍国产精品| 亚洲丰满少妇videoshd| 免费欧美高清视频| 国产在线精品免费| 成人av集中营| 91精品国产综合久久香蕉的特点| 欧美mv日韩mv国产| 中文字幕中文乱码欧美一区二区 | 午夜伊人狠狠久久| 久久激五月天综合精品| 粉嫩嫩av羞羞动漫久久久| 在线视频欧美精品| 日韩网站在线看片你懂的| 2023国产精华国产精品| 亚洲欧美在线视频观看| 视频在线观看一区二区三区| 国产精品538一区二区在线| 99国产精品一区| 日韩一级免费观看| 国产欧美日韩精品一区| 亚洲一区二区影院| 国产精品一区不卡| 欧美性猛交一区二区三区精品| 欧美不卡激情三级在线观看| 亚洲视频免费观看| 麻豆精品一区二区三区| 99久久亚洲一区二区三区青草| 91精品国产福利在线观看| 亚洲国产经典视频| 日本欧美加勒比视频| 99视频有精品| 精品国产免费久久 | 亚洲高清免费一级二级三级| 国产精品一区二区x88av| 在线精品视频免费观看| 久久久久久久久99精品| 亚洲福利一区二区三区| 国产电影精品久久禁18| 欧美日韩精品免费观看视频 | 日韩理论片一区二区| 久久国产精品色| 在线观看一区二区精品视频| 国产日产亚洲精品系列| 日韩av不卡一区二区| 一本色道久久加勒比精品 | 日韩视频免费直播| 亚洲人成人一区二区在线观看| 国产综合久久久久久鬼色| 欧美日韩国产精选| 亚洲欧洲日产国码二区| 国产精品一级片| 精品国产髙清在线看国产毛片| 亚洲综合999| 日本高清不卡视频| 成人欧美一区二区三区白人 | 亚洲自拍偷拍综合| 91在线观看美女| 国产欧美日韩视频在线观看| 久久99在线观看| 欧美一区国产二区| 欧美a级一区二区| 欧美伦理电影网| 亚洲国产美女搞黄色| 欧美在线视频你懂得| 亚洲精品自拍动漫在线| 91尤物视频在线观看| 中文字幕在线免费不卡| 高清不卡一二三区| 国产亚洲精久久久久久| 国产不卡视频一区| 中文字幕精品一区| 成人免费高清视频| 最新国产成人在线观看| 91女人视频在线观看| 综合久久久久久久| 色婷婷久久综合| 五月婷婷久久丁香| 91.xcao| 奇米色一区二区| 欧美精品一区二区三区久久久 | 精品日韩欧美在线| 久久精品久久99精品久久| 精品国产免费人成电影在线观看四季 | 精品卡一卡二卡三卡四在线| 久久精品久久99精品久久| 久久综合色播五月| 成人高清伦理免费影院在线观看| 中文字幕 久热精品 视频在线| 99久久精品免费看国产| 亚洲一区二区三区中文字幕在线| 欧美色视频一区| 蜜臀av性久久久久蜜臀aⅴ| 2023国产精品视频| 99re热视频精品| 亚洲一区二区成人在线观看| 宅男噜噜噜66一区二区66| 玖玖九九国产精品| 中文字幕欧美激情| 色香蕉成人二区免费| 日韩精品电影在线观看| 久久精品夜夜夜夜久久| 91啪亚洲精品| 蜜臀av性久久久久蜜臀aⅴ四虎| 国产日产欧产精品推荐色| 色婷婷精品久久二区二区蜜臀av| 亚洲高清不卡在线观看| 久久久久久免费网|