merge "strategies" page with devtips.h; add mention of Bakefile and wx presets in devtips.h; add explanation of the difference between static/shared builds; reorganize the main page of the manual to improve its usability.
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@52928 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
		@@ -8,7 +8,7 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@defgroup group_funcmacro Functions and Macros
 | 
					@defgroup group_funcmacro Functions and Macros by Category
 | 
				
			||||||
 | 
					
 | 
				
			||||||
This group defines all major function and macro groups.
 | 
					This group defines all major function and macro groups.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,6 +1,6 @@
 | 
				
			|||||||
/////////////////////////////////////////////////////////////////////////////
 | 
					/////////////////////////////////////////////////////////////////////////////
 | 
				
			||||||
// Name:        copyright.h
 | 
					// Name:        copyright.h
 | 
				
			||||||
// Purpose:     Copyright page of the Doxygen manual
 | 
					// Purpose:     Copyright and license page of the Doxygen manual
 | 
				
			||||||
// Author:      wxWidgets team
 | 
					// Author:      wxWidgets team
 | 
				
			||||||
// RCS-ID:      $Id$
 | 
					// RCS-ID:      $Id$
 | 
				
			||||||
// Licence:     wxWindows license
 | 
					// Licence:     wxWindows license
 | 
				
			||||||
@@ -9,7 +9,7 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@page page_copyright Copyright notice
 | 
					@page page_copyright Copyright and license
 | 
				
			||||||
 | 
					
 | 
				
			||||||
<center>
 | 
					<center>
 | 
				
			||||||
Copyright (c) 1992-2008 Julian Smart, Robert Roebling, Vadim Zeitlin and other
 | 
					Copyright (c) 1992-2008 Julian Smart, Robert Roebling, Vadim Zeitlin and other
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -9,22 +9,23 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@page page_multiplatform Multi-platform development with wxWidgets
 | 
					@page page_multiplatform Multi-platform development
 | 
				
			||||||
 | 
					
 | 
				
			||||||
This chapter describes the practical details of using wxWidgets. Please
 | 
					This chapter describes some tips related to multi-platform development.
 | 
				
			||||||
see the file install.txt for up-to-date installation instructions, and
 | 
					 | 
				
			||||||
changes.txt for differences between versions.
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
@li @ref page_multiplatform_includefiles
 | 
					@li @ref page_multiplatform_includefiles
 | 
				
			||||||
@li @ref page_multiplatform_libraries
 | 
					@li @ref page_multiplatform_libraries
 | 
				
			||||||
@li @ref page_multiplatform_configuration
 | 
					@li @ref page_multiplatform_configuration
 | 
				
			||||||
@li @ref page_multiplatform_makefiles
 | 
					@li @ref page_multiplatform_makefiles
 | 
				
			||||||
@li @ref page_multiplatform_windowsfiles
 | 
					@li @ref page_multiplatform_winresources
 | 
				
			||||||
@li @ref page_multiplatform_allocatingobjects
 | 
					@li @ref page_multiplatform_allocatingobjects
 | 
				
			||||||
@li @ref page_multiplatform_architecturedependency
 | 
					@li @ref page_multiplatform_architecturedependency
 | 
				
			||||||
@li @ref page_multiplatform_conditionalcompilation
 | 
					@li @ref page_multiplatform_conditionalcompilation
 | 
				
			||||||
@li @ref page_multiplatform_cpp
 | 
					@li @ref page_multiplatform_cpp
 | 
				
			||||||
@li @ref page_multiplatform_filehandling
 | 
					@li @ref page_multiplatform_filehandling
 | 
				
			||||||
 | 
					@li @ref page_multiplatform_reducingerr
 | 
				
			||||||
 | 
					@li @ref page_multiplatform_gui
 | 
				
			||||||
 | 
					@li @ref page_multiplatform_debug
 | 
				
			||||||
 | 
					
 | 
				
			||||||
<hr>
 | 
					<hr>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -35,7 +36,7 @@ The main include file is @c "wx/wx.h"; this includes the most commonly
 | 
				
			|||||||
used modules of wxWidgets.
 | 
					used modules of wxWidgets.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
To save on compilation time, include only those header files relevant to the
 | 
					To save on compilation time, include only those header files relevant to the
 | 
				
			||||||
source file. If you are using precompiled headers, you should include
 | 
					source file. If you are using @b precompiled headers, you should include
 | 
				
			||||||
the following section before any other includes:
 | 
					the following section before any other includes:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@verbatim
 | 
					@verbatim
 | 
				
			||||||
