C++의 데스크톱 애플리케이션은 Windows API 전체에 액세스할 수 있고 창이나 시스템 콘솔에서 실행될 수 있는 네이티브 애플리케이션입니다. C++의 데스크톱 애플리케이션은 Windows XP에서 Windows 11까지 실행할 수 있습니다(하지만 Windows XP는 더 이상 공식적으로 지원되지 않으며 그 이후로 새로운 Windows API가 많이 있음).
C++의 모든 데스크톱 애플리케이션은 CRT(C 런타임) 및 표준 라이브러리 클래스와 함수, COM 개체, Windows API라고 통칭되는 공용 Windows 함수를 사용할 수 있습니다. C++로 작성된 Windows 데스크톱 애플리케이션에 대한 소개는 Win32 및 C++ 시작를 참조하세요.
아래에 설명된 것처럼 C++로 만들 수 있는 Windows 애플리케이션에는 여러 가지 광범위한 범주가 있습니다. 각각에는 자체 프로그래밍 모델과 Windows 관련 라이브러리 집합이 있습니다. C++ 표준 라이브러리와 타사 C++ 라이브러리는 어느 곳에서나 사용할 수 있습니다.
네이티브 데스크톱 클라이언트 애플리케이션 또는 Win32 애플리케이션은 네이티브 Windows C API 또는 COM(구성 요소 개체 모델) API CRT 및 표준 라이브러리 API와 타사 라이브러리를 사용하는 C 또는 C++로 작성된 Windows 데스크톱 애플리케이션입니다. 창에서 실행되는 Win32 애플리케이션을 사용하려면 개발자가 Windows 프로시저 함수 내에서 Windows 메시지를 처리해야 합니다. Win32 애플리케이션은 이름과는 상관없이 32비트(x86) 또는 64비트(x64) 이진 파일로 컴파일될 수 있습니다. Visual Studio IDE에서 x86과 Win32라는 용어는 동의어입니다.
UWP(유니버설 Windows 플랫폼)는 최신 Windows API입니다. UWP 앱은 Windows 11, Windows 10, XBox, Windows Phone, Surface Hub 및 기타 디바이스에서 실행됩니다. UWP 앱은 사용자 인터페이스에 XAML을 사용하며 터치를 완전히 지원합니다. 데스크톱 애플리케이션은 UWP(유니버설 Windows 플랫폼) 앱과 다릅니다.
UWP에 대한 원래 C++ 지원은 구문 확장이 포함된 C++의 언어인 C++/CX 또는 표준 C++ 및 COM을 기반으로 하는 WRL(Windows 런타임 라이브러리)로 구성되었습니다. C++/CX와 WRL은 모두 계속 지원되지만 새로운 개발에는 권장되지 않습니다.
새 프로젝트의 경우 표준 C++를 완전히 기반으로 하며 더 빠른 성능을 제공하는 C++/WinRT를 권장합니다.
C++/CLI 애플리케이션 또는 구성 요소는 C++ 표준에서 허용하는 대로 C++ 구문에 대한 확장을 사용하여 .NET과 네이티브 C++ 코드 간의 상호 작용을 사용하도록 설정합니다. C++/CLI 애플리케이션에는 기본적으로 실행되는 부분과 .NET 네이티브 클래스 라이브러리에 액세스하여 .NET Framework에서 실행되는 부분이 있을 수 있습니다. C++/CLI는 C# 또는 Visual Basic으로 작성된 코드로 작업해야 하는 네이티브 C++ 코드가 있는 경우 기본 설정되는 옵션입니다. 사용자 인터페이스 코드가 아닌 .NET DLL에서 사용하기 위한 것입니다.
Windows 10 이상에서는 기존 데스크톱 애플리케이션이나 COM 개체를 UWP 앱으로 패키지할 수 있습니다. 터치와 같은 UWP 기능을 사용하거나 최신 Windows API 집합의 API를 호출할 수 있습니다. Visual Studio의 데스크톱 솔루션에 UWP 앱을 추가하고, 단일 패키지로 함께 패키지하고, Windows API를 사용하여 앱 간에 통신할 수도 있습니다.
Visual Studio 2017 버전 15.4 이상에서는 Windows 애플리케이션 패키지 프로젝트를 만들어 기존 데스크톱 애플리케이션 패키지 작업을 크게 간소화할 수 있습니다. 데스크톱 애플리케이션에서 사용할 수 있는 레지스트리 호출이나 API에는 몇 가지 제한 사항이 적용됩니다. 그러나 대부분의 경우 앱 패키지에서 실행되는 동안 유사한 기능을 달성하기 위해 대체 코드 경로를 만들 수 있습니다.
일반적으로 C#의 .NET 프로그래밍은 덜 복잡하고 오류 발생 가능성이 낮으며 Win32 또는 MFC보다 더 최신적인 개체 지향 API를 갖추고 있습니다. 대부분의 경우 성능은 충분합니다.
.NET은 풍부한 그래픽을 위한 WPF(Windows Presentation Foundation) 기능을 갖추고 있으며 Win32와 최신 Windows 런타임 API를 모두 사용할 수 있습니다. 일반적으로 다음이 필요한 경우 데스크톱 애플리케이션에 C++를 사용하는 것이 좋습니다.
메모리 사용량을 정밀하게 제어
전력 사용량에 있어서 최고의 경제성
일반 컴퓨팅에 GPU를 사용하는 방법
DirectX에 대한 액세스
표준 C++ 라이브러리의 과도한 사용
C++의 강력함과 효율성을 .NET 프로그래밍에 활용하는 것도 가능합니다. C#에서 사용자 인터페이스를 만들고 C++/CLI를 사용하여 애플리케이션이 네이티브 C++ 라이브러리를 사용할 수 있도록 할 수 있습니다.
많은 Windows 구성 요소는 COM 개체로 구현되며 개체 만들기, 인터페이스 검색 및 개체 제거에 대한 표준 COM 규칙을 따릅니다. C++ 데스크톱 애플리케이션에서 COM 개체를 사용하는 것은 상대적으로 간단하지만 고유의 COM 개체를 작성하는 방법은 더 복잡합니다.
MFC 애플리케이션은 Microsoft Foundation Classes를 사용하여 사용자 인터페이스를 만드는 Windows 데스크톱 애플리케이션입니다. MFC 애플리케이션은 COM 구성 요소와 CRT 및 표준 라이브러리 API를 사용할 수도 있습니다.
MFC는 창 메시지 루프 및 Windows API에 대한 얇은 C++ 개체 지향 래퍼를 제공합니다. MFC는 많은 사용자 인터페이스 컨트롤이나 사용자 지정 사용자 컨트롤이 있는 애플리케이션, 특히 엔터프라이즈 형식 애플리케이션에 대한 기본 선택입니다.
MFC는 창 관리, serialization, 텍스트 조작, 인쇄 및 리본과 같은 최신 사용자 인터페이스 요소에 대한 편리한 도우미 클래스를 제공합니다. MFC를 효과적으로 사용하려면 Win32에 익숙해야 합니다.
SDK, 라이브러리, 헤더 파일
Visual Studio에는 CRT(C 런타임 라이브러리), 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 라이브러리는 다음과 같습니다.
MFC(Microsoft Foundation Class): 단추, 목록 상자, 트리 뷰 및 기타 컨트롤이 있는 다양한 기능의 사용자 인터페이스가 있는 일반적인 Windows 프로그램, 특히 엔터프라이즈 애플리케이션을 만들기 위한 개체 지향 프레임워크입니다. 자세한 내용은 MFC Desktop Applications을 참조하세요.
ATL(Active Template Library): COM 구성 요소를 만들기 위한 강력한 도우미 라이브러리입니다. 자세한 내용은 ATL COM Desktop Components을 참조하세요.
동시성 런타임: 다중 코어 및 다중 코어 디바이스에 대한 병렬 및 비동기 프로그래밍 작업을 간소화하는 라이브러리입니다. 자세한 내용은 동시성 런타임을 참조하세요.
많은 Windows 프로그래밍 시나리오에는 Windows 운영 체제 구성 요소에 액세스할 수 있는 헤더 파일을 포함하는 Windows SDK도 필요합니다. 기본적으로 Visual Studio는 유니버설 Windows 앱 개발을 가능하게 하는 C++ 데스크톱 워크로드의 구성 요소로 Windows SDK를 설치합니다. UWP 앱을 개발하려면 Windows 10 이상 버전의 Windows SDK가 필요합니다.
Windows Animation 및 Direct2D를 사용하는 리치 클라이언트 Windows 데스크톱 애플리케이션을 만들어서 캐러셀 기반 사용자 인터페이스를 만드는 방법에 대해 설명합니다. 이 자습서는 Windows 7 이후로 업데이트되지 않았지만 여전히 Win32 프로그래밍에 대한 철저한 소개를 제공합니다.