wxWindows 2 for Windows FAQ |
See also top-level FAQ page.
wxWindows 2 is designed to make use of WIN32 features and controls. However, unlike Microsoft, we have not forgotten users of 16-bit Windows. Most features work under Windows 3.1, including wxTreeCtrl and wxListCtrl using the generic implementation. However, don't expect very Windows-95-specific classes to work, such as wxTaskBarIcon. The wxRegConfig class doesn't work either because the Windows 3.1 registry is very simplistic. Check out the 16-bit makefiles to see what other files have been left out.
16-bit compilation is supported under Visual C++ 1.5, and Borland BC++ 4 to 5.
wxWindows 2 for Windows will also compile on Unix with gcc using TWIN32 from Willows, although TWIN32 is still in a preliminary state. The resulting executables are Unix binaries that work with the TWIN32 Windows API emulator.
You can also compile wxWindows 2 for Windows on Unix with Cygwin or Mingw32, resulting in executables that will run on Windows. So in theory you could write your applications using wxGTK or wxMotif, then check/debug your wxWindows for Windows programs with TWIN32, and finally produce an ix86 Windows executable using Cygwin/Mingw32, without ever needing a copy of Microsoft Windows. See the Technical Note on the Web site detailing cross-compilation.
There is a linking problem with Symantec C++ which I hope someone can help solve.
Borland C++ is fine - and very fast - but it's hard (impossible?) to use the debugger without using project files, and the debugger is nowhere near up to VC++'s quality. The IDE isn't great.
C++Builder's power isn't really used with wxWindows since it needs integration with its own class library (VCL). For wxWindows, I've only used it with makefiles, in which case it's almost identical to BC++ 5.0 (the same makefiles can be used).
You can't beat Cygwin's price (free), and you can debug adequately using gdb. However, it's quite slow to compile since it does not use precompiled headers.
CodeWarrior is cross-platform - you can debug and generate Windows executables from a Mac, but not the other way around I think - but the IDE is, to my mind, a bit primitive.
Watcom C++ is a little slow and the debugger is not really up to today's standards.
However, the issues surrounding Unicode support have been looked into so we know what we need to do, and have some header files ready to use containing appropriate type definitions. Just about every file in wxWindows will need changes, due to the pervasive nature of characters and character arrays. Unicode support is needed for the port to Windows CE (see above), and will probably be added in time for version 2.1.
With a DLL approach, and with different versions and configurations of wxWindows needing to be catered for, the end user may end up with a host of large DLLs in his or her Windows system directory, negating the point of using DLLs. Of course, this is not a problem just associated with wxWindows!
Statically-linked wxWindows 2 programs are smaller than wxWindows 1.xx programs, because of the way wxWindows 2 has been designed to reduce dependencies between classes, and other techniques. The linker will not include code from the library that is not (directly or indirectly) referenced by your application. So for example, the 'minimal' sample is less than 300KB using VC++ 6.
If you want to distribute really small executables, you can use Petite by Ian Luck. This nifty utility compresses Windows executables by around 50%, so your 500KB executable will shrink to a mere 250KB. With this sort of size, there is reduced incentive to use DLLs.
VC++ 5's optimization code seems to be broken and can cause problems: this can be seen when deleting an object Dialog Editor, in Release mode with optimizations on. If in doubt, switch off optimisations, although this will result in much larger executables. It seems possible that the library can be created with strong optimization, so long as the application is not strongly optimized. For example, in wxWindows project, set to 'Minimum Size'. In Dialog Editor project, set to 'Customize: Favor Small Code' (and no others). This will then work.