@@ -67,8 +68,33 @@ build environment up as necessary for the support.
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
@section page_multiplatform_libraries Libraries
 | 
					@section page_multiplatform_libraries Libraries
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Most ports of wxWidgets can create either a static library or a shared
 | 
					All ports of wxWidgets can create either a @b static library or a @b shared library.
 | 
				
			||||||
library. wxWidgets can also be built in multilib and monolithic variants.
 | 
					
 | 
				
			||||||
 | 
					When a program is linked against a @e static library, the machine code from the object 
 | 
				
			||||||
 | 
					files for any external functions used by the program is copied from the library into 
 | 
				
			||||||
 | 
					the final executable.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@e Shared libraries are handled with a more advanced form of linking, which makes the 
 | 
				
			||||||
 | 
					executable file smaller. They use the extension @c <20>.so<73> (Shared Object) under Linux 
 | 
				
			||||||
 | 
					and @c '.dll' (Dynamic Link Library) under Windows.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					An executable file linked against a shared library contains only a small table of the 
 | 
				
			||||||
 | 
					functions it requires, instead of the complete machine code from the object files for 
 | 
				
			||||||
 | 
					the external functions. 
 | 
				
			||||||
 | 
					Before the executable file starts running, the machine code for the external functions 
 | 
				
			||||||
 | 
					is copied into memory from the shared library file on disk by the operating 
 | 
				
			||||||
 | 
					system - a process referred to as @e dynamic linking.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Dynamic linking makes executable files smaller and saves disk space, because one copy 
 | 
				
			||||||
 | 
					of a library can be shared between multiple programs. 
 | 
				
			||||||
 | 
					Most operating systems also provide a virtual memory mechanism which allows one copy 
 | 
				
			||||||
 | 
					of a shared library in physical memory to be used by all running programs, saving 
 | 
				
			||||||
 | 
					memory as well as disk space.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Furthermore, shared libraries make it possible to update a library without recompiling 
 | 
				
			||||||
 | 
					the programs which use it (provided the interface to the library does not change).  
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					wxWidgets can also be built in @b multilib and @b monolithic variants.
 | 
				
			||||||
See the @ref page_libs for more information on these.
 | 
					See the @ref page_libs for more information on these.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -77,15 +103,19 @@ See the @ref page_libs for more information on these.
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
When using project files and makefiles directly to build wxWidgets,
 | 
					When using project files and makefiles directly to build wxWidgets,
 | 
				
			||||||
options are configurable in the file
 | 
					options are configurable in the file
 | 
				
			||||||
@c "wx/XXX/setup.h" where XXX is the required platform (such as msw, motif, gtk, mac). Some
 | 
					@c "wx/XXX/setup.h" where XXX is the required platform (such as @c msw, @c motif, 
 | 
				
			||||||
settings are a matter of taste, some help with platform-specific problems, and
 | 
					@c gtk, @c mac). 
 | 
				
			||||||
others can be set to minimize the size of the library. Please see the setup.h file
 | 
					
 | 
				
			||||||
 | 
					Some settings are a matter of taste, some help with platform-specific problems, and
 | 
				
			||||||
 | 
					others can be set to minimize the size of the library. Please see the @c setup.h file
 | 
				
			||||||
and @c install.txt files for details on configuration.
 | 
					and @c install.txt files for details on configuration.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
When using the 'configure' script to configure wxWidgets (on Unix and other platforms where
 | 
					When using the @c 'configure' script to configure wxWidgets (on Unix and other platforms
 | 
				
			||||||
configure is available), the corresponding setup.h files are generated automatically
 | 
					where configure is available), the corresponding @c setup.h files are generated automatically
 | 
				
			||||||
along with suitable makefiles. When using the RPM packages
 | 
					along with suitable makefiles. 
 | 
				
			||||||
for installing wxWidgets on Linux, a correct setup.h is shipped in the package and
 | 
					
 | 
				
			||||||
 | 
					When using the RPM packages (or DEB or other forms of @e binaries) for installing 
 | 
				
			||||||
 | 
					wxWidgets on Linux, a correct @c setup.h is shipped in the package and
 | 
				
			||||||
this must not be changed.
 | 
					this must not be changed.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -93,43 +123,43 @@ this must not be changed.
 | 
				
			|||||||
@section page_multiplatform_makefiles Makefiles
 | 
					@section page_multiplatform_makefiles Makefiles
 | 
				
			||||||
 | 
					
 | 
				
			||||||
