|
发表于 2020-4-30 09:12:05
|
显示全部楼层
#include <windows.h> //宏
#define WINDOW_HEIGHT 600
#define WINDOW_WIDTH 800
#define WINDOW_TITLE L"[致我们永不熄灭的游戏开发梦想]程序核心框架"
LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam);
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) //WinMain应用程序入口函数
{
//窗口创建第一步:设计一个完整的窗口类
WNDCLASSEX wndClass = { 0 }; //用WINDCLASSEX定义了一个窗口类
wndClass.cbSize = sizeof(WNDCLASSEX); //设置结构体的字节数
wndClass.style = CS_HREDRAW | CS_VREDRAW; //设置窗口的样式
wndClass.lpfnWndProc = WndProc; //设置指向窗口过程函数的指针
wndClass.cbClsExtra = 0; //窗口类的附加内存,取0就可以了
wndClass.cbWndExtra = 0; //窗口的附加内存,依然取0就行了
wndClass.hInstance = hInstance;
wndClass.hIcon = (HICON)::LoadImage(NULL, L"icon.ico", IMAGE_ICON, 0, 0,
LR_DEFAULTSIZE | LR_LOADFROMFILE); //本地加载自定义ico图标
wndClass.hCursor = LoadCursor(NULL, IDC_ARROW); //指定窗口类的光标句柄
wndClass.hbrBackground = (HBRUSH)GetStockObject(GRAY_BRUSH); //为hbrBackground成员指定一个灰色画刷句柄
wndClass.lpszMenuName = NULL; //用一个一空终止的字符串,指定菜单资源的名字
wndClass.lpszClassName = L"ForTheDreamOfGameDevelop"; //用一个一空终止的字符串,指定窗口类的名字
//窗口创建第二步:注册窗口类
if (!RegisterClassEx(&wndClass)) return -1; //创建了窗口必须要注册,窗口类才可以用。
//窗口创建第三步:正式创建窗口
HWND hwnd = CreateWindow(L"ForTheDreamOfGameDevelop", WINDOW_TITLE,
WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, WINDOW_WIDTH, WINDOW_HEIGHT, NULL, NULL, hInstance, NULL);
//窗口创建第四步:窗口的移动、显示与更新
MoveWindow(hwnd, 250, 80, WINDOW_WIDTH, WINDOW_HEIGHT, true);
ShowWindow(hwnd, nCmdShow);
UpdateWindow(hwnd);
//消息循环过程
MSG msg = { 0 };
while (msg.message!=WM_QUIT) //如果消息不是WM_QUIT消息队列,就继续循环。
{
if (PeekMessage(&msg,0,0,0,PM_REMOVE)) //查看应用程序消息队列,有消息时将队列中的消息派发出去
{
TranslateMessage(&msg); //将虚拟键消息转换为字符消息
DispatchMessage(&msg); //分发一个消息给窗口程序
}
}
//窗口类注销
UnregisterClass(L"ForTheDreamOfGameDevelop", wndClass.hInstance);
return 0;
}
//窗口过程函数WndProc
LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) //窗口过程函数
{
switch (message)
{
case WM_PAINT: //客户区重绘消息
//Direct3D_Render(hwnd); //进行画面的绘制
ValidateRect(hwnd, NULL); //更新客户区的显示
break;
case WM_KEYDOWN: //键盘按下消息
if (wParam == VK_ESCAPE) //ESC键
{
DestroyWindow(hwnd); //销毁窗口
}
break;
case WM_DESTROY: //窗口销毁信息
//Direct3D_CleanUp(); //清理COM接口对象
PostQuitMessage(0); //向系统表明有个线程有终止请求,WM_DESTROY
break;
default:
return DefWindowProc(hwnd, message, wParam, lParam); //调用默认的窗口过程函数提供默认处理
break;
}
return 0;
}
|
|