GetMessage只在有队列消息时返回,WM_QUIT会使其返回0,一般消息循环都是在GetMessage返回0时结束PostMessage产生队列消息,
SendMessage产生非队列消息,
因此SendMessage发的WM_QUIT不会使消息循环结束以WM_QUITE为参数的SendMessage,只是调用以WM_QUITE为参数的WndProc而已。
而你的WndProc没有对WM_QUITE消息进行处理,而是调用了DefWindowProc。
而DefWindowProc中对WM_QUITE消息是没有默认的处理的。
要让进程结束,就得用ExitProcess或TerminateProcess,可以自己显示调用,
也可以让WinMain函数返回后,由运行库来调用。
要让WinMain函数返回,就得让while循环结束。
要让while结束的条件,就得让GetMessage返回0.
要让GetMessage返回0,线程消息队列就必须设置了QS_QUIT状态标记,或者有WM_QUIT消息。
而设置QS_QUIT标记,可由PostQuitMessage来完成,
WM_QUIT可由PostMessage来完成。
【按 使用PostQuitMessage()与PostMessage()的不同是:
前者把消息列队里的QS_QUIT标志打开,并且等待程序处理完消息列队里的所有消息后才结束消息循环。
后者是把WM_QUIT直接放到消息列队,消息循环取到得下一个消息是WM_QUIT就立即退出。MSDN里不建议使用PostMessage发送WM_QUIT消息,因为这样会造成程序的收尾工作无法进行,正常退出后所需要的资源释放等操作就没法执行了。】