On Microsoft Windows, wxWidgets has a different set of makefiles for each
 | 
					On Microsoft Windows, wxWidgets has a different set of makefiles for each
 | 
				
			||||||
compiler, because each compiler's 'make' tool is slightly different.
 | 
					compiler, because each compiler's @c 'make' tool is slightly different.
 | 
				
			||||||
Popular Windows compilers that we cater for, and the corresponding makefile
 | 
					Popular Windows compilers that we cater for, and the corresponding makefile
 | 
				
			||||||
extensions, include: Microsoft Visual C++ (.vc), Borland C++ (.bcc),
 | 
					extensions, include: Microsoft Visual C++ (.vc), Borland C++ (.bcc),
 | 
				
			||||||
OpenWatcom C++ (.wat) and MinGW/Cygwin (.gcc). Makefiles are provided
 | 
					OpenWatcom C++ (.wat) and MinGW/Cygwin (.gcc). Makefiles are provided
 | 
				
			||||||
for the wxWidgets library itself, samples, demos, and utilities.
 | 
					for the wxWidgets library itself, samples, demos, and utilities.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
On Linux, Mac and OS/2, you use the 'configure' command to
 | 
					On Linux, Mac and OS/2, you use the @c 'configure' command to generate the 
 | 
				
			||||||
generate the necessary makefiles. You should also use this method when
 | 
					necessary makefiles. You should also use this method when building with 
 | 
				
			||||||
building with MinGW/Cygwin on Windows.
 | 
					MinGW/Cygwin on Windows.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
We also provide project files for some compilers, such as
 | 
					We also provide project files for some compilers, such as Microsoft VC++. 
 | 
				
			||||||
Microsoft VC++. However, we recommend using makefiles
 | 
					However, we recommend using makefiles to build the wxWidgets library itself, 
 | 
				
			||||||
to build the wxWidgets library itself, because makefiles
 | 
					because makefiles can be more powerful and less manual intervention is required.
 | 
				
			||||||
can be more powerful and less manual intervention is required.
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
On Windows using a compiler other than MinGW/Cygwin, you would
 | 
					On Windows using a compiler other than MinGW/Cygwin, you would build the wxWidgets 
 | 
				
			||||||
build the wxWidgets library from the build/msw directory
 | 
					library from the @c build/msw directory which contains the relevant makefiles.
 | 
				
			||||||
which contains the relevant makefiles.
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
On Windows using MinGW/Cygwin, and on Unix, MacOS X and OS/2, you invoke
 | 
					On Windows using MinGW/Cygwin, and on Unix, MacOS X and OS/2, you invoke
 | 
				
			||||||
'configure' (found in the top-level of the wxWidgets source hierarchy),
 | 
					'configure' (found in the top-level of the wxWidgets source hierarchy),
 | 
				
			||||||
from within a suitable empty directory for containing makefiles, object files and
 | 
					from within a suitable empty directory for containing makefiles, object 
 | 
				
			||||||
libraries.
 | 
					files and libraries.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
For details on using makefiles, configure, and project files,
 | 
					For details on using makefiles, configure, and project files,
 | 
				
			||||||
please see docs/xxx/install.txt in your distribution, where
 | 
					please see @c docs/xxx/install.txt in your distribution, where
 | 
				
			||||||
xxx is the platform of interest, such as msw, gtk, x11, mac.
 | 
					@c xxx is the platform of interest, such as @c msw, @c gtk, @c x11, @c mac.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					All wxWidgets makefiles are generated using @link http://www.bakefile.org Bakefile @endlink.
 | 
				
			||||||
 | 
					wxWidgets also provides (in the @c build/bakefiles/wxpresets) the
 | 
				
			||||||
 | 
					<b>wxWidgets bakefile presets</b>: these files allow you to create bakefiles for
 | 
				
			||||||
 | 
					your own wxWidgets-based applications very easily.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@section page_multiplatform_winresources Windows Resource files
 | 
				
			||||||
@section page_multiplatform_windowsfiles Windows-specific files
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
wxWidgets application compilation under MS Windows requires at least one
 | 
					wxWidgets application compilation under MS Windows requires at least one
 | 
				
			||||||
extra file: a resource file.
 | 
					extra file: a resource file.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@subsection page_multiplatform_windowsfiles_resources Resource file
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
The least that must be defined in the Windows resource file (extension RC)
 | 
					The least that must be defined in the Windows resource file (extension RC)
 | 
				
			||||||
