15,979
社区成员
发帖
与我相关
我的任务
分享
#include <Windows.h>
#define WINDOW_WIDTH 800 //为窗口宽度定义的宏,方便在此处修改窗口
#define WINDOW_HEIGHT 600 //为窗口高度定义的宏
#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 nShowCmd)
{
//【1】窗口设计四部曲之一:开始设计一个完整的窗口类
WNDCLASSEX wndClass = { 0 };
wndClass.cbSize = sizeof(wndClass); //设置结构体的字节大小
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"icon1.ico", IMAGE_ICON, 0, 0, LR_DEFAULTSIZE | LR_LOADFROMFILE); //本地加载自定义icon图标
wndClass.hCursor = LoadCursor(NULL, IDC_ARROW); //指定窗口类的光标句柄
wndClass.hbrBackground = (HBRUSH)GetStockObject(GRAY_BRUSH); //为hbrbackground成员指定一个灰色画刷句柄
wndClass.lpszMenuName = NULL; //用一个以空终止的字符串,指定菜单资源的名字
wndClass.lpszClassName = L"ForTheDreamOfGameDevelop"; //用一个以空终止的字符串,指定窗口类的名字
//【2】窗口创建四部曲之二,注册窗口类
if (!RegisterClassEx(&wndClass)) return -1;
//【3】窗口创建四部曲之三:正式创建窗口
HWND hwnd = CreateWindow(L"ForTheDreamOfGameDevelop", WINDOW_TITLE, WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, CW_USEDEFAULT, WINDOW_WIDTH, WINDOW_HEIGHT, NULL, NULL, hInstance, NULL);
//【4】窗口创建四部曲之四:窗口的移动、更新与显示
MoveWindow(hwnd, 250, 80, WINDOW_WIDTH, WINDOW_HEIGHT, true); //窗口显示时的位置,左上角位于 250、80处
ShowWindow(hwnd, nShowCmd); //调用showwindow函数来显示窗口
UpdateWindow(hwnd);
//【5】消息循环过程
MSG msg = { 0 };
while (msg.message != WM_QUIT)
{
if (PeekMessage( &msg,0,0,0,PM_REMOVE )) //查看应用程序消息队列,有消息时将队列中的消息派发出去
{
TranslateMessage(&msg); //将虚拟键消息转换为字符消息
DispatchMessage(&msg); //分发一个消息给窗口程序
}
}
//【6】窗口的注销
UnregisterClass(L"ForTheDreamOfGameDevelop", wndClass.hInstance);
return 0;
}
LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message)
{
case WM_PAINT:
ValidateRect(hwnd, NULL);
break;
case WM_KEYDOWN:
if (wParam==VK_ESCAPE)
{
DestroyWindow(hwnd);
}
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hwnd, message, wParam, lParam);
}
return 0;
}
TCHAR __szWorkingDir__[MAX_PATH] = {0}; //存放当前工作目录
HINSTANCE hAppIns = GetModuleHandle(NULL);
GetModuleFileName(hAppIns,__szWorkingDir__,MAX_PATH);
int i = 0;
for(i=lstrlen(__szWorkingDir__);i>0&&__szWorkingDir__[i]!=_T('\\');__szWorkingDir__[i--]=0);
TCHAR szIconPath[MAX_PATH] = {0};
wsprintf(szIconPath,_T("%sres\\%s"),__szWorkingDir__,_T("icon.ico"));
wndClass.hIcon = (HICON)::LoadImage(hInstance, szIconPath, IMAGE_ICON, 0, 0, LR_DEFAULTSIZE | LR_LOADFROMFILE);