home *** CD-ROM | disk | FTP | other *** search
/ Piper's Pit BBS/FTP: ibm 0040 - 0049 / ibm0040-0049 / ibm0040.tar / ibm0040 / BCPPOWL1.ZIP / README < prev    next >
Encoding:
Text File  |  1991-08-28  |  24.1 KB  |  661 lines

  1.            Welcome to ObjectWindows for C++
  2.            --------------------------------
  3.  
  4.   This README file contains important information about ObjectWindows
  5.   for C++, an application framework that will ease the development of
  6.   applications for Windows 3.0.  For the latest information about
  7.   ObjectWindows for C++, and the accompanying example programs, and
  8.   manuals, read this entire file.
  9.  
  10.  
  11. TABLE OF CONTENTS
  12. -----------------
  13.  
  14. 1.  How to Get Help
  15. 2.  Installation
  16. 3.  Features
  17. 4.  Important Information
  18.  
  19.  
  20.  1. HOW TO GET HELP
  21. -------------------
  22.  
  23.   If you have any problems, please read this file, the
  24.   HELPME!.DOC and other files in your OWL\DOC subdirectory, and the
  25.   ObjectWindows for C++ manuals first. If you still have a question and
  26.   need assistance, help is available from the following sources:
  27.  
  28.   1. Type GO BPROGB on the CompuServe bulletin board system for
  29.      instant access to the Borland forums with their libraries of
  30.      technical information and answers to common questions.
  31.  
  32.      If you are not a member of CompuServe, see the enclosed
  33.      special offer, and write for full details on how to receive
  34.      a free IntroPak containing a $15 credit toward your first
  35.      month's on-line charges.
  36.  
  37.   2. Check with your local software dealer or users' group.
  38.  
  39.   3. Write to us at the following address:
  40.  
  41.      Borland International
  42.      Borland C Technical Support
  43.      1800 Green Hills Road
  44.      P.O. Box 660001
  45.      Scotts Valley, CA  95066-0001
  46.  
  47.      Please remember to include your serial number or we will be
  48.      unable to process your letter.
  49.  
  50.   4. If you have an urgent problem that cannot wait and you have
  51.      sent in the license agreement that came with the package,
  52.      you may call the Borland Technical Support Department at
  53.      (408) 438-5300. Please have the following information ready
  54.      before calling:
  55.  
  56.      a. Product name and serial number on your original
  57.     distribution disk.  Please have your serial number ready
  58.     or we will be unable to process your call.
  59.  
  60.      b. Product version number. The version number for ObjectWindows
  61.     for C++ is 1.0.
  62.  
  63.      c. Computer brand, model, and the brands and model numbers of
  64.     any additional hardware.
  65.  
  66.      d. Operating system and version number. (The version number of DOS
  67.     can be determined by typing VER at the MSDOS prompt.
  68.     The version of MS Windows can be determined from the "About
  69.     Program Manager" dialog box that you can bring up from the
  70.     Program Manager's "Help" menu.)
  71.  
  72.      e. Contents of your AUTOEXEC.BAT file.
  73.  
  74.      f. Contents of your CONFIG.SYS file.
  75.  
  76.  
  77.  2. INSTALLATION
  78. ----------------
  79.  
  80.   You MUST use the INSTALL program to install ObjectWindows for C++.
  81.   The files on the distribution disks are all archived and have to be
  82.   properly assembled.  You cannot do this by hand!
  83.  
  84.   To start the installation, change your current drive to the one
  85.   that has the install program on it and type INSTALL.  You will
  86.   be given instructions in a box at the bottom of the screen for
  87.   each prompt. For example, if you will be installing from drive
  88.   A:, type:
  89.  
  90.     A:
  91.     INSTALL
  92.  
  93.   -  You must have Borland C++ Version 2.0 to use ObjectWindows for
  94.      C++.
  95.  
  96.   -  This INSTALL includes patches to the BIN, LIB, INCLUDE, and
  97.      CLASSLIB subdirectories of Borland C++ Version 2.0.
  98.      These patches are required in order to build and run your
  99.      ObjectWindows applications.
  100.  
  101.      Back up your existing versions of these directories before running
  102.      the install program if you need to save any changes you may
  103.      have made to them.  More information on the specific patches
  104.      appears in the PATCHES discussion under IMPORTANT INFORMATION.
  105.  
  106.   -  Note: The list of files is contained in a separate file
  107.      called FILELIST.DOC, which will appear in the target
  108.      directory you specify during installation.
  109.  
  110.   You should read the rest of this README file to get further
  111.   information about this release before you do the installation.
  112.  
  113.  
  114.  
  115.  
  116.  3. FEATURES
  117. ------------
  118.  
  119.   ObjectWindows for C++, also known as the ObjectWindows libraries (OWL)
  120.   includes the following important features:
  121.  
  122.  
  123.  
  124.     - DYNAMIC DISPATCH VIRTUAL TABLES (DDVTs).
  125.  
  126.       DDVTs provide a simple alternative to the traditional method
  127.       of writing a window procedure to responding to Windows messages.
  128.       Typically, a window procedure consists of a lengthy switch
  129.       statement with a case for every Windows message to which you
  130.       require a response.  By using DDVTs, you respond to a Windows
  131.       message by writing a member function of the C++ class associated
  132.       with your window.  Using DDVTs, your derived classes will not
  133.       be encumbered with virtual table entries for all windows
  134.       messages handled by the derived class and all base classes.
  135.       DDVTs encode only the changed virtual member functions to keep
  136.       virtual tables small.
  137.  
  138.  
  139.     - SUPPORT FOR STREAMABLE OBJECTS.
  140.  
  141.       OWL includes support for streamable (persistent) objects.
  142.       The stream manager lets you save objects either in memory
  143.       or file streams so that they persist beyond their normal lifespan.
  144.  
  145.  
  146.  
  147.     - BORLAND CUSTOM CONTROLS.
  148.  
  149.       The Borland Windows Custom Control Library (BWCC.DLL) provided
  150.       with this release allows you to build your own Windows programs
  151.       using the fancy dialog boxes and controls provided with such
  152.       Borland Windows products as the Resource Workshop and Turbo
  153.       Pascal for Windows.
  154.  
  155.  
  156.  
  157.     - DYNAMIC LINK LIBRARIES (DLLs).
  158.  
  159.     - The OWL library is provided in two forms:
  160.       as a DLL (OWL.DLL) and as the usual static link
  161.       libraries (OWLWx.LIB where x is the memory model).
  162.  
  163.     - OWL provides the ability to produce your own OWL DLLs and use
  164.       classes and functions from these DLLs in your OWL applications.
  165.  
  166.     - In addition to OWL.DLL, this version includes dynamic link
  167.       library versions of BWCC (Borland Windows Custom Controls),
  168.       and BCRTL (the Borland C++ run-time libraries within a DLL).
  169.       More information on these appears below.
  170.  
  171.  
  172.  
  173.     - ONLINE HELP.
  174.  
  175.       We provide help files containing reference information on
  176.       the ObjectWindows and Streamable classes.
  177.  
  178.       The help files are provided in two formats: one that is
  179.       compatible with THELP and one that is compatible with the
  180.       Windows help engine (WINHELP).
  181.  
  182.  
  183.  
  184.     - GLOBAL HEAP SUBALLOCATION.
  185.  
  186.       To significantly improve the performance of dynamic heap
  187.       allocations under Windows, OWL provides new versions of the
  188.       farmalloc, farfree, farrealloc, and farcalloc functions.
  189.       These new versions suballocate Windows global heap blocks.
  190.  
  191.  
  192.  
  193.  4. IMPORTANT INFORMATION
  194. -------------------------
  195.  
  196.   Be sure to look at the files in the OWL\DOC subdirectory for more
  197.   information about ObjectWindows for C++. These files have additional
  198.   information about OWL as well as corrections to the manuals.
  199.  
  200.  
  201.   PATCHES
  202.  
  203.     The install program will update your Borland C++ BIN, LIB,
  204.     INCLUDE, and CLASSLIB subdirectories.
  205.  
  206.     *** Important: If you need to preserve existing versions of
  207.     the files in these directories, back up these files before
  208.     running the install.
  209.  
  210.     In the BIN directory, TLINK.EXE, TLINKX.OVY, BC.EXE, and BCX.OVY
  211.     will be replaced.  They fix several linker errors and prevent
  212.     warnings such as:
  213.  
  214.       TWindowsObject:: conflicts with module WINDOW in module WINDOBJ
  215.  
  216.     Although these warnings can be safely ignored, other linker fixes
  217.     are more critical to link large OWL applications, especially
  218.     with regard to building DLLs.
  219.  
  220.     In the LIB directory, the file CRTLL.LIB will be added.  This is
  221.     the import library for the BCRTL.DLL added to your BIN directory.
  222.  
  223.     Many files in the INCLUDE directory will be updated.  The primary
  224.     change is to use the new file _DEFS.H, which defines various
  225.     macros used by the run-time library (RTL).  All RTL header files which
  226.     explicitly defined these macros have been changed to include
  227.     _DEFS.H.  In a few cases, use of the _FAR macro has been
  228.     corrected.  All of the include files which define C++ classes
  229.     have been updated to use the new _CLASSDEF and _CLASSTYPE macros.
  230.  
  231.     You should use the files provided with OWL in place of the CLASSLIB
  232.     files provided with Borland C++ 2.0.  The new files contain
  233.     several corrections as well as support for use within DLLs.
  234.  
  235.  
  236.   OBJECTWINDOWS MANUALS
  237.  
  238.  
  239.     The Programmer's Guide includes a step-by-step tutorial
  240.     that quickly introduces readers to many of the important
  241.     features of OWL and gets them off to a good start in
  242.     OWL programming.
  243.  
  244.     In your OWL\DOC directory, there is a MANUAL.DOC file that contains
  245.     updated information and corrections for the ObjectWindows
  246.     Programmer's Guide and Reference Guide.
  247.  
  248.     In OWL\DOC, you will also find a file, DLL.DOC, that contains a
  249.     new chapter of the Programmer's Guide on using and building
  250.     dynamic link libraries.
  251.  
  252.     In OWL\DOC, the BWCC-OWL.DOC, BWCCAPI.DOC, and BWCCSTYL.DOC files
  253.     contain information on using the Borland Custom Controls with OWL.
  254.  
  255.     If you have any questions that are not answered in the manuals,
  256.     check out this README file and the HELPME!.DOC file, which
  257.     discusses questions and problems that OWL programmers may
  258.     encounter.
  259.  
  260.  
  261.  
  262.   BORLAND CUSTOM CONTROLS
  263.  
  264.     The Borland Windows Custom Control Library (BWCC.DLL) is provided
  265.     with this release, along with its import library (BWCC.LIB).
  266.     To use BWCC, you must specify the Windows class name of any
  267.     control you want to use in your resource files.
  268.  
  269.     Whether you use BWCC from an OWL program or not, you will have to
  270.     ensure that BWCC.DLL is dynamically loaded along with your
  271.     program.  The suggested way to do this is to update your program
  272.     to make a call to BWCCGetVersion (defined in OWL\INCLUDE\BWCC.H) from
  273.     somewhere within your program.  This will cause an imported
  274.     reference to BWCC.DLL which will, in turn, cause the Windows
  275.     loader to load BWCC.DLL along with your program (if it is not
  276.     already loaded).
  277.  
  278.     The CHECKERS and TTT (TicTacToe) games in the OWL\EXAMPLES directory
  279.     use the Borland Windows Custom Controls.
  280.  
  281.     See the files BWCC-OWL.DOC, BWCCAPI.DOC, and BWCCSTYL.DOC in the
  282.     OWL\DOC subdirectory for more information on using the Borland
  283.     Custom Controls.
  284.  
  285.  
  286.   DLL SUPPORT
  287.  
  288.  
  289.     If you use DLLs, remember that they must be located in
  290.     a directory in your path (eg, c:\BORLANDC\BIN or c:\WINDOWS) or in
  291.     the directory of the .EXE which invokes them.
  292.  
  293.     By default, the INSTALL program will place OWL.DLL, OWL.TDS, BWCC.DLL,
  294.     and BCRTL.DLL in your BORLANDC\BIN directory;
  295.  
  296.  
  297.     If you want to build the example programs to use the statically
  298.     linked libraries rather than OWL.DLL (the default for the makefile
  299.     in OWL\EXAMPLES), you should define the USESTATIC macro on the
  300.     make command line:
  301.  
  302.     make -DUSESTATIC
  303.  
  304.  
  305.     If you are using OWL.DLL, or any ObjectWindows DLL that you have
  306.     built, you must use large model for both the DLLs and the EXEs
  307.     which use them.  Also, if you link your program to you use OWL.DLL,
  308.     then it should also be linked to use BCRTL.DLL; CRTLL.LIB is the
  309.     import library for BCRTL.DLL.
  310.  
  311.  
  312.     If you want to build your own DLLs with OWL, we recommend that
  313.     you check out the USECDLL and CALLDLL example programs.
  314.  
  315.     The USECDLL example program demonstrates the use of a cooperating
  316.     OWL EXE and DLL using an object interface (that is, shared classes).
  317.     The CALLDLL example program shows an OWL EXE making a call
  318.     into an OWL DLL using a functional interface.  The USECDLL2 shows
  319.     a non-OWL EXE calling into an OWL DLL.
  320.  
  321.     If you want to define your own shared classes, define the
  322.     _CLASSDLL macro on the compiler command line to signify that the
  323.     module being compiled will use classes in a DLL or will pass
  324.     classes into a DLL.  Other macros, notably _CLASSTYPE, _EXPORT,
  325.     and _FAR, will check to see if _CLASSDLL has been defined.
  326.  
  327.     Use the _EXPORT macro (defined in OWL\INCLUDE\OWLDEFS.H) in the
  328.     definitions of your shared classes.  It will expand into either
  329.     '_CLASSTYPE' (when compiling an .EXE file) or '_export' (when
  330.     compiling a .DLL module).  Typical usage might be:
  331.  
  332.     _CLASSDEF(TMyClass)
  333.     class _EXPORT TMyClass
  334.     {
  335.         // whatever...
  336.     };
  337.  
  338.     The _CLASSTYPE macro (defined in BORLANDC\INCLUDE\_DEFS.H)
  339.     expands into either "huge", "far", or "near" as appropriate.
  340.     If the __DLL__ or _CLASSDLL macro is defined, _CLASSTYPE
  341.     expands into "huge", since huge classes are required when
  342.     classes are passed between an EXE and a DLL or between two
  343.     DLLs (a huge class is a class which has a far 'this' pointer
  344.     and a far virtual table pointer).
  345.  
  346.     External functions that are exported from a library when it is built
  347.     as a DLL should be declared with _EXPFUNC.  This macro is defined
  348.     in OWLDEFS.H and expands into '_export' when the source it appears
  349.     in is compiled for a DLL (-WDE or -WD would be used if built with
  350.     the command line compiler); otherwise, _EXPFUNC is replaced with
  351.     the null string.  For example, the following declaration appears
  352.     in the WINDOBJ.H header file:
  353.  
  354.     extern PTApplication _EXPFUNC GetApplicationObject();
  355.  
  356.  
  357.     Note that, DLLs may only be built in large model;
  358.     BC++ 2.0 only supports C++ DLLs in compact and large model
  359.     (C DLLs may be built in small and medium as well),
  360.     and OWL is not supported in compact model.
  361.  
  362.     Also note that, if you build an OWL application (.EXE) that
  363.     uses one or more OWL DLLs, you must dynamically link your EXE
  364.     with OWL and BCRTL.  You cannot statically link your EXE with
  365.     the OWLWx.LIB static link libraries.
  366.  
  367.  
  368.     More information on DLLs appears in the DLL.DOC file in OWL\DOCS.
  369.  
  370.  
  371.  
  372.   EXAMPLE PROGRAMS
  373.  
  374.  
  375.     The OWL\EXAMPLES subdirectory contains many sample programs that
  376.     will help you get started in writing OWL programs.
  377.     The 'test' apps are typically short programs providing
  378.     code samples that demonstrate various OWL classes and
  379.     their features; these often correspond to discussions in
  380.     the Programmer's Guide.  The longer, more useful and interesting
  381.     apps include MFILEAPP (an MDI editor), BONK (a game), and
  382.     PROGTALK (a DDE client that can add items and groups to
  383.     the Windows program manager (a DDE server)).
  384.     The EXAMPLES\STEPS subdirectory contains the source files
  385.     and resource scripts needed to build the programs described
  386.     in the OWL tutorial (part one of the Programmer's Guide).
  387.     The TTT (TicTacToe) and CHECKERS examples make use of the Borland
  388.     Windows Custom Controls.  Using a dialog as a main window of a
  389.     program is demostrated in the SYSINFO (system information), CALC
  390.     (calculator), and CURSOR (window information) examples.
  391.  
  392.     We provide a MAKEFILE for building the examples.  You may want to
  393.     use this as a template for writing your own makefiles.  The
  394.     MAKEFILE uses a make include file, MAKEFILE.INC, which defines
  395.     the macros used by the makefiles in OWL\EXAMPLES and its
  396.     subdirectories.  If you installed OWL under your BORLANDC
  397.     directory (the default), and if your BORLANDC subdirectories use
  398.     the default names (BIN, INCLUDE, LIB, CLASSLIB), then you will
  399.     only have to redefine the BCROOT macro within MAKEFILE.INC to use
  400.     these makefiles.    
  401.  
  402.     The OWL\EXAMPLES subdirectory also contains project (.PRJ) files
  403.     for building the sample programs with the Borland C++ IDE.
  404.     If you didn't use the standard directories when you installed
  405.     Borland C++ or OWL, and you want to build example programs that
  406.     come with .PRJ files, you may have to change the .PRJ
  407.     file to reflect your actual directory setup.  Do this from
  408.     inside BC.EXE or BCX.EXE with Alt-O/D (Options|Directories...).
  409.     The .PRJ files will build the examples in large model and link
  410.     with OWL.DLL.
  411.  
  412.  
  413.  
  414.  SOURCE CODE
  415.  
  416.  
  417.     OWL provides an updated version of the Borland C++ container class
  418.     library which supercedes the version previously shipped with
  419.     Borland C++ 2.0.  You must use this version to build the OWL libraries.
  420.  
  421.     Note that the INSTALL program will write this new version
  422.     over the one provided with Borland C++ 2.0 if default
  423.     paths were used in both installations.
  424.  
  425.     We provide the libraries TCLASSWx.lib (where x is the memory
  426.     model) and TCLASSDL.LIB for use when building DLLs.  We also
  427.     provide a library (TCLASSS.LIB) for building small model DOS
  428.     programs.  The BORLANDC\CLASSLIB\OBJECT directory contains
  429.     subdirectories in which the makefile places the .OBJ files if
  430.     you decide to rebuild these libraries yourself.
  431.  
  432.  
  433.  
  434.  
  435.  
  436.  BUILDING THE SAMPLE CODE
  437.  
  438.  
  439.     If you cannot use BCCX and TLINKX to build programs (eg, if
  440.     you do not have any extended memory), you will need to make
  441.     some changes to the batch file and makefiles.  In
  442.     the batch file used to build the sample programs, the two lines
  443.     that use TKERNEL should be 'rem'oved.
  444.     In the makefiles, you will have to make these changes:
  445.  
  446.     CC = bccx
  447.     TLINK = tlinkx
  448.  
  449.     should become
  450.  
  451.     CC = bcc
  452.     TLINK = tlink
  453.  
  454.  
  455.     If you installed BC++ 2.0 in a directory other than the
  456.     default (C:\BORLANDC), you will need to change the macro
  457.     definition
  458.  
  459.     BCROOT=c:\borlandc
  460.  
  461.     in the makefiles to use that other directory.
  462.  
  463.  
  464.     The install program installs OWL, by default, in C:\BORLANDC\OWL.
  465.     The makefiles are currently set up to assume OWL was installed in
  466.     the directory OWL under your Borland C++ directory (the macro BCROOT).
  467.     You will need to update the OWLROOT macro (which defaults to
  468.     $(BCROOT)\OWL) in all the
  469.     makefiles to read:
  470.  
  471.     OWLROOT=d:\owl
  472.  
  473.     (or wherever) if you told INSTALL to place OWL somewhere else.
  474.  
  475.  
  476.     These changes are necessary to enable the makefile and the compiler
  477.     to find the appropriate include files and libraries that are
  478.     needed to build your OWL programs.  If you do not want to edit
  479.     the makefile to make this change, you can redefine these on the
  480.     make command line; for example,
  481.  
  482.     make -DBCROOT=d:\borlandc -DOWLROOT=d:\owl
  483.  
  484.     would change the definitions of the BCROOT and OWLROOT make
  485.     macros to "d:\borlandc" and "d:\owl", respectively.
  486.     Defining environment variables named BCROOT and OWLROOT is
  487.     equivalent to redefining these make macros on the make command
  488.     line.
  489.  
  490.  
  491.     In addition to the makefiles, the example programs each have
  492.     a project file.  After you have opened a project in the IDE, you
  493.     should check the Options|Directories dialog; you may have to
  494.     change part of the INCLUDE and LIB selections if C:\BORLANDC
  495.     is not the directory in which you installed BC++ 2.0.
  496.  
  497.     If you are in a directory containing sample code,
  498.     you can build it by simply running
  499.  
  500.     make
  501.  
  502.  
  503.     To build the programs using the static link libraries for a
  504.     specific memory model, use
  505.  
  506.     make -DUSESSTATIC -DMODEL=x
  507.  
  508.     where x is one of s, m, or l.  The makefiles in the OWL\EXAMPLES
  509.     directory default to small model when the OWL static libraries
  510.     are used and to large model when the OWL DLL is used.
  511.  
  512.  
  513.     To build the examples using OWL.DLL, use
  514.  
  515.     make -DMODEL=l -DUSEDLL
  516.  
  517.     or simply,
  518.  
  519.     make
  520.  
  521.     (the USEDLL macro is defined by default; if USEDLL is defined,
  522.     MODEL is defined to be "l").
  523.  
  524.  
  525.     Note that only large model can be used with ObjectWindows
  526.     DLLs (including OWL.DLL).
  527.  
  528.  
  529.     To build the code with debug information turned on, use
  530.  
  531.     make -DDEBUG
  532.  
  533.     Building with debug information can be very useful.
  534.  
  535.  
  536.     For faster compilations, we recommend that you use the
  537.     precompiled headers option.  You can add this to a makefile,
  538.     by adding
  539.  
  540.     -H
  541.  
  542.     to the CFLAGS macro in the makefile.
  543.     (For more information on precompiled headers, see Appendix A
  544.     in the Borland C++ User's Guide).
  545.  
  546.     You can also use make to build single files for which the
  547.     makefile has a rule.  In the OWL\EXAMPLES subdirectory,
  548.     you could build a single program, say, helloapp.exe, by running
  549.  
  550.     make helloapp.exe
  551.  
  552.     For more information on the MAKE utility, makefiles, and the
  553.     constructs within the makefiles (macros, linker response
  554.     files, make inline response files), see chapter 7, Utilities,
  555.     in the Borland C++ User's Guide.
  556.  
  557.  
  558.  
  559.  
  560.   ONLINE HELP
  561.  
  562.  
  563.     Part 1 of the ObjectWindows Reference (the ObjectWindows hierarchy,
  564.     the Streamable class hierarchy, and miscellanea) is provided in
  565.     online Help files, OWLWHELP.HLP and OWLTHELP.OWH.
  566.  
  567.     OWLWHELP.HLP is a help file that is compatible with the
  568.     Windows help engine.
  569.     To install it, enter Windows and click your mouse once on
  570.     the Program Manager group to which you want to add the OWL help
  571.     item.  Then from the Program Manager menu, choose
  572.  
  573.     File|New
  574.  
  575.     A dialog box appears; choose "Program Item", then "OK".
  576.     A different dialog box entitled "Program Item Properties" will
  577.     appear; enter a description ("OWL Help") and the following
  578.     command line:
  579.  
  580.     winhelp.exe c:\borlandc\owl\owlwhelp.hlp
  581.  
  582.     Then choose "OK".
  583.     A "Winhelp" icon is added to the chosen group with the given
  584.     description ("OWL Help").
  585.  
  586.  
  587.     OWLTHELP.OWH is a help file compatible with the Turbo Help
  588.     TSR, THELP.EXE, which is located in your BORLANDC\BIN directory.
  589.     To load THELP with this file, type
  590.  
  591.     THELP /Fc:\borlandc\owl\owlthelp.owh
  592.  
  593.     Then, you can activate THELP at any time. If you are in your editor
  594.     looking at an OWL source file, you can position the cursor
  595.     under the item you want information on, then press the THELP hot key.
  596.     The default hot key is 5 on the numeric keypad.  THELP requires
  597.     about 58K bytes of memory.  For further information on using
  598.     THELP, refer to the file UTIL.DOC in your BORLANDC\DOC directory.
  599.  
  600.  
  601.  
  602.  
  603.   DEBUGGING OWL APPLICATIONS WITH TDW
  604.  
  605.  
  606.     We strongly recommend stepping through OWL programs in TDW
  607.     as a means of furthering your understanding of the
  608.     inter-relationships between application and window objects, and
  609.     the construction of window objects and the creation of associated
  610.     window elements.  Start with a simple example such as HELLOAPP.
  611.  
  612.  
  613.     If you want to rebuild a program or library so that inline functions
  614.     are taken out of line (so that they can be stepped through), simply
  615.     compile the source with -v.  If you want inline functions to
  616.     remain inline when debug information is generated, compile
  617.     with -v -vi.
  618.  
  619.  
  620.     NOTE: TWindowsObject has two virtual functions,
  621.     BeforeDispatchHandler and AfterDispatchHandler,
  622.     that are invoked before and after, respectively, performing a
  623.     dynamic dispatch.  In TWindowsObject, these virtual functions
  624.     are inline and default to doing nothing.  However, when
  625.     redefined in a derived class, they are useful for debugging
  626.     (because they are possible places for setting breakpoints)
  627.     and for global processing on receipt of any message.
  628.  
  629.  
  630.  
  631.   GLOBAL HEAP SUBALLOCATION
  632.  
  633.  
  634.     The static link libraries SALLOCWS.LIB, SALLOCWM.LIB, and
  635.     SALLOCWL.LIB replace the farmalloc, farfree, farrealloc, and
  636.     farcalloc functions with versions that suballocate Windows global
  637.     heap blocks.  These functions are contained in BCRTL.DLL if
  638.     you link with DLLs.  These replacement functions significantly
  639.     improve the performance of dynamic heap allocations.
  640.  
  641.     To take advantage of these functions, you need only use
  642.     'new' and 'delete' as usual.
  643.  
  644.  
  645.  
  646.   OTHER IMPORTANT NOTES
  647.  
  648.  
  649.   - OWL programs are not supported in compact model with Borland C++ 2.0.
  650.  
  651.  
  652.   - Note that correct usage of the transfer mechanism for TComboBox
  653.     and TListBox differs somewhat from transfer buffer usage for
  654.     otherwindow objects.  The CBXTTEST.CPP and LBXTTEST.CPP
  655.     example programs demonstrate the correct usage of the
  656.     transfer mechanism with TComboBoxData and TListBoxData.
  657.  
  658.   - The TListBox functions which are described as being for
  659.     single-selection list boxes are inherited by TComboBox and
  660.     can also be used by combo boxes.
  661.