is the following statement:
 | 
					is the following statement:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -308,4 +338,105 @@ which do the EOL conversions.
 | 
				
			|||||||
See also the @ref group_funcmacro_file section of the reference
 | 
					See also the @ref group_funcmacro_file section of the reference
 | 
				
			||||||
manual for the description of miscellaneous file handling functions.
 | 
					manual for the description of miscellaneous file handling functions.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@section page_multiplatform_reducingerr Reducing programming errors
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@subsection page_multiplatform_reducingerr_useassert Use ASSERT
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					It is good practice to use ASSERT statements liberally, that check for conditions
 | 
				
			||||||
 | 
					that should or should not hold, and print out appropriate error messages.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					These can be compiled out of a non-debugging version of wxWidgets
 | 
				
			||||||
 | 
					and your application. Using ASSERT is an example of `defensive programming':
 | 
				
			||||||
 | 
					it can alert you to problems later on.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					See ::wxASSERT for more info.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@subsection page_multiplatform_reducingerr_usewxstring Use wxString in preference to character arrays
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Using wxString can be much safer and more convenient than using @c wxChar*.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					You can reduce the possibility of memory leaks substantially, and it is much more
 | 
				
			||||||
 | 
					convenient to use the overloaded operators than functions such as @c strcmp.
 | 
				
			||||||
 | 
					wxString won't add a significant overhead to your program; the overhead is compensated
 | 
				
			||||||
 | 
					for by easier manipulation (which means less code).
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					The same goes for other data types: use classes wherever possible.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@section page_multiplatform_gui GUI design
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@subsection page_multiplatform_gui_usesizers Use sizers
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Don't use absolute panel item positioning if you can avoid it. Different GUIs have
 | 
				
			||||||
 | 
					very differently sized panel items. Consider using the @ref overview_sizer instead.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@subsection page_multiplatform_gui_useresources Use wxWidgets resource files
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Use @c XRC (wxWidgets resource files) where possible, because they can be easily changed
 | 
				
			||||||
 | 
					independently of source code. See the @ref overview_xrc for more info.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@section page_multiplatform_debug Debugging
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@subsection page_multiplatform_debug_positivethinking Positive thinking
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					It is common to blow up the problem in one's imagination, so that it seems to threaten
 | 
				
			||||||
 | 
					weeks, months or even years of work. The problem you face may seem insurmountable:
 | 
				
			||||||
 | 
					but almost never is. Once you have been programming for some time, you will be able
 | 
				
			||||||
 | 
					to remember similar incidents that threw you into the depths of despair. But
 | 
				
			||||||
 | 
					remember, you always solved the problem, somehow!
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Perseverance is often the key, even though a seemingly trivial problem
 | 
				
			||||||
 | 
					can take an apparently inordinate amount of time to solve. In the end,
 | 
				
			||||||
 | 
					you will probably wonder why you worried so much. That's not to say it
 | 
				
			||||||
 | 
					isn't painful at the time. Try not to worry -- there are many more important
 | 
				
			||||||
 | 
					things in life.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@subsection page_multiplatform_debug_simplifyproblem Simplify the problem
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Reduce the code exhibiting the problem to the smallest program possible
 | 
				
			||||||
 | 
					that exhibits the problem. If it is not possible to reduce a large and
 | 
				
			||||||
 | 
					complex program to a very small program, then try to ensure your code
 | 
				
			||||||
 | 
					doesn't hide the problem (you may have attempted to minimize the problem
 | 
				
			||||||
 | 
					in some way: but now you want to expose it).
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					With luck, you can add a small amount of code that causes the program
 | 
				
			||||||
 | 
					to go from functioning to non-functioning state. This should give a clue
 | 
				
			||||||
 | 
					to the problem. In some cases though, such as memory leaks or wrong
 | 
				
			||||||
 | 
					deallocation, this can still give totally spurious results!
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@subsection page_multiplatform_debug_usedebugger Use a debugger
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					This sounds like facetious advice, but it is surprising how often people
 | 
				
			||||||
 | 
					don't use a debugger. Often it is an overhead to install or learn how to
 | 
				
			||||||
 | 
					use a debugger, but it really is essential for anything but the most
 | 
				
			||||||
 | 
					trivial programs.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@subsection page_multiplatform_debug_uselogging Use logging functions
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					There is a variety of logging functions that you can use in your program:
 | 
				
			||||||
 | 
					see @ref group_funcmacro_log.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Using tracing statements may be more convenient than using the debugger
 | 
				
			||||||
 | 
					in some circumstances (such as when your debugger doesn't support a lot
 | 
				
			||||||
 | 
					of debugging code, or you wish to print a bunch of variables).
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@subsection page_multiplatform_debug_usedebuggingfacilities Use the wxWidgets debugging facilities
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					You can use wxDebugContext to check for
 | 
				
			||||||
 | 
					memory leaks and corrupt memory: in fact in debugging mode, wxWidgets will
 | 
				
			||||||
 | 
					automatically check for memory leaks at the end of the program if wxWidgets is suitably
 | 
				
			||||||
 | 
					configured. Depending on the operating system and compiler, more or less
 | 
				
			||||||
 | 
					specific information about the problem will be logged.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					You should also use @ref group_funcmacro_debugging as part of a `defensive programming' strategy,
 | 
				
			||||||
 | 
					scattering wxASSERTs liberally to test for problems in your code as early as possible.
 | 
				
			||||||
 | 
					Forward thinking will save a surprising amount of time in the long run.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					See the @ref overview_debugging for further information.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
