根据您的应用程序的最低操作系统要求,您可以动态链接到包含在 Windows 的最低目标版本中的 MFC 或 ATL(如果是 WTL 应用程序)版本。
这种解决方案还有一个额外的优势 - 每当使用的库的安全更新出现时,您无需更新应用程序即可从中受益。
但无论如何,为纯 Windows API 编写代码并没有那么可怕,所以我建议你使用它。
一个问题是使用较新版本的 Visual Studio 编译的应用程序需要最新的 CRT 运行时库,您必须在安装程序中提供该库或让用户自行安装。有办法克服这一点。我认为that blog entry 是我前段时间偶然发现的。当然,您必须小心,就好像您动态链接到旧的 CRT 库一样,最好也针对其标头进行编码。也许有办法完全摆脱 CRT 依赖。
编辑
在与 Cody Gray 进行激烈讨论后,我决定在下面进行详细说明,以重申我的观点并提出一些警告。
咆哮来袭
即使是桌面软件,您也必须在发布后为用户维护一项服务。操作系统版本会发生变化,它们的 API 和随附的库也会发生变化。 Apple 在使用较新的 OS X 和 iOS 版本“破坏”应用程序方面没有问题,开发人员明白他们必须让他们的产品保持最新,否则他们会失去客户或忙于支持电话。微软在“大商业世界”中创造了一类将软件视为建筑物的程序员。你设计它,建造它,有人批准它,你就完成了,也许再支持它两年。这不是应该的。
即使一个人编写了尽可能多的面向未来的应用程序,即取决于目标操作系统的完全定义、一般和记录的行为以及可能出现的任何行为,甚至它们静态链接到它使用的所有库,他们使其独立、正确和oldnewthing-approved,他们仍然必须在未来几年积极维护它。它所依赖的库确实发生了变化。它们被升级、改进、错误被移除、漏洞被修复、依赖于操作系统的行为被更新、被移除、被修复或被普遍化。
即使应用程序依赖于绝对最少的系统库集,上述所有内容也适用。
因此,无论您的应用是否应该在有限的时间内使用,您都必须假设并计划您将不得不维护它,如果有任何与您相关的变化应用程序。即使它是一个纯粹的 Win32 API 应用程序,您也必须检查它在较新版本的 Windows 中的行为方式,它是否提供了新操作系统的用户期望从他们的应用程序中获得的 UI 元素或服务。
话虽如此,如果您不走纯 Win32 API 路线,请注意使用任何我最初提到的 hack。
即使您的项目产生了一次性应用。即使只是为了让自己适应未来。