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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? window.cpp

?? <B>DirectX9.0 3D游戲編程</B>
?? CPP
字號:
/*******************************************************************
 *         Advanced 3D Game Programming using DirectX 9.0
 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
 * copyright (c) 2003 by Peter A Walsh and Adrian Perez
 * See license.txt for modification and distribution information
 ******************************************************************/

#include "stdafx.h"
#include "Window.h"
#include "GraphicsLayer.h"
#include "Application.h"

using namespace std;

cWindow* cWindow::m_pGlobalWindow = NULL;

/**
 * We can't unwind our stack across the dll boundary
 * into kernel32.dll or any other system dll's.  
 * because of this we must catch any errors that
 * occur in wndproc and then re-throw them inside
 * the message pump.
 */
cGameError* g_pThrownError = NULL;


LRESULT CALLBACK GlobalWndProc(
	HWND hWnd,
	UINT uMsg,
	WPARAM wParam,
	LPARAM lParam )
{
	assert( MainWindow() );

	return MainWindow()->WndProc( hWnd, uMsg, wParam, lParam );
}



cWindow::cWindow( int width, int height, const char* name ) :
	m_Width( width ),
	m_Height( height ),
	m_hWnd( NULL )
{
	/**
	 * Only one primary window should be created.
	 */
	if( m_pGlobalWindow )
	{
		throw cGameError( "Window object already instantiated!\n" );
	}

	m_pGlobalWindow = this;
	m_bActive = false;


	// copy the name over
	m_name = string( name );
}

cWindow::~cWindow()
{
	DestroyWindow( m_hWnd );
	m_pGlobalWindow = NULL;
}


LRESULT cWindow::WndProc(
	HWND hWnd,
	UINT uMsg,
	WPARAM wParam,
	LPARAM lParam )
{
	/**
	 * If we get another message after a thrown
	 * error, return immediately
	 */
	if( g_pThrownError )
	{
		return DefWindowProc(hWnd, uMsg, wParam, lParam);	
	}


	bool bRunDefault = false;

	try
	{
		switch( uMsg ) 
		{
		case WM_CREATE:
			{
				MainWindow()->m_hWnd = hWnd;
				MainWindow()->m_bActive = true;
				break;
			}
		case WM_PAINT:
			{
				// don't do anything.
				ValidateRect( hWnd, NULL );
				break;
			}
		case WM_KEYDOWN:
			{
				switch( wParam )
				{
				// Quit if the escape key is pressed
				case VK_ESCAPE:
					{
						PostQuitMessage(0);
						break;
					}
				default:
					{
						break;
					}
				}
			}

		case WM_SETFOCUS:
			{
				if( Input() )
				{
					Input()->SetFocus();
				}
				break;
			}
		case WM_KILLFOCUS:
			{
				if( Input() )
				{
					Input()->KillFocus();
				}
				break;
			}
		case WM_ERASEBKGND:
			{
				break;
			}
		case WM_DESTROY:
			{
				PostQuitMessage(0);
				break;
			}
		default:
			bRunDefault = true;
			break;
		}	
	}
	catch( cGameError& err )
	{
		g_pThrownError = new cGameError( err );
		return 0;
	}

	if( bRunDefault )
	{
		return DefWindowProc(hWnd, uMsg, wParam, lParam);
	}

	return 0;
}


void cWindow::RegisterClass( WNDCLASSEX* pWc )
{
	WNDCLASSEX wcex;
	if( pWc )
	{
		wcex = *pWc;
	}
	else
	{
		// fill in some default values
		wcex.cbSize = sizeof(WNDCLASSEX); 

		wcex.style			= CS_HREDRAW | CS_VREDRAW;
		wcex.lpfnWndProc	= GlobalWndProc;
		wcex.cbClsExtra		= 0;
		wcex.cbWndExtra		= 0;
		wcex.hInstance		= AppInstance();
		wcex.hIcon			= 0;
		wcex.hCursor		= LoadCursor(NULL, IDC_ARROW);
		wcex.hbrBackground	= (HBRUSH)(COLOR_WINDOW+1);
		wcex.lpszMenuName	= 0;
		wcex.lpszClassName	= m_name.c_str();
		wcex.hIconSm		= 0;
	}

	if( 0 == RegisterClassEx(&wcex) )
	{
		throw cGameError("[cWindow::RegisterClass]: Registering window class failed!\n");
	}
}

