📄 cmain.cpp
字号:
#include "CGame.h"
CGame *g_pGame;
HINSTANCE g_hInstance;
HWND g_hWnd;
LRESULT CALLBACK WindowProc(HWND hWnd, UINT msg , WPARAM wParam, LPARAM lParam)
{
if(g_pGame)
{
g_pGame->HandleMessage(hWnd, msg, wParam, lParam);
}
switch (msg)
{
case WM_SETFOCUS:
g_pGame->SetSleep(false);
break;
case WM_KILLFOCUS:
g_pGame->SetSleep(true);
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
case WM_KEYDOWN:
if( wParam == VK_ESCAPE )
::DestroyWindow(hWnd);
break;
default:
return DefWindowProc(hWnd, msg, wParam, lParam);
}
return 0;
}
bool RegisterWindow(HINSTANCE hInstance) //注册窗口类
{
WNDCLASS wc; //注册窗口类
g_hInstance = hInstance;
//填充WNDCLASS成员
wc.cbClsExtra = 0; //额外类空间,可选择在其中存放窗口类共有的数据
wc.cbWndExtra = 0; //额外窗口空间,可选择在其中存放每个窗口所拥有的数据
wc.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH); //取得绘制窗口背景的画刷物件
wc.hCursor = LoadCursor(NULL,IDC_ARROW); //窗口类的鼠标光标
wc.hIcon = LoadIcon(NULL,IDI_QUESTION); //窗口上和任务栏上显示的图标
wc.hInstance = g_hInstance; //应用程序的实例句柄,标示这个窗口类和哪个应用程序的实例相关数据
wc.lpfnWndProc = WindowProc; //此类窗口的消息处理函数,在这里指WindowProc函数
wc.lpszClassName = "D3D框架"; //窗口类的名称
wc.lpszMenuName = NULL; //缺省的菜单名,用他关联一个默认菜单
wc.style = CS_HREDRAW|CS_VREDRAW; //类风格
if( !RegisterClass(&wc) )
{
::MessageBox(0, "错误:注册窗口类 - 失败", 0, 0);
return false;
} //注册窗口类
return true;
}
bool InitD3D(HWND g_hWnd)
{
g_pGame = new CGame;
if( false == g_pGame->Init( g_hInstance, g_hWnd ) )
{
::MessageBox(0, "错误:初始化D3D - 失败", 0, 0);
return false;
}
return true;
}
void Cleanup()
{
SAFE_DELETE(g_pGame);
}
void LogicFrame(float fElapsedTime)
{
g_pGame->Update(fElapsedTime);
}
void RenderFrame(float fElapsedTime)
{
g_pGame->Render(fElapsedTime);
}
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd )
{
MSG msg; //消息
RegisterWindow(hInstance); //注册窗口类
g_hWnd=CreateWindow("D3D框架","小游戏",WS_OVERLAPPEDWINDOW,100,100,800,600,
NULL,NULL,hInstance,NULL); //创建窗口
if (!g_hWnd)
{
MessageBox(0,"错误:创建窗口失败 - 失败",0,0);
}
////////////////////////
////初始化D3D//////////
InitD3D(g_hWnd);
///////////////////////
ShowWindow(g_hWnd,SW_SHOW); //显示窗口
UpdateWindow(g_hWnd); //更新窗口
ZeroMemory(&msg,sizeof(msg)); //清空msg;
while (msg.message!=WM_QUIT)
{
if (PeekMessage(&msg,NULL,0,0,PM_REMOVE))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
else
{
// 两个时间戳之间的差值
static float fPreTime = static_cast<float>(timeGetTime());
float fCurrentTime = static_cast<float>(timeGetTime());
float fElapsedTime = (fCurrentTime - fPreTime)*0.001f;
LogicFrame(fElapsedTime);//逻辑桢
RenderFrame(fElapsedTime);//渲染桢
fPreTime = fCurrentTime;
}
}
Cleanup();//清除
UnregisterClass("D3D框架",hInstance); ///注册窗口类
return (int)msg.wParam; //函数的返回值
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -