Archived

This topic is now archived and is closed to further replies.

Guzba

Whats wrong with this?

Recommended Posts

OK, i am new to game programming and win32 programming and i have created a basecode but its got a but in it i cant figure out for the life of me, i mean i just have it go to full screen and thats ALL but it does weird thing.. heres a copy of the exe: esc closes it.. http://www.guzba.com/openglerror/Space.exe and heres the source..
      
#include <windows.h>
#include <gl\gl.h>
#include <gl\glu.h>
#include <gl\glaux.h>

#pragma comment(lib, "opengl32.lib")
#pragma comment(lib, "glu32.lib")
#pragma comment(lib, "glaux.lib")

bool active = TRUE;
bool keys[256];

HGLRC           hRC		=	NULL;
HDC             hDC		=	NULL;
HWND            hWnd	=	NULL;
HINSTANCE       hInstance;

LRESULT	CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);

void killWindow(void)
{
	ChangeDisplaySettings(NULL, 0);
	ShowCursor(TRUE);

	if(hRC)
	{
		if(!wglMakeCurrent(NULL, NULL))
		{
			MessageBox(NULL, "Release Of DC And RC Failed", "SHUTDOWN ERROR", MB_OK | MB_ICONINFORMATION);
		}

		if(!wglDeleteContext(hRC))
		{
			MessageBox(NULL, "Release Rendering Context Failed", "SHUTDOWN ERROR", MB_OK | MB_ICONINFORMATION);
		}
		hRC = NULL;
	}

	if(hDC && !ReleaseDC(hWnd, hDC))
	{
		MessageBox(NULL, "Release Device Context Failed", "SHUTDOWN ERROR", MB_OK | MB_ICONINFORMATION);
		hDC = NULL;
	}

	if(hWnd && !DestroyWindow(hWnd))
	{
		MessageBox(NULL, "Could Not Release hWnd", "SHUTDOWN ERROR", MB_OK | MB_ICONINFORMATION);
		hWnd = NULL;
	}

	if(!UnregisterClass("Space", hInstance))
	{
		MessageBox(NULL, "Could Not Unregister Class", "SHUTDOWN ERROR", MB_OK | MB_ICONINFORMATION);
		hInstance = NULL;
	}

}

bool createWindow()
{	
	WNDCLASS Window;	
	int pixelFormat;

	DWORD dwExStyle;

	hInstance				= GetModuleHandle(NULL);
	Window.style			= CS_HREDRAW | CS_VREDRAW | CS_OWNDC;
	Window.lpfnWndProc		= (WNDPROC) WndProc;
	Window.cbClsExtra		= 0;
	Window.cbWndExtra		= 0;
	Window.hInstance		= hInstance;
	Window.hIcon			= LoadIcon(NULL, IDI_WINLOGO);
	Window.hCursor			= LoadCursor(NULL, IDC_ARROW);
	Window.hbrBackground	= NULL;
	Window.lpszMenuName		= NULL;
	Window.lpszClassName	= "Space";

	if(!RegisterClass(&Window))
	{
		MessageBox(NULL, "Failed To Register The Window Class", "ERROR", MB_OK | MB_ICONEXCLAMATION);		
		return FALSE;
	}

	dwExStyle = WS_EX_APPWINDOW;
	ShowCursor(FALSE);

	if(!(hWnd = CreateWindowEx(dwExStyle,	
							   "Space",
							   "Space Quest",
							   WS_POPUP,
							   0, 0,
							   800, 600,
							   NULL,
							   NULL,
							   hInstance,
							   NULL)))
	{	
		killWindow();	
		MessageBox(NULL, "Window Creation Error", "ERROR", MB_OK | MB_ICONEXCLAMATION);		
		return FALSE;	
	}

	DEVMODE newSettings;
	EnumDisplaySettings(NULL, 0, &newSettings);
	newSettings.dmPelsWidth  = 800;
	newSettings.dmPelsHeight = 600;
	newSettings.dmBitsPerPel = 16;
	newSettings.dmFields	 = DM_BITSPERPEL | DM_PELSWIDTH | DM_PELSHEIGHT;

	if (ChangeDisplaySettings(&newSettings, CDS_FULLSCREEN) 
		!= DISP_CHANGE_SUCCESSFUL)
	return FALSE;

	static PIXELFORMATDESCRIPTOR pfd =	{
										 sizeof(PIXELFORMATDESCRIPTOR),	
										 1,	
										 PFD_DRAW_TO_WINDOW |
										 PFD_SUPPORT_OPENGL |
										 PFD_DOUBLEBUFFER,
										 PFD_TYPE_RGBA,	
										 16,
										 0, 0, 0, 0, 0, 0,
										 0,	
										 0,	
										 0,	
										 0, 0, 0, 0,
										 16,
										 0,	
										 0,	
										 PFD_MAIN_PLANE,
										 0,	
										 0, 0, 0
	};

	if (!(hDC = GetDC(hWnd)))
	{
		killWindow();
		MessageBox(NULL, "Can't Create A GL Device Context", "ERROR", MB_OK | MB_ICONEXCLAMATION);
		return FALSE;
	}

	if (!(pixelFormat = ChoosePixelFormat(hDC, &pfd)))
	{
		killWindow();
		MessageBox(NULL, "Can't Find A Suitable PixelFormat", "ERROR",MB_OK | MB_ICONEXCLAMATION);
		return FALSE;
	}

	if(!SetPixelFormat(hDC, pixelFormat, &pfd))
	{
		killWindow();
		MessageBox(NULL, "Can't Set The PixelFormat", "ERROR", MB_OK | MB_ICONEXCLAMATION);
		return FALSE;
	}

	if (!(hRC = wglCreateContext(hDC)))
	{
		killWindow();
		MessageBox(NULL, "Can't Create A GL Rendering Context", "ERROR", MB_OK | MB_ICONEXCLAMATION);
		return FALSE;
	}

	if(!wglMakeCurrent(hDC, hRC))
	{
		killWindow();
		MessageBox(NULL, "Can't Activate The GL Rendering Context", "ERROR", MB_OK | MB_ICONEXCLAMATION);
		return FALSE;
	}

	ShowWindow(hWnd, SW_SHOW);
	SetForegroundWindow(hWnd);
	SetFocus(hWnd);

	return TRUE;
}