void cWindow::InitInstance()
{

	HINSTANCE hi = AppInstance();

	RECT rc;
	rc.left = 0;
	rc.top = 0;
	rc.right = m_Width;
	rc.bottom = m_Height;
	AdjustWindowRect( &rc, WS_OVERLAPPEDWINDOW, FALSE );

	/**
	 * Usually we capture the return value of CreateWindow,
	 * as it is the window handle for our window. However,
	 * before CreateWindow finishes, WM_CREATE is called
	 * on our window, and we just capture the window handle
	 * there.
	 */
	CreateWindow( 
	   m_name.c_str(), 
	   m_name.c_str(), 
	   WS_OVERLAPPEDWINDOW | WS_VISIBLE,
	   0, 
	   0, 
	   rc.right - rc.left, 
	   rc.bottom - rc.top, 
	   NULL, 
	   NULL, 
	   AppInstance(), 
	   NULL);

   if ( !m_hWnd )
   {
		throw cGameError("[cWindow::InitInstance]: Creating window failed!\n");
   }

   // Draw
   ShowWindow( m_hWnd, SW_SHOW );
   UpdateWindow( m_hWnd );
}


bool cWindow::HasMessages()
{
	MSG msg;
    if( 0 == PeekMessage( &msg, NULL, 0U, 0U, PM_NOREMOVE ) )
	{
		// There weren't any messages
		return false;
	}
	return true;
}

eResult cWindow::Pump()
{
	MSG msg;
	PeekMessage( &msg, NULL, 0U, 0U, PM_REMOVE );

	if( WM_QUIT == msg.message )
		return resFalse;

	TranslateMessage( &msg );
    DispatchMessage( &msg );

	/**
	 * Check to see if an error occured inside the pump
	 */
	if( g_pThrownError )
	{
		cGameError out = *g_pThrownError;
		delete g_pThrownError;
		throw out;
	}


	return resAllGood;
}



//==========--------------------------  cFullscreenWindow

cFullscreenWindow::cFullscreenWindow( int width, int height, const char* name ) :
	cWindow( width, height, name )
{
}