*/
 | 
					*/
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -15,18 +15,21 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
@image html main_wxlogo.png
 | 
					@image html main_wxlogo.png
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@section manual_contents Contents
 | 
					@section manual_user User manual:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@li @subpage page_copyright
 | 
					@li @subpage page_copyright
 | 
				
			||||||
@li @subpage page_introduction
 | 
					@li @subpage page_introduction
 | 
				
			||||||
@li @subpage page_multiplatform
 | 
					@li @subpage page_multiplatform
 | 
				
			||||||
@li @subpage page_utils
 | 
					@li @subpage page_utils
 | 
				
			||||||
@li @subpage page_samples
 | 
					@li @subpage page_samples
 | 
				
			||||||
@li @subpage page_strategies
 | 
					 | 
				
			||||||
@li @subpage page_libs
 | 
					@li @subpage page_libs
 | 
				
			||||||
@li @subpage page_constants
 | 
					 | 
				
			||||||
@li @subpage group_class
 | 
					 | 
				
			||||||
@li @subpage group_funcmacro
 | 
					 | 
				
			||||||
@li @subpage page_topics
 | 
					@li @subpage page_topics
 | 
				
			||||||
@li @subpage page_port
 | 
					@li @subpage page_port
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@section manual_reference Reference manual:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@li @subpage page_constants
 | 
				
			||||||
 | 
					@li @subpage group_class
 | 
				
			||||||
 | 
					@li @subpage group_funcmacro
 | 
				
			||||||
 | 
					
 | 
				
			||||||
*/
 | 
					*/
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,125 +0,0 @@
 | 
				
			|||||||
/////////////////////////////////////////////////////////////////////////////
 | 
					 | 
				
			||||||
// Name:        strategies.h
 | 
					 | 
				
			||||||
// Purpose:     Strategies page of the Doxygen manual
 | 
					 | 
				
			||||||
// Author:      wxWidgets team
 | 
					 | 
				
			||||||
// RCS-ID:      $Id$
 | 
					 | 
				
			||||||
// Licence:     wxWindows license
 | 
					 | 
				
			||||||
