int WINAPI WinMain(//Windows应用程序的入口点,属于Windows API函数!!
//实例句柄,一个运行中的程序就是一个实例
//由于是API函数,因此必须陷入操作系统才能运行
//因此Windows应用程序不同于普通的控制台程序
//一般控制台程序不需要系统调用,因此程序可以直接运行
//而Windows应用程序需要将程序的句柄传给WinMain函数交由操作系统运行
HINSTANCE hInstance,
//前驱兄弟示例,即一个程序开两个,第一个是第二个的前驱兄弟示例
//而第一个示例没有前驱实例,因此该参数为NULL
//对于Win32程序该参数为NULL,因此用不着
HINSTANCE hPrevInstance,
//LP指long pointer,即32位的长指针,指向命令行命令字符串的指针
//即使是图形界面也是可以接受命令行参数的
//比如在控制台打开一个图形界面的程序,可以输入一定的命令行参数
//比如:notepad 1.txt,1.txt就是一个命令行参数,并且是一个图形界面的记事本
LPSTR lpCmdLine,
//表示程序状态,是以最大化显示、最小化显示还是隐藏在任务栏等
//由状态宏表示,比如SW_HIDE、SW_MAXIMSIZE等
int nCmdShow
);//由于这是API函数,因此是操作系统调用的,因此这些参数都是由操作系统赋值,当然也可以人为干预
typedef struct {//窗口类型
//窗口类型,类型宏
//比如有CS_HREDRAW、CS_VREDRAW
//CS即class stlye,类类型的意思
//一个是水平重画另一个是垂直重画
//即窗口水平方向和垂直方向的大小发生改变时窗口需要重画
//可以用位或连接CS_HREDRAW | CS_VREDRAW
UINT style;
//lpfn表示一个函数指针
//即为窗口响应函数(回调函数),响应窗口接受到的消息
//比如窗口接受到了一个鼠标左击消息,然后调用lpfnWndProc函数响应该消息
//窗口接收到消息后不需要程序员自己调用该函数来处理,操作系统可以自动完成改调用过程
//而消息响应代码需要程序员自己编写
WNDPROC lpfnWndProc;
//窗口类的附加内存信息
//如果窗口类对象内存空间不够可以指定这两个参数
//比如指定1024表示为该对象增加1K内存空间
//默认初始化为0
int cbClsExtra;
int cbWndExtra;
HINSTANCE hInstance;//该窗口所在的应程序实例号,可以用WinMain函数的形参对其进行赋值
//图标句柄
//使用LoadIcon(HINSTANCE hInstance, LPCSTR lpInconName)函数加载窗口的图标
//hInstance为包含要加载的图标实例(图标属于一种程序并非简单的一张图片)
//如果是系统的标准图标则该参数传NULL
//系统会根据VC环境变量中的搜索路径加载相应的标准图标
//系统标准图标由图标宏定义
HICON hIcon;
//光标句柄
//使用LoadCursor(HINSTANCE hInstance, LPCSTR lpCursorName)加载光标
//使用方法和LoadIcon类似,光标也是一种程序,系统标准光标也有光标宏
//图标、光标等都属于Windows的标识Identifier,因此宏都是以ID打头的
//比如IDI标识ID_Icon,IDC标识ID_Cursor,这里的光标是指鼠标而不是字符光标!!!
HCURSOR hCursor;
//画刷句柄
//使用GetStockObject(int fnObject)函数加载画刷
//参数为画刷宏,比如BLACK_BRUSH,黑色画刷等
//该函数可以获得笔、画刷、字体等对象,具体返回哪个对象有参数宏决定
//因为可以返回多种类型对象,因此返回值需要进行强制类型转换
//因此赋值时应该这样使用hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH);
HBRUSH hbrBackground;
//LPC为指向常量的指针,TSTR表示支持UNICODE的字符串指针
//sz表示以'\0'为结束标志的字符串,s即string,z即zero
LPCTSTR lpszMenuName;//菜单名
LPCTSTR lpszClassNmae;//窗口类型的名字,即产品名,即牌子(商标)!!这也是创建窗口的唯一标识!!
} WNDCLASS, *PWNDCLASS;