Windows C++ 桌面应用程序类型

C++ 中的桌面应用程序是一个本机应用程序,可以访问完整的 Windows API 集,并在窗口或系统控制台中运行。 C++ 中的桌面应用程序可以通过 Windows 11 运行在 Windows XP 上(尽管 Windows XP 已不再受到官方支持,并且从那时起产生了许多新的 Windows API)。

在 C++ 中,任何桌面应用程序都可使用 C 运行时 (CRT) 以及标准库类和函数、COM 对象和公共 Windows 函数,它们统称 Windows API。 有关 C++ 中的 Windows 桌面应用程序的简介,请参阅 Win32 和 C++ 入门

可以使用 C++ 创建多种广泛类别的 Windows 应用程序,如下所述。 每个类别都有自己的编程模型和一组特定于 Windows 的库。 C++ 标准库和第三方 C++ 库可以在其中任何一个中使用。

有关 Windows 平台本身的文档,请参阅 Windows 文档

本机桌面客户端应用程序

本机桌面客户端应用程序或 Win32 应用程序是使用 C 或 C++ 编写的 Windows 桌面应用程序,它使用本机 Windows C API 或组件对象模型 (COM) API CRT 和标准库 API 以及第三方库。 在窗口中运行的 Win32 应用程序要求开发人员在 Windows 过程函数中处理 Windows 消息。 尽管名称如此,不过 Win32 应用程序仍可编译为 32 位 (x86) 或 64 位 (x64) 二进制文件。 在 Visual Studio IDE 中,术语 x86 和 Win32 是同义词。

命令行(控制台)应用程序

C++ 控制台应用程序从控制台窗口中的命令行运行,只能显示文本输出。

UWP 应用程序

通用 Windows 平台 (UWP) 是新式 Windows API。 UWP 应用运行在 Windows 11、Windows 10、XBox、Windows Phone、Surface Hub 和其他设备上。 UWP 应用将 XAML 用于用户界面,并且完全支持触摸。 桌面应用程序不同于通用 Windows 平台 (UWP) 应用。

最初 C++ 对 UWP 的支持包括 C++/CX(一种包含语法扩展的 C++ 方言)或 Windows 运行时库 (WRL),后者基于标准 C++ 和 COM。 C++/CX 和 WRL 仍受支持,但不建议用于新开发。

对于新项目,建议使用完全基于标准 C++ 并提供更快性能的 C++/WinRT

C++/CLI 应用程序或组件使用 C++ 语法的扩展(在 C++ Standard 允许的情况下),允许在 .NET 和原生 C++ 代码之间进行交互。 C++/CLI 应用程序可以有本机运行的部件,还可以有运行在 .NET Framework 上并能够访问 .NET 基类库的部件。 当原生 C++ 代码需要处理以 C# 或 Visual Basic 编写的代码时,C++/CLI 是首选选项。 它旨在用于 .NET DLL 而不是用户界面代码中。

桌面桥

在 Windows 10 及更高版本中,可以将现有桌面应用程序或 COM 对象打包为 UWP 应用。 它可以使用 UWP 功能(例如触摸),或从新式 Windows API 集调用 API。 还可以在 Visual Studio 中将 UWP 应用添加到桌面解决方案、在单个包中将它们打包在一起以及使用 Windows API 在它们之间进行通信。

Visual Studio 2017 版本 15.4 及更高版本允许你创建 Windows 应用程序包项目,以大大简化打包现有桌面应用程序的工作。 一些限制适用于桌面应用程序可以使用的注册表调用或 API。 但是在许多情况下,可以创建备用代码路径,以便在应用包中运行时实现类似功能。

C++ 还是 .NET?

一般而言,C# 中的 .NET 编程不太复杂,不太容易出错,并且具有比 Win32 或 MFC 更新式的面向对象的 API。 在大多数情况下,其性能已够用。

.NET 具有用于实现丰富图形的 Windows Presentation Foundation (WPF),你可以使用 Win32 和新式 Windows 运行时 API。 作为一般规则,建议在需要以下功能时对桌面应用程序使用 C++:

  • 精确控制内存使用情况
  • 以最经济的方式消耗功率
  • 使用 GPU 进行常规计算
  • 访问 DirectX
  • 大量使用标准 C++ 库

还可以将 C++ 的强大功能和效率与 .NET 编程结合使用。 可以在 C# 中创建用户界面并使用 C++/CLI 使应用程序能够使用本机 C++ 库。

游戏

DirectX 游戏可以在 PC 或 Xbox 上运行。

SQL Server 数据库客户端

若要从本机代码访问 SQL Server 数据库,请使用 ODBC 或 OLE DB。

Windows 设备驱动程序

驱动程序是低级组件,使来自硬件设备的数据可供应用程序和其他操作系统组件访问。

Windows 服务

Windows 服务是可以在后台运行的程序,用户交互很少或没有用户交互。 这些程序在 UNIX 系统上称为守护程序

  • 有关详细信息,请参阅 服务

COM

组件对象模型 (COM) 是一种规范,它支持以不同语言编写的程序相互之间可以互操作。

许多 Windows 组件作为 COM 对象实现,并遵循用于对象创建、接口发现和对象销毁的标准 COM 规则。 从 C++ 桌面应用程序使用 COM 对象相对简单,而编写你自己的 COM 对象则更加高级。

活动模板库 (ATL) 提供可简化 COM 开发的宏和帮助程序函数。 有关详细信息,请参阅 ATL COM 桌面组件