/////////////////////////////////////////////////////////////////////////////
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/**
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
@page page_strategies Programming strategies
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
This chapter is intended to list strategies that may be useful when
 | 
					 | 
				
			||||||
writing and debugging wxWidgets programs. If you have any good tips,
 | 
					 | 
				
			||||||
please submit them for inclusion here.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
@li @ref page_strategies_reducingerr
 | 
					 | 
				
			||||||
@li @ref page_strategies_portability
 | 
					 | 
				
			||||||
@li @ref page_strategies_debug
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
<hr>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
@section page_strategies_reducingerr Strategies for reducing programming errors
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
@subsection page_strategies_reducingerr_useassert Use ASSERT
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
It is good practice to use ASSERT statements liberally, that check for conditions
 | 
					 | 
				
			||||||
that should or should not hold, and print out appropriate error messages.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
These can be compiled out of a non-debugging version of wxWidgets
 | 
					 | 
				
			||||||
and your application. Using ASSERT is an example of `defensive programming':
 | 
					 | 
				
			||||||
it can alert you to problems later on.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
See wxASSERT for more info.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
@subsection page_strategies_reducingerr_usewxstring Use wxString in preference to character arrays
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Using wxString can be much safer and more convenient than using wxChar *.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
You can reduce the possibility of memory leaks substantially, and it is much more
 | 
					 | 
				
			||||||
convenient to use the overloaded operators than functions such as @c strcmp.
 | 
					 | 
				
			||||||
wxString won't add a significant overhead to your program; the overhead is compensated
 | 
					 | 
				
			||||||
for by easier manipulation (which means less code).
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
The same goes for other data types: use classes wherever possible.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
@section page_strategies_portability Strategies for portability
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
@subsection page_strategies_portability_usesizers Use sizers
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Don't use absolute panel item positioning if you can avoid it. Different GUIs have
 | 
					 | 
				
			||||||
very differently sized panel items. Consider using the @ref overview_sizer instead.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
@subsection page_strategies_portability_useresources Use wxWidgets resource files
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Use .xrc (wxWidgets resource files) where possible, because they can be easily changed
 | 
					 | 
				
			||||||
independently of source code. See the @ref overview_xrc for more info.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
@section page_strategies_debug Strategies for debugging
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
@subsection page_strategies_debug_positivethinking Positive thinking
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
It is common to blow up the problem in one's imagination, so that it seems to threaten
 | 
					 | 
				
			||||||
weeks, months or even years of work. The problem you face may seem insurmountable:
 | 
					 | 
				
			||||||
but almost never is. Once you have been programming for some time, you will be able
 | 
					 | 
				
			||||||
to remember similar incidents that threw you into the depths of despair. But
 | 
					 | 
				
			||||||
remember, you always solved the problem, somehow!
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Perseverance is often the key, even though a seemingly trivial problem
 | 
					 | 
				
			||||||
can take an apparently inordinate amount of time to solve. In the end,
 | 
					 | 
				
			||||||
you will probably wonder why you worried so much. That's not to say it
 | 
					 | 
				
			||||||
isn't painful at the time. Try not to worry -- there are many more important
 | 
					 | 
				
			||||||
things in life.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
@subsection page_strategies_debug_simplifyproblem Simplify the problem
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Reduce the code exhibiting the problem to the smallest program possible
 | 
					 | 
				
			||||||
that exhibits the problem. If it is not possible to reduce a large and
 | 
					 | 
				
			||||||
complex program to a very small program, then try to ensure your code
 | 
					 | 
				
			||||||
doesn't hide the problem (you may have attempted to minimize the problem
 | 
					 | 
				
			||||||
in some way: but now you want to expose it).
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
With luck, you can add a small amount of code that causes the program
 | 
					 | 
				
			||||||
to go from functioning to non-functioning state. This should give a clue
 | 
					 | 
				
			||||||
to the problem. In some cases though, such as memory leaks or wrong
 | 
					 | 
				
			||||||
deallocation, this can still give totally spurious results!
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
@subsection page_strategies_debug_usedebugger Use a debugger
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
This sounds like facetious advice, but it is surprising how often people
 | 
					 | 
				
			||||||
don't use a debugger. Often it is an overhead to install or learn how to
 | 
					 | 
				
			||||||
use a debugger, but it really is essential for anything but the most
 | 
					 | 
				
			||||||
trivial programs.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
@subsection page_strategies_debug_uselogging Use logging functions
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
There is a variety of logging functions that you can use in your program:
 | 
					 | 
				
			||||||
see @ref group_funcmacro_log.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Using tracing statements may be more convenient than using the debugger
 | 
					 | 
				
			||||||
in some circumstances (such as when your debugger doesn't support a lot
 | 
					 | 
				
			||||||
of debugging code, or you wish to print a bunch of variables).
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
@subsection page_strategies_debug_usedebuggingfacilities Use the wxWidgets debugging facilities
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
You can use wxDebugContext to check for
 | 
					 | 
				
			||||||
memory leaks and corrupt memory: in fact in debugging mode, wxWidgets will
 | 
					 | 
				
			||||||
automatically check for memory leaks at the end of the program if wxWidgets is suitably
 | 
					 | 
				
			||||||
configured. Depending on the operating system and compiler, more or less
 | 
					 | 
				
			||||||
specific information about the problem will be logged.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
You should also use @ref group_funcmacro_debugging as part of a `defensive programming' strategy,
 | 
					 | 
				
			||||||
scattering wxASSERTs liberally to test for problems in your code as early as possible.
 | 
					 | 
				
			||||||
Forward thinking will save a surprising amount of time in the long run.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
See the @ref overview_debugging for further information.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
*/
 | 
					 | 
				
			||||||
		Reference in New Issue
	
	Block a user