游戏壳

.h

#pragma once
#ifndef _GAMEAPP_H_
#define _GAMEAPP_H_
#include <windows.h>


#define DECLARE(ThisClass) \
	CGameApp* CreateObject()\
	{\
		return new ThisClass;\
	}


class CGameApp
{
protected:
	HINSTANCE m_hIns;
	HWND m_hMainWnd;
public:
	CGameApp()
	{
		m_hIns = 0;
		m_hMainWnd = 0;
	}
	virtual ~CGameApp()
	{
	}
public:
	void SetHandle(HINSTANCE hIns,HWND hwnd)
	{
		m_hIns = hIns;
		m_hMainWnd = hwnd;
	}
public:
	virtual void OnCreateGame(){}					//  WM_CREATE
	virtual void OnGameDraw(){}					//  WM_PAINT
	virtual void OnGameRun(WPARAM nTimerID){}      //  WM_TIMER
	virtual void OnKeyDown(WPARAM nKey){}         //  WM_KEYDOWN
	virtual void OnKeyUp(WPARAM nKey){}           //  WM_KEYUP
	virtual void OnLButtonDown(POINT point){}     //  WM_LBUTTONDOWN
	virtual void OnLButtonUp(POINT point){}       //  WM_LBUTTONUP
	virtual void OnMouseMove(POINT point){}       //  WM_MOUSEMOVE
};


#endif//_GAMEAPP_H_

,cpp

#include <windows.h>
#include "GameApp.h"
#include <time.h>

LRESULT CALLBACK WindowProc(HWND hwnd,UINT uMsg,WPARAM wParam,LPARAM lParam);
HINSTANCE hIns = 0;

int CALLBACK WinMain(HINSTANCE hInstance,HINSTANCE hPreInstance,LPSTR lpCmdLine,int nShowCmd)
{
	srand((unsigned int)time(0));
	//-----------------------------------------------------
	HWND hwnd = 0;
	MSG msg;       //  装消息的结构体
	WNDCLASSEX wndclass;   //创建窗口的结构体
	//-----------------------------------------------------
	
	hIns = hInstance;

	//----------------------创建窗口过程-----------------------------------
	//  1. 设计
	wndclass.cbClsExtra = 0;
	wndclass.cbWndExtra = 0;
	wndclass.cbSize = sizeof(wndclass);
	wndclass.hbrBackground = (HBRUSH)COLOR_WINDOW;
	wndclass.hCursor = LoadCursor(0,MAKEINTRESOURCE(IDC_ARROW));
	wndclass.hIcon = 0;
	wndclass.hIconSm = 0;
	wndclass.hInstance = hInstance;
	wndclass.lpfnWndProc = WindowProc;
	wndclass.lpszClassName = "lele";
	wndclass.lpszMenuName = 0;
	wndclass.style = CS_HREDRAW|CS_VREDRAW;
	// 2.  注册
	if(RegisterClassEx(&wndclass) == FALSE)
	{
		MessageBox(0,"注册失败","提示",MB_OK);
		return 0;
	}
	//  3.  创建
	hwnd = CreateWindow("lele","O(∩_∩)O哈哈~",WS_OVERLAPPEDWINDOW,0,0,500,500,0,0,hInstance,0);
	if(hwnd == 0)
	{
		MessageBox(0,"创建失败","提示",MB_OK);
		return 0;	
	}
	//  4.  显示窗口
	ShowWindow(hwnd,SW_SHOW);
	//---------------------------创建窗口过程------------------------------------------------



	//----------------------------消息循环-------------------------------------------
	while(GetMessage(&msg,0,0,0))
	{
		TranslateMessage(&msg);
		DispatchMessage(&msg);
	}
	//----------------------------消息循环-------------------------------------------

	return 0;
}


//=================================处理消息========================================================
CGameApp* pApp = 0;
CGameApp* CreateObject();

LRESULT CALLBACK WindowProc(HWND hwnd,UINT uMsg,WPARAM wParam,LPARAM lParam)
{
	switch (uMsg)
	{
	case WM_CREATE:
		{
			//  创建一个游戏的对象
			pApp = CreateObject();
			if(pApp != 0)
			{
				//  设置句柄
				pApp->SetHandle(hIns,hwnd);
				//  初始化,创建游戏
				pApp->OnCreateGame();
			}
		}
		break;
	case WM_PAINT:
		{
			if(pApp != 0)
			{
				//  显示游戏
				pApp->OnGameDraw();
			}
		}
		break;
	case WM_TIMER:
		{
			if(pApp != 0)
			{
				//  游戏运行
				pApp->OnGameRun(wParam);
			}
		}
		break;
	case WM_KEYDOWN:
		{
			if(pApp != 0)
			{
				pApp->OnKeyDown(wParam);
			}
		}
		break;
	case WM_KEYUP:
		{
			if(pApp != 0)
			{
				pApp->OnKeyUp(wParam);
			}
		}
		break;
	case WM_LBUTTONDOWN:
		{
			if(pApp != 0)
			{
				POINT point;
				point.x = LOWORD(lParam);
				point.y = HIWORD(lParam);
				pApp->OnLButtonDown(point);
			}
		}
		break;
	case WM_LBUTTONUP:
		{
			if(pApp != 0)
			{
				POINT point;
				point.x = LOWORD(lParam);
				point.y = HIWORD(lParam);
				pApp->OnLButtonUp(point);
			}
		}
		break;
	case WM_MOUSEMOVE:
		{
			if(pApp != 0)
			{
				POINT point;
				point.x = LOWORD(lParam);
				point.y = HIWORD(lParam);
				pApp->OnMouseMove(point);
			}
		}
		break;
	case WM_CLOSE:
		{
			//  删除游戏
			delete pApp;
			pApp = 0;
			PostQuitMessage(0);
		}
		break;
	}

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

我们要学会使用游戏壳,来实现其复用性。也就是继承游戏壳。

PlaneApp.h

#pragma once
#include "gameapp.h"
class CPlaneApp :
	public CGameApp
{
public:
	CPlaneApp(void);
	~CPlaneApp(void);
public:
	virtual void OnLButtonDown(POINT point)
	{
		::MessageBox(0,"asd","asd",MB_OK);
	}
};


PlaneApp.cpp

#include "PlaneApp.h"

DECLARE(CPlaneApp)
CPlaneApp::CPlaneApp(void)
{
}


CPlaneApp::~CPlaneApp(void)
{
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值