⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 winproc.h

📁 游戏编程精华02-含有几十个游戏编程例子
💻 H
📖 第 1 页 / 共 2 页
字号:
/**********************************************************************
 	MODULE: SkelDemo
	
	DESCRIPTION: This module is a demo of how to pratically use MRC data
				 to finally render the animation in an OpenGl window.				 	
	
	DEVELOPED BY:		MARCO TOMBESI
	CONTACT:		e-mail:		baggior@libero.it		
					web-page:	digilander.iol.it/baggior

 *>	Copyright (c) Marco Tombesi, 2001
 **********************************************************************/

#pragma once
#include "resource.h"

GLvoid KillGLWindow(GLvoid);
//==============================================================================================================
//////////////////////////////////////////////////////////////////////////////
// Main Windows Callback Process
//////////////////////////////////////////////////////////////////////////////
static LRESULT CALLBACK WndProc(	HWND	hWnd,							// Handle For This Window
							UINT	uMsg,									// Message For This Window
							WPARAM	wParam,									// Additional Message Information
							LPARAM	lParam)									// Additional Message Information
{																			
	switch (uMsg)															// Check For Windows Messages
	{																		
		case WM_ACTIVATE:													// Watch For Window Activate Message
		{																	
			if (!HIWORD(wParam))											// Check Minimization State
			{																
				active=TRUE;												// Program Is Active
				
			}																
			else															
			{																
				active=FALSE;												// Program Is No Longer Active
			}																
																			
			return 0;														// Return To The Message Loop
		}																	
																			
		case WM_SYSCOMMAND:													// Intercept System Commands
		{																	
			switch (wParam)													// Check System Calls
			{																
				case SC_SCREENSAVE:											// Screensaver Trying To Start?
				case SC_MONITORPOWER:										// Monitor Trying To Enter Powersave?
				return 0;													// Prevent From Happening
			}																
			break;															// Exit
		}																	
																			
		case WM_CLOSE:														// Did We Receive A Close Message?
		{																	
			PostQuitMessage(0);												// Send A Quit Message
			return 0;														// Jump Back
		}																	
																			
		case WM_KEYDOWN:													// Is A Key Being Held Down?
		{																	
			keys[wParam] = TRUE;											// If So, Mark It As TRUE
			return 0;														// Jump Back
		}																	
																			
		case WM_KEYUP:														// Has A Key Been Released?
		{																	
			keys[wParam] = FALSE;											// If So, Mark It As FALSE
			return 0;														// Jump Back
		}																	
																			
		case WM_SIZE:														// Resize The OpenGL Window
		{
			ReSizeGLScene(LOWORD(lParam),HIWORD(lParam));					// LoWord=Width, HiWord=Height
			return 0;														// Jump Back
		}
	}


	return DefWindowProc(hWnd,uMsg,wParam,lParam);							// Pass All Unhandled Messages To DefWindowProc
}


//==============================================================================================================
BOOL CALLBACK DialogProc(
						 HWND hwndDlg,  // handle to dialog box
						 UINT uMsg,     // message
						 WPARAM wParam, // first message parameter
						 LPARAM lParam  // second message parameter
						 )
{
	switch (uMsg)															// Check For Windows Messages
	{																		
		
		case WM_INITDIALOG:
		{
			return 0;
		}

		case WM_COMMAND:
		{																	
			UINT wNotifyCode = HIWORD(wParam);			// notification code 
			int idButton = LOWORD(wParam);				// item, control, or accelerator identifier 
			HWND hwndButton = (HWND) lParam;			// handle of control 

			
			if (wNotifyCode==BN_CLICKED)
			{
				switch (idButton)
				{		
					case IDC_CHECK_NORM:
						if (SendMessage(hwndButton,BM_GETCHECK,0,0)==BST_CHECKED)
							normals=true;
						else normals=false;
						break;
					
					case IDC_CHECK_SKEL:
						if (SendMessage(hwndButton,BM_GETCHECK,0,0)==BST_CHECKED)
							skel=true;
						else skel=false;
						break;
				
					case IDC_BUTTON_ROTATE:
						rotate=!rotate;
						if (rotate)
							SendMessage(hwndButton,WM_SETTEXT,0,(LPARAM)TEXT ("Stop"));
						else 
							SendMessage(hwndButton,WM_SETTEXT,0,(LPARAM)TEXT ("Rotate"));
						break;
				}
			}
			

			SetFocus(hWnd);
			return 1;
		}
	}
	return 0;
}
//==============================================================================================================

 

