int APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPreInstance,LPSTR lpCmdLine,int nCmdShow)
函数的返回值是int类型,APIENTRY是函数的调用约定,
Windef.h中定义
#define CALLBACK __stdcall
#define WINAPI __stdcall
#define WINAPIV __cdecl
#define APIENTRY WINAPI
APIENTRY最终被定义为__stdcall,通常的Win32_API函数调用都使用_stdcall的的调用约定_stdcall调用约定:
1.参数都是按值传递,调用函数时,参数按重右向左的顺序压入栈中。
2.被调用的函数负责栈的清理工作,它从栈中弹出自己的参数
3.编译器生成的函数,函数名前增加一个下划线'_',函数名后追加'@' 和栈中参数列表的字节数。
WinMain()有四个参数
hInstance,当前应用程序的实例句柄,唯一标识了该程序,很多与程序有关的函数调用都要使用这个参数。
hPrevInstance,应用程序的前一个实例句柄,Windows的早期版本一个程序多次运行时,便会有多个实例,他们共享代码和只读内存,当程序运行时,
后面在启动时hPreInstance不等于NULL,后面示例的启动就可以做些简化,直接使用该程序内存中存在的数据。32位Windows中,不再使用这种机制,
和PrevInstance总是NULL。
lpCmdLine,应用程序的命令行参数,与c语言中的main的命令行参数的差别是它不包含可执行文件的名字.ANS应用程序可以用lpCmdLine访问命令行参数,
Unicode程序必须用GetCommandLineW得到命令行的Unicode字符串。
nCmdShow,控制怎么样是窗口,一般是SW_SHOWNORMAL.
WinMain函数主要是初始化应用程序,显示窗口,进入获取和调度消息循环。消息循环控制了应用程序剩下部分的执行。消息循环再收到WM_QUIT 消息时才会终止,
应用程序退出WinMain返回值为WM_QUIT的wParam参数,如果WM_QUIT是调用PostQuitMessage发送的,返回值是PostQuitMessage的参数nExitCode.