Sign in to follow this  

Errors!

This topic is 4834 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

Well sence my sorece code cd is currently dead ive attempted to pice together the code in the book. And ive been successfull except for one error. >< :\my documents\c++ programs\skeleton\gameengine.h(131) : error C2227: left of '->HandleEvent' must point to class/struct/union Heres the sorce for gameengine.h if someone could figure out the cause of this error.
#pragma once
#include "Skeleton.h"

BOOL GameInitialize(HINSTANCE hInstance);
void GameStart(HWND hWindow);
void GameEnd();
void GameActivate(HWND hWindow);
void GameDeactivate(HWND hWindow);
void GamePaint(HDC hDC);
void GameCycle();

LRESULT CALLBACK  WndProc(HWND hWindow, 
						  UINT msg, 
						  WPARAM wParam,
						  LPARAM lParam);




class GameEngine
{
protected:
	// Member Variables
	static GameEngine*	m_pGameEngine;
	HINSTANCE			m_hInstance;
	HWND				m_hWindow;
	TCHAR				m_szWindowClass[32];
	TCHAR				m_szTitle[32];
	WORD				m_wIcon, m_wSmallIcon;
	int					m_iWidth, m_iHeight;
	int					m_iFrameDelay;
	BOOL				m_bSleep;

public:
	// Constructor(s) /  Destructor
	GameEngine(HINSTANCE hInstance, 
			   LPTSTR szWindowClass,
			   LPTSTR szTitle,
			   WORD wIcon, 
			   WORD wSmallIcon,
			   int iWidth = 640,
			   int iHeight = 480);
	virtual ~GameEngine();

	// General Methods
	static GameEngine*	GetEngine() { return m_pGameEngine; };
	BOOL				Initialize(int iCmdShow);
	LRESULT				HandleEvent(HWND hWindow,
									UINT msg,
									WPARAM wParam,
									LPARAM lParam);

	// Accessor Methods
	HINSTANCE	GetInstance() { return m_hInstance; };
	HWND		GetWindow() { return m_hWindow; };
	void		SetWindow(HWND hWindow) { m_hWindow = hWindow; };
	LPTSTR		GetTitle() { return m_szTitle; };
	WORD		GetIcon() { return m_wIcon; };
	WORD		GetSmallIcon() { return m_wSmallIcon; };
	int			GetWidth() { return m_iWidth; };
	int			GetHeight() {return m_iHeight; };
	int			GetFrameDelay() { return m_iFrameDelay; };
	void		SetFrameRate(int iFrameRate)
	{
		m_iFrameDelay = 1000 / iFrameRate; 
	};
	BOOL		GetSleep() { return m_bSleep; };
	void		SetSleep(BOOL bSleep) { m_bSleep = bSleep; };
};