void cFullscreenWindow::InitInstance()
{
	CreateWindow( 
	   m_name.c_str(), 
	   m_name.c_str(), 
	   WS_POPUP,
	   0, 0, m_Width, m_Height, 
	   NULL, 
	   NULL, 
	   AppInstance(), 
	   NULL);

   if ( !m_hWnd )
   {
		throw cGameError("[cWindow::InitInstance]: Creating window failed!\n");
   }
   UpdateWindow( m_hWnd );
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久久亚洲午夜电影| 欧美三区在线视频| 亚洲国产综合91精品麻豆| 精品国偷自产国产一区| 色婷婷久久综合| voyeur盗摄精品| 国产一区二区伦理片| 一区二区成人在线观看| 亚洲免费伊人电影| 18欧美亚洲精品| 中文字幕在线观看不卡| 2023国产精品自拍| 久久网站热最新地址| 欧美不卡激情三级在线观看| 欧美精品久久99| eeuss鲁片一区二区三区 | 欧美一区二区三区电影| 欧美综合欧美视频| 欧美午夜寂寞影院| 色婷婷综合久久久久中文一区二区 | 蜜臀av性久久久久av蜜臀妖精| 国产精品欧美一区喷水| 国产精品免费丝袜| 国产精品日日摸夜夜摸av| 中文字幕在线不卡| 亚洲精选视频在线| 亚洲成人7777| 国产精品久久久久久久久晋中 | 亚洲人被黑人高潮完整版| 亚洲免费观看高清完整| 亚洲国产美女搞黄色| 首页国产欧美日韩丝袜| 日韩二区三区在线观看| 香蕉成人伊视频在线观看| 日韩激情一区二区| 激情五月婷婷综合网| 成人免费av资源| 日本高清视频一区二区| 欧美一三区三区四区免费在线看| 欧美一区二区三区免费视频| 久久综合999| 欧美激情一区二区三区不卡| 亚洲综合色区另类av| 蜜乳av一区二区三区| 成人久久久精品乱码一区二区三区 | 精品国产精品网麻豆系列| 中文字幕va一区二区三区| 亚洲你懂的在线视频| 日韩制服丝袜av| 国产成人免费在线观看不卡| 99re热视频精品| 日韩一卡二卡三卡四卡| 中文字幕在线不卡一区二区三区| 日韩高清一区在线| 国产成人在线电影| 欧美精品一二三| 国产精品麻豆网站| 视频一区中文字幕国产| 国产在线精品一区二区| 欧美色网站导航| 国产欧美精品一区二区色综合 | 99久久综合色| 精品少妇一区二区三区免费观看 | 顶级嫩模精品视频在线看| 欧美日韩色一区| 中文字幕第一区二区| 欧美a一区二区| 91国偷自产一区二区开放时间| 欧美一区二区三区视频在线| 亚洲精品美腿丝袜| 国产91丝袜在线播放0| 欧美亚洲国产怡红院影院| 欧美激情在线观看视频免费| 精品一区二区三区免费| 欧美人与禽zozo性伦| 亚洲色图第一区| 成人小视频在线观看| 26uuu国产在线精品一区二区| 午夜精品视频在线观看| 日本韩国欧美在线| 亚洲精品视频在线看| 99r国产精品| 日韩欧美中文一区二区| 日本中文字幕不卡| 91精品国产综合久久婷婷香蕉| 国产精品污www在线观看| 国产伦精品一区二区三区视频青涩| 欧美高清一级片在线| 亚洲午夜精品久久久久久久久| 91麻豆免费看| 一区二区不卡在线播放| 91麻豆免费观看| 亚洲人妖av一区二区| 91蜜桃网址入口| 一区二区三区不卡视频| 成人影视亚洲图片在线| 国产精品久久久久久久第一福利 | 国产一区二区三区在线观看精品| 欧美第一区第二区| 亚洲va中文字幕| 69久久夜色精品国产69蝌蚪网| 日韩成人av影视| 日韩亚洲欧美一区二区三区| 高清在线不卡av| 日日摸夜夜添夜夜添亚洲女人| 欧美va在线播放| 99re视频精品| 黑人精品欧美一区二区蜜桃 | 色综合视频一区二区三区高清| 亚洲成av人片www| 国产精品视频在线看| 欧美老人xxxx18| 成人动漫一区二区| 久久精品国产秦先生| 国产精品久久久久aaaa| 欧美一级在线观看| 色吧成人激情小说| 狠狠久久亚洲欧美| 婷婷开心激情综合| 亚洲人午夜精品天堂一二香蕉| 日韩一区二区免费在线观看| 99久久久精品| 国产福利一区在线观看| 日韩二区三区四区| 亚洲一级二级三级| 中文字幕一区视频| 欧美精品一区在线观看| 欧美日韩国产高清一区二区三区 | 8x福利精品第一导航| 99久久久精品| 成人动漫视频在线| 国产精品123区| 久久不见久久见免费视频7| 一卡二卡三卡日韩欧美| 中文字幕av资源一区| 日韩欧美三级在线| 51精品视频一区二区三区| 在线影视一区二区三区| 99久久精品国产一区| 粉嫩高潮美女一区二区三区 | 日韩vs国产vs欧美| 亚洲国产精品人人做人人爽| 亚洲欧美二区三区| 日韩一区中文字幕| 中文字幕一区二区三区色视频| 久久综合99re88久久爱| 久久婷婷国产综合国色天香| 欧美xxxxx牲另类人与| 欧美白人最猛性xxxxx69交| 欧美一区二区三区在线看| 欧美日韩不卡在线| 欧美日本高清视频在线观看| 欧美久久高跟鞋激| 91精品国产综合久久国产大片| 欧美区在线观看| 欧美一区二区视频在线观看2020 | 一区二区三区免费看视频| 亚洲少妇屁股交4| 亚洲精品高清视频在线观看| 亚洲久本草在线中文字幕| 一区二区三区日韩| 日韩av不卡一区二区| 麻豆精品在线视频| 高清在线不卡av| 日本丶国产丶欧美色综合| 精品视频资源站| 日韩欧美成人一区二区| 欧美精品一区二区三区很污很色的| 欧美va在线播放| 成人免费在线视频观看| 亚洲在线观看免费视频| 日本亚洲电影天堂| 国产成人欧美日韩在线电影| 色综合久久久久久久| 欧美日韩国产另类不卡| 亚洲精品一区二区在线观看| 国产精品第四页| 日韩专区欧美专区| 国产一区二区三区不卡在线观看| aaa国产一区| 欧美日韩成人综合在线一区二区| 欧美精品一区二区三区在线| 一区免费观看视频| 视频一区视频二区中文| 国产福利一区二区三区视频 | 一本色道a无线码一区v| 欧美一区二区三级| 最新高清无码专区| 久久成人羞羞网站| 91黄色小视频| 国产亚洲婷婷免费| 日韩电影免费在线观看网站| 狠狠狠色丁香婷婷综合激情 | 国产精品日产欧美久久久久| 亚洲国产一区二区a毛片| 久久aⅴ国产欧美74aaa| 色狠狠综合天天综合综合| 久久综合久久99| 亚洲国产乱码最新视频| 北条麻妃国产九九精品视频|