#include <windows.h> //一个windows应用程序应该包含的头文件
#include <stdio.h> //标准输入输出流文件
//声明一个回调函数
LRESULT CALLBACK WinSunProc(HWND hwnd,UINT uMsg, WPARAM wParam, LPARAM lparam);
//窗口句柄,窗口消息
//创建一个完整的窗口需要经过四个步骤:设计一个窗口类;注册窗口类;创建窗口;显示及更新窗口
//WinMain:Windows 程序的入口函数
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{ //hInstance 实例句柄、hPrevInstance默认这个参数为NULL、lpCmdLine存储一个命令行参数
WNDCLASS wndcls; //定义一个窗口对象
wndcls.cbClsExtra = 0; //指定额外内存空间
wndcls.cbWndExtra = 0; //指定额外内存空间
wndcls.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); //指定窗口背景颜色
wndcls.hCursor = LoadCursor(NULL, IDC_CROSS); //设置光标样式
wndcls.hIcon = LoadIcon(NULL, IDI_ERROR); //设置图标样式
wndcls.hInstance = hInstance; //指定窗口实例句柄
wndcls.lpfnWndProc = WinSunProc; //指定窗口函数、窗口主处理函数
wndcls.lpszClassName = "Visual C++ Game"; //窗口类名称
wndcls.lpszMenuName = NULL; //菜单
wndcls.style = CS_HREDRAW | CS_VREDRAW;
RegisterClass(&wndcls); //注册窗口类
HWND hwnd; //声名窗口句柄
//创建窗口,但是这里的窗口是不会显示的
hwnd = CreateWindow
("Visual C++ Game", // 已注册窗口类的名称
"Visual C++ 游戏开发", //窗口标题
WS_OVERLAPPEDWINDOW, //窗口风格
200, //窗口位置的横坐标
200, //窗口位置的纵坐标
600, //窗口宽度
400, //窗口高度
NULL,
NULL,
hInstance, //实例句柄
NULL
);
ShowWindow(hwnd, SW_SHOWNORMAL);
UpdateWindow(hwnd); //更新显示
//初始化完成后,WinMain进入消息循环
MSG msg;
while (GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg); //转换键盘消息
DispatchMessage(&msg); //分派消息
}
return 0;
}
//窗口函数,窗口函数通常利用switch/case 方式判断消息的种类,以决定处置方式,由于其被Windows 系统所调用的,所以这是一种call back 函数
LRESULT CALLBACK WinSunProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
switch (uMsg) //判断消息类型
{
case WM_PAINT: //更新窗口消息
HDC hDC; //定义 hDC 设备
PAINTSTRUCT ps;
hDC = BeginPaint(hwnd, &ps); //得到设备hDC
TextOut(hDC, 200, 0, "游戏的世界", strlen("游戏的世界"));
EndPaint(hwnd, &ps);
break;
case WM_CLOSE: //当单击关闭按钮时,产生关闭消息
if (IDYES == MessageBox(hwnd, "是否真的结束?","游戏开发", MB_YESNO))
{
DestroyWindow(hwnd); //单击“确认”按钮,销毁窗口
}
break;
case WM_DESTROY: //销毁窗口消息
PostQuitMessage(0); //退出程序
break;
default:
return DefWindowProc(hwnd, uMsg, wParam,lParam);
//在default 处必须调用DefWindowProc,这是Windows内部默认的消息处理函数
}
return 0;
}