MFC

MFC 应用程序是一个 Windows 桌面应用程序,它使用 Microsoft 基础类创建用户界面。 MFC 应用程序还可以使用 COM 组件以及 CRT 和标准库 API。

MFC 在窗口消息循环和 Windows API 上提供一个面向对象的精简 C++ 包装器。 MFC 是具有许多用户界面控件或自定义用户控件的应用程序(尤其是企业类型应用程序)的默认选择。

MFC 提供可用于窗口管理、序列化、文本操作、打印和现代用户界面元素(例如功能区)的帮助程序类。 要高效使用 MFC,应熟悉 Win32。

SDK、库和头文件

Visual Studio 包含 C 运行时库 (CRT)、C++ 标准库和其他特定于 Microsoft 的库。 大多数包含这些库的头文件的文件夹位于 Visual Studio 安装目录的 \VC\ 文件夹下(例如,C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Tools\MSVC\14.39.33519\include\)。 Windows 和 CRT 头文件则位于 Windows SDK 安装文件夹中(例如,C:\Program Files (x86)\Windows Kits\10\Include\10.0.22621.0\ucrt\

vcpkg 包管理器使你可以方便地安装数百个适用于 Windows 的第三方开放源代码库。 有关详细信息,请参阅 vcpkg

Microsoft 库包括:

  • Microsoft 基础类 (MFC):一种面向对象的框架,用于创建传统的 Windows 程序(特别是企业级应用程序),这些应用程序具有诸如功能按钮、列表框、树视图和其他控件等丰富的用户界面。 有关详细信息,请参阅 MFC Desktop Applications

  • 活动模板库 (ATL):一种功能强大的帮助程序库,用于创建 COM 组件。 有关详细信息,请参阅 ATL COM Desktop Components

  • C++ AMP (C++ Accelerated Massive Parallelism):一种可以在 GPU 上实现高性能泛型计算工作的库。 有关详细信息,请参阅 C++ AMP (C++ Accelerated Massive Parallelism)

  • 并发运行时:一种可以简化多核和众核设备编程的并行和异步编程工作的库。 有关详细信息,请参阅并发运行时

许多 Windows 编程方案还需要 Windows SDK,Windows SDK 包括可以实现对 Windows 操作系统组件访问的标头文件。 默认情况下,Visual Studio 会将 Windows SDK 作为 C++ 桌面工作负载的组件进行安装,这可实现通用 Windows 应用开发。 若要开发 UWP 应用,需要 Windows 10 或更高版本的 Windows SDK。

  • 有关详细信息和下载链接,请参阅 Windows SDK
  • 有关适用于 Windows 早期版本的 Windows SDK 的详细信息,请参阅 Windows SDK 存档

所安装的所有 Windows SDK 版本的默认位置为:Program Files (x86)\Windows Kits

开发工具

Visual Studio 包含一个功能强大的本机代码调试器、静态分析工具、图形调试工具、一个功能齐全的代码编辑器、单元测试支持,以及许多其他工具和实用程序。

本节内容

链接 说明
演练:创建 Windows 桌面应用程序 (C++) 创建本机 Windows 桌面应用程序。
操作方法:在 Windows 桌面应用程序中使用 Windows SDK 包含使用 Windows SDK 设置项目以便进行生成的步骤。
演练:创建标准 C++ 程序 创建 Windows 控制台应用程序。
演练:使用 C++ 创建控制台计算器 创建简单的 Windows 控制台应用程序。 Win32(或 Win64)控制台应用程序本身不具有窗口,且不使用消息循环。 它在控制台窗口中运行,并通过命令行处理输入和输出。
部署本机桌面应用程序 在 Windows 上部署本机应用程序。
演练:创建和使用静态库 如何创建 .lib 二进制文件。
Windows 桌面向导 使用向导创建新 Windows 项目。
活动模板库 (ATL) 使用 ATL 库在 C++ 中创建 COM 组件。
ATL 和 MFC 共享类 使用在 ATL 和 MFC 中共享的类(如 CString)。
Microsoft 基础类 (MFC) 使用 MFC 创建带有对话框和控件的大型或小型 Windows 应用程序
数据访问 OLE DB 和 ODBC
文本和字符串 Windows 上的各种字符串类型。
使用资源文件 如何将图像、图标、字符串表和其他资源添加到桌面应用程序。
使用 DirectX 创建游戏的资源 (C++) 用于在 C++ 中创建游戏的内容的链接。
Title 说明
Windows 开发 包含有关 Windows API 和 COM 的信息。 (某些 Windows API 和第三方 DLL 是作为 COM 对象实现的。)
Hilo:开发适用于 Windows 7 的 C++ 应用程序 描述如何创建使用 Windows Animation 和 Direct2D 创建基于传送的用户界面的、客户端丰富的 Windows 桌面应用程序。 本教程自 Windows 7 以来尚未更新,但仍提供了对 Win32 编程的完整介绍。
使用 C++/CLI 开发 .NET 为本机 C++ 库创建包装器,以便可以与 .NET 应用程序和组件通信。
.NET 和 UWP 的组件扩展 C++/CX 和 C++/CLI 共享的语法元素参考。
通用 Windows 应用 (C++) 使用 C++/CX 或 Windows 运行时模板库 (WRL) 编写 UWP 应用程序。
COM 和 .NET 的 C++ 属性 使用 .NET 或 COM 进行仅 Windows 编程时的非标准属性。

另请参阅

Visual Studio 中的 C++