wxWindows for Cross-Platform Coding
Multiplatform development has become a mainstream phrase over the last few years, from the halls of Redmond to open-source initiatives. The uses of this phrase all seem to revolve around things like Java, .NET, V and Qt; however, let's not forget wxWindows.
Whether you're porting some MFC code to Linux or simply want to make your application available to the broadest user demographic, wxWindows fits the bill. Strangely, not many people seem to have heard of it, but hopefully, this article assists in making the information more available.
Why choose wxWindows over these other development tools? That's a fair question, and the answer is different for each one.
Although Qt is the standard for building KDE applications, wxWindows can be used as well. Qt's Microsoft Windows version is not free for commercial use, but wxWindows is, and Qt requires a special preprocessor for the event system.
Microsoft's .Net and Ximian's Mono, as well as Java, aren't really toolkits as much as they are technologies. These technologies add a layer to the application that can rob an application of performance. This can be debated as a “development time vs. performance” issue and is different depending on the life cycle of the application. Instead of getting into yet another language war, we'll simply say, “your mileage may vary.”
V is simply not as flexible as wxWindows; it doesn't support as many compilers.
In comparing wxWindows to these other multiplatform development tools and languages, it's important to mention that wxWindows stands on its own merits and is not limited to the comparisons.
With wxWindows, you gain the usual open-source freedoms—the freedom to use without charge, the freedom to modify and the freedom from the risk of vendors disappearing (or updating their libraries or tools so that you have to buy a new one). Plus, you have the freedom to run the application on a variety of operating systems, including UNIX/Linux, Windows, Mac OS 9, Mac OS X and OS2. What's more, it gives you a native look and feel on each operating system. The license for wxWindows is flexible and has been approved by the Open Source Initiative.
With about 11 years behind it, wxWindows is a stable, mature development library with real-time support through the main mailing lists found on the web site, wxWindows.org. Many features are available through more than 300 classes and 5,000 functions. Porting an application from the MFC is also straightforward with this library.
Some major companies are using wxWindows, including AMD, the Intel Graphics Lab, the Compaq Alpha Microprocessor Development Group, Netscape and Lockheed Martin. The Open Source Applications Foundation is implementing it (using wxPython) in their new program, Chandler, for managing personal information and collaborating with others.
Helpblocks (www.helpblocks.com) is an application that creates multiplatform Help files and is developed with the wxWindows library running on both Windows and Linux. Other applications include Vulcan 3-D (modeling software for the mining industry, and more), Display Doctor from SciTech, Intuitive MX (a multitrack audio mixer with 3-D representation of the mixing stage, by Intuitive Works) and Ground Control Station from Geneva Aerospace. Your application could be next on this list.
You'll need GCC and also can use tools such as gdb, ddd, Emacs and an IDE such as Anjuta. To compile on Windows, you may need a cross-compiler. Most importantly, you'll need the wxWindows library itself, which also is available at the wxWindows web site as a download or CD purchase. The latest stable release at the time of this writing is version 2.4.0.
Despite what many of us do, it's a good idea to read the documentation relevant to Linux development that is found in the library package.
Also, it would be wise to subscribe to the wx-user mailing list (found under Support at wxWindows.org), in case you run into difficulties. The most reasonable thing to do is search the archives to see if your question already has been asked.
The library itself comes with 70+ example applications that demonstrate almost everything imaginable you would want to do with it; these in themselves are probably the best documentation because you can tinker with a working application and see how it was done. Once you get the library and become familiar with how to use it with your tools, you're ready to start coding.
Creating a simple application class is easy. Listing 1 provides a basic sample of creating a wxApp class.
As you can see, creating a main wxWindows application is rather easy, and those of you familiar with MFC may be rubbing your chin thoughtfully. You'll be glad to know there is no MFC in it, nor will there ever be MFC in it, but the classes are a simple transition from MFC. It has few things MFC doesn't, and it does not support OLE.
An empty Event table is present in Listing 1, which allows you to handle events, such as a mouse click or a key pressed or your own custom events. Of course, this code shows a rather boring main application that sits there and stares at you without even blinking.
Working examples abound with the library; every single class appears to have an example demonstrating its usage. One example is the event-handling sample, by Vadim Zeitlin. This example is used because many developers beginning to use the wxWindows library seem to have some problems with events; you'll now be ahead of the game. You need the wxWindows library to try this, and if you do, you get the full source code for it under the Samples directory.
There's even a Wiki linked to from the site, so you can access the latest documentation quickly and even correct it if you find something to add.
Aside from the cast of thousands, a core development team should receive special mention and thanks:
These developers frequently are seen helping users of the wxWindows library on a daily, if not hourly, basis on the wx-user mailing list.
The release of version 2.4.0 of the wxWindows library was followed by requests from the development team for what they would like to see in version 3.0. New ports are always in the works, and the next release should be no different. One of the ports expected is the Windows CE port from Marco Cavallini and Robert Roebling.
Winelib support also is on the way, courtesy of the Winelib team, and proprietary tools for porting from MFC to wxWindows are being worked on by Julian Smart and Stefan Csomor.
With more and more companies wanting to use Linux, they will be looking for ways to port their MFC code to Linux, and one of the simplest is with the wxWindows library. The cost alone makes it worthwhile. Development issues for porting from the MFC are minimalized due to the simplicity of the library itself. Thus, if a company is looking to change from a Windows-based system to a Linux-based system, they can expect an easy porting of any code that they have. A wxNet port is even in progress.
Perhaps you have something to add to the many applications done with wxWindows. An up-to-date list of wxWindows applications is available at wxWindows.org.
Taran Rampersad is a software developer with 14 years of experience, presently doing consultation, development and writing from Trinidad and Tobago. He's actively involved with local computer societies, process management and assisting in organizing the Caribbean FLOS Conference (floscaribbean.org). His personal web site is KnowProSE.com.