=======================================================================
					 MICROSOFT (R) FOUNDATION CLASSES
							  Version 4.2
						   Source Code ReadMe
=======================================================================

This directory contains the source code to the MFC library.

These files have been included for reference purposes, in
conjunction with the Class Library Reference manual and tutorial.

These files are compiled to form the Microsoft Foundation Classes 4.2
(MFC 4.2).  The library may be built in a number of configurations,
character sets (UNICODE or ANSI), and whether or not debugging and
diagnostic aids are to be included in applications which link with
the library.

============================================
 1.  BUILDING A STATIC LINK LIBRARY VARIANT
============================================

The makefile provided can be used to build the static link library
variants of MFC 4.2.  See section 2 for instructions on building
the shared DLL variant.  The makefile can be used from either the
MS-DOS command line (in a Windows NT cmd shell) or as an External
Project file in the Microsoft Developer Studio.

To build a library in a particular configuration, use the NMAKE tool
and the makefile which is in this directory.  The following arguments
can be given to NMAKE to successfully build a specific library variant.

  NMAKE {DEBUG=[0|1]} {BROWSE=[0|1]} {BROWSEONLY={0|1} \
		{CODEVIEW=[0|1|2]} {OBJ=path} \
		{PLATFORM=INTEL|ALPHA|MIPS|PPC|M68K|MPPC} \
		{UNICODE=[0|1]} \
		{OPT=<CL command line switches>}

Previous versions of MFC supported MODEL and TARGET options to control the
memory model and to support DOS/CONSOLE mode targetting. These options are
no longer supported (your Win32 console application can still be linked to
the GUI MFC library, NAFXCW[D].LIB).

For example to build default model with browser information in the debug
build use the following settings:

	Debug Build:  NMAKE DEBUG=1 CODEVIEW=1 BROWSE=1
	Release Build: NMAKE DEBUG=0

DEBUG=[0|1]
	The "DEBUG" argument specifies whether or not to include diagnostic
	support code for the library.  This may be 0 (for no diagnostics)
	or 1 (for full diagnostics).

CODEVIEW=[0|1]
	The "CODEVIEW" argument specifies whether to compile the library with
	CodeView information or not.  You need to compile the library with
	CodeView information if you want to trace into MFC code using the
	Visual C++ debugger.    You should also compile your application files
	with the /Zi option, and link your executable with the /debug:full
	and /debugtype:cv options.

	Setting CODEVIEW does not affect the DEBUG argument, although the
	value of the DEBUG argument does affect the default value of CODEVIEW
	(discussed below).  A value of 0 indicates that no CodeView
	information is to be compiled into the library.  A value of 1 indicates
	to compile in full CodeView information for all modules of the library.

	The default value depends on the setting of the DEBUG argument.
	If DEBUG=1, CODEVIEW defaults to 1.  If DEBUG=0, CODEVIEW defaults
	to 0.  The installed libraries have been built with CODEVIEW=1 for
	maximum CodeView information.

UNICODE=[0|1]
	The "UNICODE" argument specifies whether to create an MBCS
	or UNICODE aware library.  If UNICODE is set to 1, the UNICODE
	variant of the specified library will be built.  The default,
	UNICODE=0, specifies that an MBCS aware (or ANSI) library is
	to be built.

OBJ=[path]
	We recommend storing .OBJ files in a separate directory so that you
	may compile different versions of the MFC library concurrently.
	The "OBJ" argument allows you to specify where these files are stored
	during the build process.  The directory specified is created and
	removed automatically as required.  This defaults to a combination
	of the target, model, and debug status, preceded by a '$' (i.e. $NWD).

OPT=[switches]
	If your library needs to be built with custom compiler switches, then
	these may be included in the "OPT" argument.  Note that switches need
	to be separated by spaces, so when including more than one extra
	compiler switch, enclose the whole OPT= argument in double-quotes.
	This is an advanced feature; read the makefile and the details on each
	of the switches concerned in the Microsoft C/C++ Compiler User Manual
	before using this option.

Defaults
	The default is:
	nmake DEBUG=1 CODEVIEW=1 BROWSE=0 BROWSEONLY=0 UNICODE=0 OBJ=$NWD

To set these options from MS Developer Studio, from the Build menu choose
the Settings menu command and set them in the associated build sections.

=============================
 2.  BUILDING THE SHARED DLL
=============================

Building the shared DLL is very similar to the static link variants.  You
must, however, use the MFCDLL.MAK which is also an External Project file.

To build the shared DLL components that contain the implementation for
OLE and ODBC use MFCOLE.MAK and MFCDB.MAK respectively. These additional
DLLs are required only if your application utilizes the database or
OLE classes.

You must provide a unique name for your DLL(s) and you must provide a DEF
file with a matching name.  Typically, you can make a copy of the DEF
files provided in the \msdev\mfc\src\<platform> directory.

Once you rename this DEF file to be the same base name as the DLL you're
building you then need to add the additional exports (if any).

Technical note TN033 explains in detail how to build the shared DLL and
how to build an application that uses the shared DLL.


===============================
 3. AFTER BUILDING THE LIBRARY
===============================

Once the library has been built successfully, you may want to delete object
files with:

	NMAKE CLEAN OBJ=[path]

Note that if you used the "OBJ" argument while building the library, specify
the same sub directory in the cleanup command.

This will remove all of the temporary .OBJ files created by building the
library, and remove the directory where they were stored.

Always perform a cleanup before building a new variant of the library,
or use different object paths for each variant.  Note that the OBJ files
are only necessary during the building process.


===========================================
 4. BUILDING AND USING THE BROWSE DATABASE
===========================================

A prebuilt MFC browser database is included on the Visual C++ CD-ROM.
It is located in the same directory as the MFC source files, and can be
accessed by opening <cd-drive>:\MSDEV\MFC\SRC\MFC.BSC.  You may want to
build a browse database if you wish to merge the MFC browse information
with your own project or you wish to build a different browse variant than
the one provided (MFC.BSC is the browser database for NAFXCWD.LIB).
The following instructions describe how to build the browse database using
MFC's makefile and how to integrate the resulting .SBR files into your
project.

By building the library with either the BROWSE=1 or BROWSEONLY=1
options you can create the browse database files for the MFC source code.
The output browse file (.BSC) will be placed in the source directory
(this allows the browser to find the source files). The browse
database files share a common naming convention with the libraries.

Usually, it is sufficient to build only one browse database, although
you can build a browse variant for each library variant that MFC
supports.  In addition, it is possible to build only the browse database,
instead of building all the object files and library file.  To build
the NAFXCWD.BSC file, for example:

	NMAKE DEBUG=1 BROWSEONLY=1

The output will be placed in NAFXCWD.BSC (in the MFC source directory).
In addition, all of the SBR files (the individual files, which when combined,
form the .BSC) will be preserved in the OBJ directory (in this case $NWD).
You can add these SBR files to your project's browse database, enabling you to
browse the MFC source as well as your application source code at the same time.

If you are using an external makefile, simply include the MFC SBRs in your
BSCMAKE command.  For example:

	BSCMAKE /o myproj.sbr myfile1.sbr myfile2.sbr \msdev\mfc\src\$nwd\*.sbr

If you are using a Visual C++ project file, you can add it to your project
settings.  To do so, load your project (.MDP or .MAK) file:

	- From the Build menu, choose Settings to edit your project settings
	- Select the "Browse Info" tab in the settings dialog
	- Choose the target you wish to add the MFC browse information
		(ie. Win32 Debug or Win32 Retail)
	- Add the browse files (.SBR files) to "Project Options" edit box:
		\msdev\mfc\src\$nwd\*.sbr

	  Note: Substitute the appropriate path if you built a different variant
		of the library or installed VC++ in a different directory than the
		default.

Even if you are using the incremental build option of BSCMAKE (the default),
these files will not be truncated to zero length (the files are marked in a
special way to prevent the normal truncation that occurs when doing incremental
builds).

Note: The SBR files are protected from truncation by adding a special record
(PCHMARK) that bscmake uses to protect SBR files that are refered to from
pre-compiled header files (PCH).  This record consists of a single byte with
the value 0x10.  The PCHMARK.BIN file contains this single byte -- it is
appended to the SBR files during the build process.

You can also open the resulting browse database file directly and use it
to browse MFC source code.


======================================
 5. SOURCE CODE FORMATTING CONVENTION
======================================

All MFC source code has been formatted such that leading whitespace
on a line is made up of physical tabs, while embedded whitespace is
physical spaces.  MFC source code assumes that your editor is set to
display a physical tab as four blanks.

For example:

int FormatExample()
{
// Statements below should start in column 5 if tabs are set correctly
// Comment should start in column 20
/*
0        1         2
12345678901234567890
*/
	int i;
	i = 5;         // whitespace between statement and comment is spaces

	return i;

}

More information on MFC coding and commenting conventions can be found
in Technical Note #46.
