//---------------------头文件---------------------
#include<windows.h>
//---------------------宏定义---------------------
#define WINDOW_WIDTH 800 //窗口宽度
#define WINDOW_HEIGHT 600 //窗口高度
#define WINDOW_TITLE L"GameDevelopDepartment" //窗口标题 游戏开发部
//---------------------全局函数---------------------
LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam);
BOOL Game_Init(HWND hwnd);//资源初始化
VOID Game_Paint(HWND hwnd);//绘图
BOOL Game_CleanUp(HWND hwnd);//资源清理
//---------------------全局变量---------------------
HDC g_hdc = NULL; //全局设备环境句柄
//---------------------WinMain()函数---------------------
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd) {
//1.建立窗口类
WNDCLASSEX wndClass = { 0 };
wndClass.cbSize = sizeof(WNDCLASSEX); //窗口字节数大小
wndClass.style = CS_HREDRAW | CS_VREDRAW; //窗口样式 窗口宽度和高度改变时候重绘窗口
wndClass.lpfnWndProc = WndProc; //指向窗口过程的指针
wndClass.cbClsExtra = 0; //窗口类的额外内存
wndClass.cbWndExtra = 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); //窗口的灰色画刷句柄
wndClass.lpszMenuName = NULL;
wndClass.lpszClassName = L"GameDevelopDepartment"; //窗口类名字
//2.注册窗口类
if (!RegisterClassEx(&wndClass)) {
//注册失败
return -1;
}
//创建窗口
HWND hwnd = CreateWindow(L"GameDevelopDepartment", 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, nShowCmd);
UpdateWindow(hwnd);
if (!Game_Init(hwnd)) {
//资源初始化失败
MessageBox(hwnd, L"资源初始化失败", L"详细窗口", 0);
return false;
}
//消息循环
MSG msg = { 0 };
while (msg.message != WM_QUIT){
//PeekMessage接收到消息返回非0 未接收到消息返回0
if (PeekMessage(&msg, 0, 0, 0, PM_REMOVE)) {
TranslateMessage(&msg); //虚拟键转为字符
DispatchMessage(&msg); //分发一个消息给窗口程序
}
}
UnregisterClass(L"GameDevelopDepartment", wndClass.hInstance);
return 0;
}
LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) {
PAINTSTRUCT paintStruct; //PAINTSTRUCT结构体用于记录绘信息
switch (message) {
case WM_PAINT:
g_hdc = BeginPaint(hwnd, &paintStruct); //指定窗口准备开始绘画工作,并将绘画有关幸喜填充到paintStruct结构体中
Game_Paint(hwnd); //绘画
EndPaint(hwnd,&paintStruct); //结束绘画
ValidateRect(hwnd, NULL); //更新客户区的显示
break;
case WM_KEYDOWN:
if (wParam == VK_ESCAPE) { //用户按下ESC 退出窗口
DestroyWindow(hwnd);
}
break;
case WM_DESTROY: //窗口销毁
Game_CleanUp(hwnd); //资源清理
PostQuitMessage(0); //向系统传递信息表示又线程终止请求
break;
default: //默认调用默认窗口过程
return DefWindowProc(hwnd, message, wParam, lParam);
}
}
//---------------------Game_Init()函数---------------------
//描述:初始化函数 进行简单的初始化
BOOL Game_Init(HWND hwnd)
{
g_hdc = GetDC(hwnd);
Game_Paint(hwnd);
ReleaseDC(hwnd, g_hdc);
return true;
}
//---------------------Game_CleanUp()函数---------------------
//描述:绘制函数 在这个函数中进行绘制操作
VOID Game_Paint(HWND hwnd)
{
}
//---------------------Game_CleanUp()函数---------------------
//描述:资源清理函数 在这个函数中进行退出窗口前的资源清理
BOOL Game_CleanUp(HWND hwnd)
{
return true;
}
逐梦旅程---GDICoredemo
于 2023-03-10 13:28:07 首次发布