int WINAPI WinMain(HINSTANCE hInstance, 
				   HINSTANCE hPrevInstance,
				   PSTR szCmdLine,
				   int iCmdShow)
{
	MSG			msg;
	static int	iTickTrigger = 0;
	int			iTickCount;

	if (GameInitialize(hInstance))
	{
		// Initialize the game engine
		if (!GameEngine::GetEngine()->Initialize(iCmdShow))
			return FALSE;

		// Enter the main message loop
		while (TRUE)
		{
			if (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
			{
				// Process the message
				if (msg.message == WM_QUIT)
					break;
				TranslateMessage(&msg);
				DispatchMessage(&msg);
			}
			else
			{
				// Make sure the game engine isn't sleeping
				if (!GameEngine::GetEngine()->GetSleep())
				{
					// Check the tick count to see if a game cycle has elapsed
					
					iTickCount = GetTickCount();
					if (iTickCount > iTickTrigger)
					{
						iTickTrigger = iTickCount + GameEngine::GetEngine()->GetFrameDelay();
						GameCycle();
					}
				}
			}
		}
		return (int)msg.wParam;
	}
	
	// End the game
	GameEnd();

	return TRUE;
}


LRESULT CALLBACK WndProc(HWND hWindow, 
						 UINT msg,
						 WPARAM wParam,
						 LPARAM lParam)
{
	// Route all Windows messages to the game engine
	return GameEngine::GetEngine->HandleEvent(hWindow, msg, wParam, lParam);
}

GameEngine::GameEngine(HINSTANCE hInstance,
					   LPTSTR szWindowClass,
					   LPTSTR szTitle,
					   WORD wIcon,
					   WORD	wSmallIcon,
					   int iWidth,
					   int iHeight)
{
	// Set the member variables for the game engine
	m_pGameEngine = this;
	m_hInstance	= hInstance;
	m_hWindow = NULL;
	if (lstrlen(szWindowClass) > 0)
		lstrcpy(m_szWindowClass, szWindowClass);
	if (lstrlen(szTitle) > 0)
		lstrcpy(m_szTitle, szTitle);
	m_wIcon = wIcon;
	m_wSmallIcon = wSmallIcon;
	m_iWidth = iWidth;
	m_iHeight = iHeight;
	m_iFrameDelay = 50;		// 20 FPS default
	m_bSleep = TRUE;
}

GameEngine::~GameEngine()
{
}

BOOL GameEngine::Initialize(int iCmdShow)
{
	WNDCLASSEX		wndclass;

	// Create the window class for the main window
	wndclass.cbSize			= sizeof(wndclass);
	wndclass.style			= CS_HREDRAW | CS_VREDRAW;
	wndclass.lpfnWndProc	= WndProc;
	wndclass.cbClsExtra		= 0;
	wndclass.cbWndExtra		= 0;
	wndclass.hInstance		= m_hInstance;
	wndclass.hIcon			= LoadIcon(m_hInstance, MAKEINTRESOURCE(GetIcon()));
	wndclass.hIconSm		= LoadIcon(m_hInstance, MAKEINTRESOURCE(GetSmallIcon()));
	wndclass.hCursor		= LoadCursor(NULL, IDC_ARROW);
	wndclass.hbrBackground	= (HBRUSH)(COLOR_WINDOW + 1);
	wndclass.lpszMenuName	= NULL;
	wndclass.lpszClassName	= m_szWindowClass;

	// Register the window class
	if (!RegisterClassEx(&wndclass))
		return FALSE;

	// Calculate the window size and position based upon the game size
	int iWindowWidth = m_iWidth + GetSystemMetrics(SM_CXFIXEDFRAME) * 2,
		iWindowHeight = m_iHeight + GetSystemMetrics(SM_CYFIXEDFRAME) * 2 + 
			GetSystemMetrics(SM_CYCAPTION);
	if (wndclass.lpszMenuName != NULL)
		iWindowHeight += GetSystemMetrics(SM_CYMENU);
	int iXWindowPos = (GetSystemMetrics(SM_CXSCREEN) - iWindowWidth) / 2,
		iYWindowPos = (GetSystemMetrics(SM_CYSCREEN) - iWindowHeight) / 2;
	
	// Create the window
	m_hWindow = CreateWindow(m_szWindowClass, 
							 m_szTitle, 
							 WS_POPUPWINDOW | WS_CAPTION | WS_MINIMIZEBOX,
							 iXWindowPos, iYWindowPos,
							 iWindowWidth, iWindowHeight,
							 NULL, NULL,
							 m_hInstance,
							 NULL);
	if (!m_hWindow)
		return FALSE;

	// Show and update the window
	ShowWindow(m_hWindow, iCmdShow);
	UpdateWindow(m_hWindow);

	return TRUE;
}

LRESULT GameEngine::HandleEvent(HWND hWindow,
								UINT msg,
								WPARAM wParam,
								LPARAM lParam)
{
	// Route Window message to game engine member functions
	switch (msg)
	{
	case WM_CREATE:
		// Set the game window and start the game
		SetWindow(hWindow);
		GameStart(hWindow);
		return 0;

	case WM_ACTIVATE:
		// Activate/deactivate the game and update the SLeep status
		if (wParam != WA_INACTIVE)
		{
			GameActivate(hWindow);
			SetSleep(FALSE);
		}
		else
		{
			GameDeactivate(hWindow);
			SetSleep(TRUE);
		}
		return 0;

	case WM_PAINT:
		HDC			hDC;
		PAINTSTRUCT	ps;
		hDC = BeginPaint(hWindow, &ps);

		// Paint the game
		GamePaint(hDC);

		EndPaint(hWindow, &ps);
		return 0;

	case WM_DESTROY:
		// End the game and exit the application
		GameEnd();
		PostQuitMessage(0);
		return 0;
	}
	return DefWindowProc(hWindow,
						 msg,
						 wParam,
						 lParam);
}

Share this post


Link to post
Share on other sites
In:


LRESULT CALLBACK WndProc(HWND hWindow,
UINT msg,
WPARAM wParam,
LPARAM lParam)
{
// Route all Windows messages to the game engine
return GameEngine::GetEngine->HandleEvent(hWindow, msg, wParam, lParam);
}





GameEngine::GetEngine->HandleEvent(...)

should be

GameEngine::GetEngine()->HandleEvent(...)


Or am I wrong?

Share this post


Link to post
Share on other sites

This topic is 4834 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

Sign in to follow this