因为为了兼容旧版本的程序(backwards compatibility)。
为什么要这样呢?因为Win API有一些设计失误的地方:没错,Win API也有设计失误的地方。
比如,一个消息A会引起不相关的另一个消息B。在新版本的Windows中,这个问题被修复了,但是有的老程序用了错误用法,在需要捕获消息A的时候选择捕获消息B——这就出问题了,因为新版本修复了这个问题。(所以,不要用那些undocumentated tricks/APIs....)
为了让这个老程序运行,就要弄一个补丁,在老程序运行的时候让这个消息正常。
久而久之,就越堆越多了……
除了Win API的设计失误,其实更多的是程序的不当使用。例如,明明要用API来完成的工作,却选择hack本地文件——而这个本地文件在之后的Windows里面被删除了,hack失败,程序失败。
这种事情,Windows也要为它买单……晕倒
这本书实在是非常有趣。推荐大家来读。
话说回来,Windows的前后兼容性实在是太好了。Windows 3.1时代的程序能在将近三十年后的Windows 10上运行,试问哪个系统能做到?!