wxWidgets defines a common API across platforms, but uses the native graphical user interface (GUI) on each platform, so your program will take on the native look and feel that users are familiar with.
Unfortunately native toolkits and hardware do not always support the functionality that the wxWidgets API requires. This chapter collects notes about differences among supported platforms and ports.
wxGTK is a port of wxWidgets using the GTK library. It makes use of GTK's native widgets wherever possible and uses wxWidgets' generic controls when needed.
You will need GTK 2.6 or higher which is available from:
The newer version of GTK you use, the more native widgets and features will be utilized. We have gone to great lengths to allow compiling wxWidgets applications with the latest version of GTK, with the resulting binary working on systems even with a much earlier version of GTK. You will have to ensure that the application is launched with lazy symbol binding for that.
In order to configure wxWidgets to compile wxGTK you will need to use the --with-gtk
argument to the configure
script. This is the default for many systems.
GTK 3 is the default starting with wxWidgets 3.1.4. Use configure
option --with-gtk=2
to use GTK 2.
Build and Install Instructions
wxOSX/Cocoa is the port of wxWidgets for the macOS platform. It requires a minimum SDK 10.11, Xcode 7.2.1 or greater (runs under 10.10.5 and higher), and supports x86_64 (but not i386) and ARM builds and deploying under 10.10.
Note that Apple clang must be used to build wxOSX, due to the use of Apple-specific extensions ("blocks") in the macOS SDK headers, and hence the applications using it must be built using clang as well.
Build and Install Instructions
wxX11 is a port of wxWidgets using X11 (The X Window System) as the underlying graphics backend. wxX11 draws its widgets using the wxUniversal widget set which is now part of wxWidgets. wxX11 is well-suited for a number of special applications such as those running on systems with few resources (PDAs) or for applications which need to use a special themed look.
In order to configure wxWidgets to compile wxX11 you will need to type:
configure --with-x11 --with-universal
wxMotif is a port of wxWidgets for X11 systems using Motif libraries. It is no longer actively maintained and by now rather obsolete.
wxMSW is a port of wxWidgets for the Windows platforms (Windows XP and later are supported). wxMSW provides native look and feel for each Windows version. This port can be compiled with several compilers including Microsoft VC++ 2005 or later, MinGW, Cygwin as well as cross-compilation with a Linux-hosted MinGW tool chain.
Build and Install Instructions
All applications using wxMSW should have a Windows resource file (.rc extension) and this file should include
include/wx/msw/wx.rc
file which defines resources used by wxWidgets itself.
Among other things, wx.rc
defines some standard icons, all of which have names starting with the "wx" prefix. This normally ensures that any icons defined in the application's own resource file come before them in alphabetical order which is important because Explorer (Windows shell) selects the first icon in alphabetical order to use as the application icon which is displayed when viewing its file in the file manager. So if all the icons defined in your application start with "x", "y" or "z", they won't be used by Explorer. To avoid this, ensure that the icon which is meant to be used as the main application icon has a name preceding "wxICON" in alphabetical order.
wxQt is a port of wxWidgets using Qt libraries. It requires Qt 5 or later.
wxiOS is a port of wxWidgets using Cocoa touch libraries for iOS. It is very basic in it current form, but is included for further improvements and very simple applications. It requires iOS 9 or later and fully supports 64 bit builds.
It's sometimes useful to interface directly with the underlying toolkit used by wxWidgets to e.g. use toolkit-specific features. In such case (or when you want to e.g. write a port-specific patch) it can be necessary to use the underlying toolkit API directly: