나무모에 미러 (일반/어두운 화면)
최근 수정 시각 : 2025-01-28 18:34:44

wxWidgets

wxWidgets
파일:wxWidgets_logo.svg
저작자 Julian Smart
개발자 커뮤니티
초기 릴리즈 1992년
현재 버전 3.2.6 (stable), 3.3.0 (dev)
언어 C++11
OS 크로스플랫폼
라이선스 wxWindows Library Licence[1]
홈페이지 https://www.wxwidgets.org

1. 개요2. 특징
2.1. 네이티브 UI2.2. 크로스플랫폼
2.2.1. 백엔드2.2.2. 컴파일러 지원
2.3. 기타2.4. Hello, World!
3. wxWidgets를 사용하는 프로그램

[clearfix]

1. 개요

wxWidgets는 Julian Smart가 만든 C++ 위젯 툴킷이다. 마이크로소프트사의 MFC 대체 라이브러리로서 출시되었으며 오래된 MFC와는 달리 크로스 플랫폼을 지원한다.

2. 특징

2.1. 네이티브 UI

파일:wxWidgets-NativeControlExample.png
좌측부터 각기 Windows, GTK, macOS이며 같은 코드에서 각각 플랫폼의 네이티브 위젯을 표시하는 모습

모던한 크로스 플랫폼 UI 라이브러리의 경우 각각의 위젯을 별도의 렌더링 라이브러리로 그리지만 wxWidgets는 대체로 각 OS의 네이티브 UI 위젯을 그대로 이용한다.

자체적으로 렌더러를 사용하여 위젯을 그리지 않다 보니 네이티브 창에 직접 작업을 할 수 있다. 가령 DirectX나 Vulkan의 경우 wxWidgets에서 캔버스를 지원하지 않아도 Windows의 경우 위젯의 윈도우 HANDLE, GTK의 경우 gtk_widget포인터, macOS/Cocoa 에서는 NSView를 얻어서 스왑체인을 생성할 수 있다.

OS의 네이티브 UI만으로 변환하여 사용하다보니 네이티브 UI를 벗어나는 인터페이스 디자인을 하기 어렵고 번거롭지만 wxWidgets의 추상화된 드로잉 API를 이용하여 직졉 위젯을 구현할 수 있다. wxWidgets가 제공하는 위젯 중 네이티브 위젯이 없는 경우 드로잉 API를 이용하거나 혹은 여러 네이티브 위젯을 조합하여 제너릭 버전을 제공한다. RibbonBar와 Grid, DataView가 대표적인 예시.

2.2. 크로스플랫폼

2.2.1. 백엔드

wxWidgets은 타 GUI 라이브러리/프레임워크의 상위 레이어로서 기능한다. wxWidgets는 타 GUI 라이브러리/프레임워크를 추상화하고 유틸리티 클래스를 제공하여 별도의 수정없이 크로스 플랫폼 프로그래밍을 지향한다.

그 중 Tier 1로서 관리되는 백엔드는 다음과 같다.
Tier 1이 아닌 백엔드는 다음과 같다.

2.2.2. 컴파일러 지원

2.3. 기타

2.4. Hello, World!

#!syntax cpp
#include <wx/wx.h>

class HelloWorldApp: public wxApp
{
public:
  virtual bool OnInit() override
  {
    wxFrame* myFrame = new wxFrame(nullptr, wxID_ANY, wxT("Hello, world!"));
    myFrame->Show();
    return true;
  }
};

wxIMPLEMENT_APP(HelloWorldApp);

코드 길이가 Windows API로 직접 짠 것보다 짧다. "Hello World" 이름으로 된 창만 띄우는 것만 하더라도 Windows API에서 최소 40줄 이상은 되지만 wxWidgets에서는 위와 같은 것으로 띄울 수 있다.
==# 타 언어로의 바인딩 #==

3. wxWidgets를 사용하는 프로그램


[1] LGPL보다 허용적인 라이선스로 MIT, 아파치등의 라이선스와 유사하다고 할 수 있다.[2] 언리얼 엔진 1, 2는 비주얼 베이직, C++, 언리얼 엔진 4, 5는 언리얼 엔진의 개발사 에픽 게임즈에서 자체 개발한 Slate를 사용한다.