希望国内的单机游戏开发环境能越来越好吧
#include<Windows.h>
#pragma comment(lib,"winmm.lib")
//窗口过程函数
/*
LRESULT CALLBACK WindowProc(
_In_ HWND hwdn,
_In_ UINT uMsg,
_In_ WPARAM wParam,
_In_ LPARAM lParam
);
*/
LRESULT CALLBACK WndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) {
/*
hInstance: h->handle Instance:句柄
hPrevInstance: h->handle Instance:句柄 Prev:前一个
lpCmdLine: 指定传输给运用程序的命令行参数 lp:参数为一个指针 Cmd:command Line:命令行
nCmdShow: 窗口如何显示
*/
/*
int WINAPI MessageBox(_In_opt HWND hWnd, _In_opt LPCTSTER lpText, _In_opt LPCTSTER lpCation, _In_opt UINT uType);
hWnd: 窗口的句柄
lpText: 窗口显示的内容
lpCation: 标题
uType: 样式
*/
MessageBox(NULL, L"你好,Visual Studio!", L"消息窗口", 0);
boolean error = 0;
if (error) {
MessageBox(NULL, L"在这里填写错误信息", L"在这里填写错误信息", 0);
}
/*
BOOL PlaySound(LPCTSTR pszSound, HMODULE hmod, DWORD fdwSound);
pszSound: 要播放的文件
hmod: 句柄
fdwSound: 控制文件播放的标识
*/
//PlaySound(L"FirstBlood.wav", NULL, SND_FILENAME | SND_ASYNC); //SND_FILENAME:pszSound参数指定了WAVE文件名 SND_ASYNC:同步播放声音 播放完后函数返回
//MessageBox(NULL, L"FirstBlood,你好,游戏开发世界", L"FirstBlood!", 0);
/* 消息 传递双击事件等
typedef struct tagMSG{
HWND hwnd; 消息的窗口
UINT message; 消息的标识符
WPARAM wParam; 附加信息
LPARAM lParam; 附加信息
DWORD time; 投递到消息队列的时间
POINT pt; 投递到消息队列中时鼠标的位置
}MSG
*/
/*控制窗口的特征
typedef struct tagWNDCLASSEX{
UINT cbSize; 结构体的字节数大小
UINT style; 窗口的风格样式
WNDPROC lpfnWndProc; 窗口过程
int cbClsExtra; 窗口类附加内存
int cbWndExtra; 窗口的附加内存
HINSTANCE hInstance; 实力句柄
HICON hIcon; 图标句柄
HCURSOR hCurosr; 光标句柄
HBRUSH hbrBackground; 背景画刷句柄
LPCTSTR lpszMenuName; 菜单名
LPCTSTR lpszClassName; 窗口类的名字
HICON hIconSm; 窗口类的小图标句柄
}WNDCLASSEX, *PWNDCLASSEX;
*/
//窗口类的构建
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);
wndClass.hCursor = LoadCursor(NULL, IDC_ARROW);
wndClass.hbrBackground = (HBRUSH)GetStockObject(GRAY_BRUSH);
wndClass.lpszMenuName = NULL;
wndClass.lpszClassName = L"GameDevelopDepartment";
//窗口类的注册 RegisterClassEx
RegisterClassEx(&wndClass);
//窗口的正式创建
/*
HWND WINAPI CreateWindow(
_In_opt LPCTSTR lpClassName, 对应窗口类名
_In_opt LPCTSTR lpWindowName, 创建的窗口类名
_In DWORD dwStyle, 窗口样式
_In_int x, 水平位置
_In_int y, 竖直位置
_In_int nWidth, 窗口宽度
_In_int nHeight, 窗口高度
_In_opt HWND hWndParent, 父窗口句柄
_In_opt HMENU hMenu, 资源句柄
_In_opt HINSTANCE hInstance, 应用程序实例句柄
_In_opt LPVOID lpParam 附加参数
);
*/
HWND hWnd = CreateWindowW(L"GameDevelopDepartment", L"游戏开发部", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, 800, 600, NULL, NULL, hInstance, NULL);
//窗口的显示和更新
//1.改变窗口的位置和大小
/*
BOOL WINAPI MoveWindow(
_In_ HWND hWnd,
_In_ int x,
_In_ int y,
_In_ int nWidth,
_In_ int nHeight,
_In_ BOOL bRepaint 是否重画窗口
);
*/
MoveWindow(hWnd, 200, 50, 800, 600, true);
//2.显示窗口
/*
BOOL WINAPI ShowWindow(
_In HWND hWnd,
_In int nCmdShow 窗口的显示状态
);
*/
ShowWindow(hWnd, nCmdShow);
//3.更新窗口
/*
BOOL UpdateWindow(
_In_ HWND hWnd
);
*/
UpdateWindow(hWnd);
//GetMessage为核心的消息循环体系
//GetMessage只有在接收到WM_QUIT的情况下才会返回0,错误返回-1 无消息时会一直等待
/*
BOOL WINAPI GetMessage(
_Out_ LPMGS lpMsg, 指向一个消息结构体
_In_opt_ HWND hWnd, 接受哪一个窗口的消息
_In_ UINT wMsgFilterMin, 获取消息的最小值
_In_ UINT wMsgFilterMax 获取消息的最大值
);
*/
//MSG msg = { 0 }; //定义一个MSG结构体
//while (GetMessage(&msg, NULL, 0, 0)) {
// TranslateMessage(&msg); //虚拟键消息转化为字符消息
// DispatchMessage(&msg); //分发消息给窗口
//}
//PeekMessage为核心的消息循环体系
//PeekMessage在接收到消息的时候返回非0 不能接收到消息返回0 不论是否有消息都会继续执行
/*
BOOL WINAPI PeekMessage(
_Out_ LPMGS lpMsg, 指向一个消息结构体
_In_opt_ HWND hWnd, 接受哪一个窗口的消息
_In_ UINT wMsgFilterMin, 获取消息的最小值
_In_ UINT wMsgFilterMax, 获取消息的最大值
_In_ UINT wRemoveMsg 消息的获取方式
);
*/
MSG msg = { 0 };
while (msg.message != WM_QUIT) {
if (PeekMessage(&msg, 0, 0, 0, PM_REMOVE)) {
TranslateMessage(&msg);
DispatchMessageW(&msg);
}
}
//注销窗口
/*
BOOL WINAPI UnregisterClass/UnregisterClassEx(
_In_ LPCTSTR lpClasName, 注销的类名
_In_opt HINSTANCE hInstane
);
*/
UnregisterClassW(L"GameDevelopDepartment", hInstance);
return 0;
}