#include<Windows.h>
//窗口处理函数
LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPreInstance, LPSTR lpCmdLine, int nCmdShow)
{
	//开发一个窗口
	wchar_t szAppClassName[] = L"LIGEEDU";//wchar_t宽字符一个字母占两个字节
	wchar_t szAppClassTitle[] = L"MY_FIRST";
	//1,设计窗口类
	WNDCLASS wc;
	// CS_HREDRAW 窗口水平方向的大小或窗口的移动发生变化让它重新画一下窗口
	//CS_VREDRAW 窗口竖直方向的大小或窗口的移动发生变化让它重新画一下窗口
	wc.style = CS_HREDRAW | CS_VREDRAW;//窗口类的风格
	//窗口处理函数 lpfnWndProc
	wc.lpfnWndProc = WindowProc;
	//窗口类的附加内存大小
	wc.cbClsExtra = 0;//0字节
	//窗口之间的附加内存大小
	wc.cbWndExtra = 0;
	//当前应用程序实例句柄
	wc.hInstance = hInstance;
	//图标句柄
	wc.hIcon = NULL;//无
	//加载光标
	wc.hCursor = LoadCursor(NULL, IDC_HAND); //离子束 IDC_IBEAM 箭头 IDC_ARROW

	//加载画刷
	wc.hbrBackground = CreateSolidBrush(RGB(68, 214, 248));
	//菜单名
	wc.lpszMenuName = NULL;
	//窗口类型名
	wc.lpszClassName = szAppClassName;

	//2,注册窗口类//ATOM 和WORD 都是unsigned short
	if (0==RegisterClass(&wc))
	{
		MessageBox(NULL, L"此应用程序注册失败!!!",L"提示",MB_OK);
		return 0;
	}
	//3,创建窗口//WS: window style
	HWND hWnd=CreateWindow(szAppClassName, szAppClassTitle,WS_BORDER | WS_SYSMENU|WS_CAPTION | WS_MAXIMIZEBOX|WS_MINIMIZEBOX,100,100,640,480,NULL,NULL,hInstance,NULL);
	if (hWnd == NULL)
	{
		MessageBox(NULL, L"创建窗口失败", L"提示", MB_OK);
		return 0;
	}
	//4,显示和更新窗口
	//SW_SHOW:以原来位置显示激活窗口
	//SW_MAXIMIZE:以最大化显示激活窗口
	//SW_NORMAL:以正常尺寸显示激活窗口
	ShowWindow(hWnd, SW_SHOW);
	//更新窗口
	UpdateWindow(hWnd);
	//5,消息循环
	MSG msg;
	//GetMessage的返回值:取出了WM_QUIT退出消息,返回0
	while (GetMessage(&msg,NULL,0,0))
	{
		//将虚拟键消息转换为字符消息
		TranslateMessage(&msg);
		//将消息分发给窗口处理函数处理
		DispatchMessage(&msg);
	}
	return 0;
}
//窗口处理函数
//CALLBACK就是__stdcall的宏定义
//LRESULT就是long的宏定义
//UINT是unsigned int
//WPARAM是unsigned int
//LPARAM是long
//HWND是窗口句柄,指针类型
LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
	switch (uMsg)
	{
	case WM_CLOSE://窗口关闭消息
		//销毁窗口
		DestroyWindow(hwnd);//会马上调用WM_DESTROY
		//MessageBox(NULL, L"点了关闭", L"提示", MB_OK);
		break;
	case WM_DESTROY:	//窗口销毁消息
		PostQuitMessage(0);//发送一个WM_QUIT消息
		break;
	}
	//默认窗口处理函数
	return DefWindowProc(hwnd, uMsg, wParam, lParam);
}