2000-08-14 05:44:35 -04:00
|
|
|
\chapter{Introducing wxWindows}\label{chapintro}
|
|
|
|
\pagenumbering{arabic}%
|
|
|
|
\setheader{{\it CHAPTER \thechapter: INTRODUCING wxWINDOWS}}{}{}{}{}{{\it CHAPTER \thechapter: INTRODUCING wxWINDOWS}}%
|
|
|
|
\setfooter{\thepage}{}{}{}{}{\thepage}%
|
|
|
|
|
2000-08-14 12:19:20 -04:00
|
|
|
\section{The need for portability}
|
|
|
|
|
|
|
|
Not so long ago, it seemed as though Microsoft was on course to
|
|
|
|
take over the desktop for good with the Windows range of
|
|
|
|
operating systems. Unix was retreating to server territory and
|
|
|
|
had all but given up the fight against NT. Apple was sickening
|
2000-08-15 06:19:45 -04:00
|
|
|
(in the non-derogatory sense of the word!) and it seemed almost
|
|
|
|
common sense that the quirky Mac had had its day.
|
2000-08-14 12:19:20 -04:00
|
|
|
|
|
|
|
At the start of the new century, the picture has changed quite
|
|
|
|
dramatically. Linux is advancing from its position of strength
|
|
|
|
in the server market and is poised to make inroads on the
|
|
|
|
desktop, where the high price of Windows gives it an advantage.
|
|
|
|
Apple has made an impressive comeback and is revamping its own
|
|
|
|
operating system. The embedded market continues to explode and
|
|
|
|
has given rise to new niches for specialist operating systems.
|
2000-11-23 15:33:40 -05:00
|
|
|
The keyword now is diversity, when the best guess of a few years
|
2000-08-14 12:19:20 -04:00
|
|
|
was that Microsoft would conquer all. More than ever,
|
|
|
|
application developers need to keep their options open and
|
|
|
|
targeting one platform only can be a recipe for commercial (or
|
|
|
|
open source) disaster.
|
|
|
|
|
|
|
|
In the light of this change in the computing landscape,
|
|
|
|
cross-platform development (or multiplatform development as we
|
|
|
|
call it in this book) has become quite a hot and sometimes
|
|
|
|
bitterly controversial topic. There are a number of ways to
|
|
|
|
achieve the goal of portability, and many tools and languages to choose from.
|
|
|
|
However, it is still generally agreed wisdom that C++ is the
|
|
|
|
language of choice for desktop applications that depend on
|
|
|
|
speed, ease of delivery and compatibility with billions of lines
|
|
|
|
of existing code. Plus, there are many hundreds of thousands of
|
|
|
|
developers now experienced in C++ programming.
|
|
|
|
|
|
|
|
The purpose of this book is to give you (the developer or
|
|
|
|
interested manager) a solid grounding in one increasingly
|
|
|
|
popular multiplatform solution: wxWindows. wxWindows is an open
|
|
|
|
source GUI toolkit that has been on the scene since 1993 and has
|
|
|
|
reached a high degree of stability and functionality. It is
|
|
|
|
available for Linux (and most other Unix variants), all desktop
|
|
|
|
versions of Microsoft Windows, and Mac. Other ports are in
|
|
|
|
progress.
|
|
|
|
|
|
|
|
\section{Why wxWindows?}
|
|
|
|
|
|
|
|
While wxWindows is labelled a GUI development toolkit, it is in
|
|
|
|
fact much more than that and has many features that are useful
|
|
|
|
for many aspects of application development. This has to
|
|
|
|
be the case, since the whole of a wxWindows application needs to
|
|
|
|
be portable to different platforms, and not just the GUI
|
|
|
|
component. So wxWindows provides classes for working with files
|
|
|
|
and streams, multithreading, management of application settings,
|
|
|
|
interprocess communication, and much else.
|
|
|
|
|
|
|
|
wxWindows is open source, with a vibrant developer and user
|
|
|
|
community, and may be used in any proprietary or non-proprietary
|
|
|
|
project. wxWindows encompasses the whole spectrum of users from
|
|
|
|
one-man software outfits to big-name companies such as Xerox,
|
|
|
|
Lockheed-Martin, Pratt and Whitney, and Motorola; from computer
|
|
|
|
science departments to medical research groups; from ecological
|
|
|
|
research, to the telecommunications industry, and in a myriad of
|
|
|
|
open source projects.
|
|
|
|
|
|
|
|
When you use wxWindows you tap into an astonishing talent pool,
|
|
|
|
with contributors from a wide range of backgrounds. Many aspects
|
|
|
|
of application development that you might otherwise have to
|
|
|
|
laboriously code yourself have been encapsulated by these
|
|
|
|
developers in easy-to-use classes that you can plug into your
|
|
|
|
code. Since there are a lot of people subscribed to the mailing
|
|
|
|
lists, you'll enjoy discussions not only about wxWindows but
|
|
|
|
often other matters close to the hearts of both experienced and
|
|
|
|
inexperienced developers. And hopefully, one day you'll join in the
|
|
|
|
success of wxWindows and become a contributor yourself!
|
|
|
|
|
|
|
|
\section{The history of wxWindows}
|
|
|
|
|
|
|
|
wxWindows was started in 1992 at the Artificial Intelligence
|
|
|
|
Applications Institute, University of Edinburgh, by Julian
|
|
|
|
Smart. Julian was designing a kind of meta-CASE tool called
|
|
|
|
Hardy which needed to run on Windows as well as X-based Unix
|
|
|
|
workstations. The existing commercial cross-platform tools were
|
|
|
|
deemed too expensive for an in-house experimental project, so
|
|
|
|
the only alternative was to build one. wxWindows (w for Microsoft
|
2000-08-15 06:19:45 -04:00
|
|
|
Windows, x for the X Windowing System) started off with support for Sun's XView
|
|
|
|
and Microsoft's MFC 1.0, and
|
2000-08-14 12:19:20 -04:00
|
|
|
AIAI allowed it to be released to the Internet. As it became
|
|
|
|
clear that XView was doomed, a Motif port was written. Borland
|
|
|
|
C++ users began to request a version that was not dependent on
|
|
|
|
MFC, so the Windows port was rewritten to use the native Windows
|
|
|
|
API. Over time, a small but enthusiastic community of wxWindows
|
2000-08-15 06:19:45 -04:00
|
|
|
users was established and a mailing list set up. Many contributions
|
|
|
|
and fixes were sent in. wxWindows gradually picked up more and more users
|
|
|
|
from all over the world: academic, government, and corporate users
|
|
|
|
who found that wxWindows offered a better product, and better support, than the
|
2000-08-14 12:19:20 -04:00
|
|
|
commercial products they had looked at or used.
|
|
|
|
|
|
|
|
During 1995, Markus Holzem released his port of wxWindows to Xt,
|
|
|
|
the X toolkit. This meant that software could be written that
|
2000-08-15 06:19:45 -04:00
|
|
|
would work on X-based systems without the need for installing Motif,
|
|
|
|
then still a commercial product.
|
2000-08-14 12:19:20 -04:00
|
|
|
|
|
|
|
In 1996, Julian left AIAI to pursue freelance consultancy, and
|
|
|
|
there were few new releases. The seemingly unstoppable advance
|
|
|
|
of Java was throwing some doubt on the future of C++ libraries.
|
|
|
|
After many contributions, the wxWindows code was looking rather
|
|
|
|
tired and in need of a serious rethink. At the start of 1997 it
|
|
|
|
was make or break time - call it a day and move onto other
|
|
|
|
things, or commit to re-engineering wxWindows with an API that
|
|
|
|
was flexible enough for current and future user interface
|
2000-08-15 06:19:45 -04:00
|
|
|
trends, with more sophisticated widgets, and making better use of C++.
|
|
|
|
After a short debate, the effort was relaunched
|
|
|
|
with Julian concentrating on the Windows port, and Markus on the combined Motif/Xt port,
|
|
|
|
with both contributing to the common and generic parts. wxWindows 2 API
|
2000-08-14 12:19:20 -04:00
|
|
|
ideas and code started to take shape.
|
|
|
|
|
|
|
|
During 1997 an effort to produce a standard Linux desktop
|
|
|
|
environment was underway - GNOME. Its widget set was GTK+, built
|
|
|
|
on top of X11 and it looked as though GTK+-based apps were to
|
2000-08-15 06:19:45 -04:00
|
|
|
become the standard in the Linux universe. Its one major problem:
|
|
|
|
GTK+ was C-based, and only a thin (and unportable) C++ wrapper
|
2000-08-14 12:19:20 -04:00
|
|
|
existed for it. In August 1997, Wolfram Gloger made a suggestion
|
|
|
|
that wxWindows 2 should be ported to GTK+ - Robert Roebling had
|
|
|
|
initial reservations, but in general supported the idea. He
|
|
|
|
became the prime mover for wxGTK and alphas were made available
|
|
|
|
at the beginning of 1998. In May 1998 the Windows and GTK+ ports
|
|
|
|
were merged and put into a CVS repository made available to all
|
2000-08-15 06:19:45 -04:00
|
|
|
contributors to wxWindows: a decision that has accelerated the development
|
|
|
|
effort tremendously. At this point Vadim Zeitlin became a prime
|
|
|
|
mover on the Windows port and revamped much of the container
|
|
|
|
and collection support.
|
2000-08-14 12:19:20 -04:00
|
|
|
|
|
|
|
Markus Holzem had to drop out of the wxWindows 2 effort in early
|
|
|
|
1998, but Julian Smart started a new wxMotif port. The idea of
|
|
|
|
an Xt port was dropped, since there remain two possibilities for
|
2000-08-15 06:19:45 -04:00
|
|
|
free Unix programming with wxWindows: wxGTK, and wxMotif using
|
2000-08-14 12:19:20 -04:00
|
|
|
the Motif clone Lesstif.
|
|
|
|
|
|
|
|
In September 1998, Stefan Csomor started a new version of the
|
|
|
|
wxMac 2 port based in part on Greg Whitehead's initial work.
|
2000-08-15 06:19:45 -04:00
|
|
|
In 1999 wxMac became ready for prime-time and Stefan has
|
|
|
|
made it ready for MacOS X.
|
|
|
|
|
|
|
|
Also in 1998, Vaclav Slavik burst onto the wxWindows scene with his
|
|
|
|
exciting wxHTML module that can now provide applications with (to name but a few) HTML help, superb
|
|
|
|
About boxes, and report viewing and printing facilities. Vaclav has
|
|
|
|
also written an enhanced resource system for wxWindows based on XML,
|
|
|
|
that supports many more wxWindows features than the old WXR-based system.
|
|
|
|
|
|
|
|
Since 1998 Robin Dunn has been completely rewriting the old Python/wxWindows
|
|
|
|
marriage and now wxPython is another force to be reckoned with in the
|
|
|
|
development community.
|
|
|
|
|
|
|
|
%David Webster and Stefan Neis have been working on an OS/2 port, and
|
|
|
|
%interest has been expressed in ports to other systems, such as
|
|
|
|
%BeOS.
|
|
|
|
%
|
|
|
|
Development on wxWindows is concentrating on achieving more modularity,
|
|
|
|
additional sophisticated GUI components, and compatibility with
|
|
|
|
a wider range platforms. The wxStudio IDE project promises to
|
|
|
|
make wxWindows development much easier and introduce wxWindows to people
|
|
|
|
used to rapid application development environments under Microsoft Windows.
|
2000-08-14 12:19:20 -04:00
|
|
|
|
|
|
|
\section{How to use this book}
|
|
|
|
|
|
|
|
The chapters in this book are meant to be fairly independent, but
|
|
|
|
as usual, the ordering reflects a progression from basic concepts
|
|
|
|
to more advanced ones, so the first few chapters at least
|
|
|
|
should be read consecutively for best effect.
|
2000-08-14 05:44:35 -04:00
|
|
|
|
2000-08-15 06:19:45 -04:00
|
|
|
Complete programs illustrating concepts in many of the chapters can be
|
|
|
|
found in the accompanying CD-ROM, along with wxWindows itself and lots
|
|
|
|
of extra, cool stuff.
|
|
|
|
|
|
|
|
We all hope that you enjoy reading this book and, most importantly,
|
|
|
|
have fun using wxWindows to build great-looking, multiplatform applications!
|
|
|
|
|