wxWidgets
[clearfix]
1. 개요
wxWidgets는 Julian Smart가 만든 C++ 위젯 툴킷이다. 마이크로소프트사의 MFC 대체 라이브러리로서 출시되었으며 오래된 MFC와는 달리 크로스 플랫폼을 지원한다.
초기에는 이름이 wxWindows 이었으나, MS사의 상표명 존중 요청으로 2004년부터 wxWidgets으로 이름을 변경하였다.[1]
2. 특징
2.1. 네이티브 UI
Qt, FLTK, GTK+와 같은 UI 라이브러리의 경우 각각의 위젯을 자체적인 모양으로 렌더링 하여 브러시를 그리는 방식이지만 wxWidgets은 각 OS의 네이티브 GUI API를 사용해 UI를 그리므로 네이티브 UI의 동일한 모양과 성능 정도를 내기에 적합하다. 사무 비지니스 앱에 적합한 UI 툴킷이다. 각 OS의 네이티브 UI만으로 변환하여 사용하다보니 컴퓨터 게임 UI와 같은 프리스타일 인터페이스 디자인에는 사용하기가 어렵다.
한계점도 있다. 윈도우에서 (File, Edit, View 등으로 대표되는) 프로그램 상단 메뉴의 배경에 어두운 색를 적용할 수 없는 것과 같은 것들이 그 예다. 이는 윈도우는 아직도 블랙 계통 테마를 완전히 지원하지 않고 있기 때문이다.[2] 다크 테마 API를 정식으로 제공하는 macOS나 GTK3 기반의 리눅스 데스크탑의 경우 지원한다.
타 라이브러리들처럼 wxWidgets 또한 시스템의 네이티브 API를 사용하지 않고 그리고자 한다면 wxUniversal 옵션을 주어 컴파일 하면 위젯을 직접 그리게 할 수 있다.
2.2. 크로스플랫폼
2.2.1. OS
wxWidgets은 많은 플랫폼을 지원한다.
Qt와 동일하게 이미지 처리, 사운드 처리 등 많은 내장된 라이브러리의 추상화가 되어 있어 코드의 수정 없이 쉬운 크로스 플랫폼 개발을 가능하게 한다.
- Windows
- Windows 95+ - 3.1.0 부터 95, 98의 DOS 지원은 종료되었다.
- Windows CE
- Mac OS X
- Carbon - 현재 Deprecated 됨
- Cocoa
- Linux
- GTK 2, 3
- X11
- Motif
- BSD
- NetBSD
- FreeBSD
- OpenBSD
- Solaris
- HP-UX
- AIX
- UNIX
- SCO
- OS/2
2.2.2. 컴파일러 지원
- MS Visual Studio 5+ - 3.1.0부터는 Visual Studio 9 이하와 같은 구형 컴파일러의 지원이 종료되었다.
- Intel C/C++ (icc)
- Sun CC for Linux
- LLVM / Clang / Clang++
- GCC - MinGW
- BCC (C++ Builder)
- Cygwin
- Watcom C++ Compiler
2.3. 기타
- Windows 에서의 HiDPI 지원
- XML 리소스 컴파일 - wxSmith나 wxFormbuilder를 사용하여 WYSIWYG로 개발을 하지 않는 이상 기본적으로 wxWidgets은 날코딩으로 UI를 짜는것이 일반적이다. 그렇지만 위의 WYSIWYG 툴을 사용하여 개발을 하여도 프로그램의 루틴과 wxWidgets의 루틴이 섞이게 되는것은 피할 수 없는 일이기에 XML로 짜거나 wxFormbuilder같은 WYSIWYG툴을 사용하여 XML로 UI를 제작하는 경우 UI의 코드와 프로그램의 백엔드를 완벽하게 분리해 둘 수 있게 된다.
3. 타 라이브러리와의 링크
4. 타 언어로의 바인딩
- Ada
- Basic
- D
- Delphi/Pascal
- Erlang
- Euphoria
- Go
- Haskell
- Java
- JavaScript
- Lua
- Max
- Net
- Perl
- PHP
- Pike
- Python 2K, 3K
- Ruby
- Rust
- Squeak
- Swift - #
5. wxWidgets를 사용하는 프로그램
- Audacity
- BitTorrent
- BOINC@HOME
- Code::Blocks
- CodeLite
- Corona Image Editor
- FileZilla
- KiCad
- PostgreSQL Stack builder
- PCSX2
[1] https://www.wxwidgets.org/about/name-change/[2] Undocumented된 심볼을 Ordinal를 직접 불러서 사용하는 것이 가능하지만 정식적인 방법이 아니다.