LRESULT CALLBACK WndProc(HWND	hWnd,
						 UINT	uMsg,
						 WPARAM	wParam,	
						 LPARAM	lParam)
{
	switch (uMsg)
	{
		case WM_ACTIVATE:
		{
			if (!HIWORD(wParam))
			{
				active = TRUE;
			}
			else
			{
				active = FALSE;
			}

			return 0;
		}

		case WM_SYSCOMMAND:
		{
			switch (wParam)
			{
				case SC_SCREENSAVE:
				case SC_MONITORPOWER:
				return 0;
			}
			break;
		}

		case WM_CLOSE:
		{
			PostQuitMessage(0);
			return 0;
		}

		case WM_KEYDOWN:
		{
			keys[wParam] = TRUE;
			return 0;
		}

		case WM_KEYUP:
		{
			keys[wParam] = FALSE;
			return 0;
		}
	}

	return DefWindowProc(hWnd,uMsg,wParam,lParam);
}

int WINAPI WinMain(HINSTANCE hInstance,
				   HINSTANCE hPrevInstance,
				   LPSTR lpCmdLine,
				   int nShowCmd)
{
	MSG		msg;
	bool	escape = FALSE;

	if (!createWindow())
	{
		return 0;
	}

	while(!escape)
	{
		if (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
		{
			if (msg.message == WM_QUIT)
			{
				escape = TRUE;
			}
			else
			{
				TranslateMessage(&msg);
				DispatchMessage(&msg);
			}
		}
		else
		{
			if (active)
			{
				if (keys[VK_ESCAPE])
				{
					escape = TRUE;
				}
				else
				{
					SwapBuffers(hDC);
				}
			}
		}
	}
	killWindow();
	return (msg.wParam);	
}
    
or since that isnt formatted you can download the c++ file here: http://www.guzba.com/openglerror/sys_win.cpp thanx.. i have tried changing the height and width and nothing helps.. its crazy lol [edited by - Guzba on March 18, 2003 6:28:32 PM]

Share this post


Link to post
Share on other sites
As you''re using OpenGL why dont you get a copy of Nehe''s basecode (available in various flavours) from http://nehe.gamedev.net which will do all of what you''re trying to do for you (includes switching to fullscreen).

Share this post


Link to post
Share on other sites
nehe's basecode is available with a tutorial, why dont you read the tutorial? maybe he explains something that you are missing. i havent made my own basecode so this is the most help i can be good luck

,Matt

-= kill one your a murderer, kill thousands your a conquerer =-

[edited by - samosa on March 18, 2003 7:27:38 PM]

Share this post


Link to post
Share on other sites