//==============================================================================================================
//==============================================================================================================
// Creates The OpenGL Window
// Parameters:
//	title			- Title To Appear At The Top Of The Window
//	width			- Width Of The GL Window Or Fullscreen Mode
//	height			- Height Of The GL Window Or Fullscreen Mode
//	bits			- Number Of Bits To Use For Color (8/16/24/32)
//	fullscreenflag	- Use Fullscreen Mode (TRUE) Or Windowed Mode (FALSE)
//////////////////////////////////////////////////////////////////////////////
BOOL CreateGLWindow(char* title, int width, int height, int bits, bool fullscreenflag)
{
	GLuint		PixelFormat;												// Holds The Results After Searching For A Match
	WNDCLASS	wc;															// Windows Class Structure
	DWORD		dwExStyle;													// Window Extended Style
	DWORD		dwStyle;													// Window Style
	RECT		WindowRect;													// Grabs Rectangle Upper Left / Lower Right Values
	WindowRect.left=(long)0;												// Set Left Value To 0
	WindowRect.right=(long)width;											// Set Right Value To Requested Width
	WindowRect.top=(long)0;													// Set Top Value To 0
	WindowRect.bottom=(long)height;											// Set Bottom Value To Requested Height
																			
	fullscreen=fullscreenflag;												// Set The Global Fullscreen Flag

	hInstance			= GetModuleHandle(NULL);							// Grab An Instance For Our Window
	wc.style			= CS_HREDRAW | CS_VREDRAW | CS_OWNDC;				// Redraw On Size, And Own DC For Window.
	wc.lpfnWndProc		= (WNDPROC) WndProc;								// WndProc Handles Messages
	wc.cbClsExtra		= 0;												// No Extra Window Data
	wc.cbWndExtra		= 0;												// No Extra Window Data
	wc.hInstance		= hInstance;										// Set The Instance
	wc.hIcon			= LoadIcon(hInstance, MAKEINTRESOURCE(IDI_ICON1));	// Load The Default Icon
	wc.hCursor			= LoadCursor(NULL, IDC_CROSS);						// Load The Arrow Pointer
	wc.hbrBackground	= NULL;												// No Background Required For GL
	wc.lpszMenuName		= NULL;												// We Don't Want A Menu
	wc.lpszClassName	= "OP GL render screen";							// Set The Class Name
																			
	if (!RegisterClass(&wc))												// Attempt To Register The Window Class
	{
		MessageBox(NULL,"Failed To Register The Window Class.","ERROR",MB_OK|MB_ICONEXCLAMATION);
		return FALSE;														// Return FALSE
	}																		
																			
	if (fullscreen)															// Attempt Fullscreen Mode?
	{																		
		DEVMODE dmScreenSettings;											// Device Mode
		memset(&dmScreenSettings,0,sizeof(dmScreenSettings));				// Makes Sure Memory's Cleared
		dmScreenSettings.dmSize=sizeof(dmScreenSettings);					// Size Of The Devmode Structure
		dmScreenSettings.dmPelsWidth	= width;							// Selected Screen Width
		dmScreenSettings.dmPelsHeight	= height;							// Selected Screen Height
		dmScreenSettings.dmBitsPerPel	= bits;								// Selected Bits Per Pixel
		dmScreenSettings.dmDisplayFrequency = 75;							// refresh rate in Hz
		dmScreenSettings.dmFields=DM_BITSPERPEL|DM_PELSWIDTH|DM_PELSHEIGHT|DM_DISPLAYFREQUENCY;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -