나무모에 미러 (일반/어두운 화면)
최근 수정 시각 : 2023-08-07 09:19:04

wxWidgets

wxWidgets
파일:external/avatars2.githubusercontent.com/791023?v=3&s=200.png
저작자 Julian Smart
개발자 커뮤니티
초기 릴리즈 1992년
현재 버전 3.2.0 (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와는 달리 크로스 플랫폼을 지원한다. 현재도 라이선스 명칭에는 wxWindows Library License라고 Windows 명칭을 그대로 쓰고 있다. [2]

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] https://www.wxwidgets.org/about/name-change/[3] 언리얼 엔진 1, 2는 비주얼 베이직, C++, 언리얼 엔진 4, 5는 언리얼 엔진의 개발사 에픽 게임즈에서 자체 개발한 Slate를 사용한다.