INFO: Changes in MFC Between Visual C++ 5.0 and 6.0
ID: Q194298
 
  |  
 
 
The information in this article applies to: 
- 
The Microsoft Foundation Classes (MFC), included with:
- 
Microsoft Visual C++, 32-bit Editions, version  6.0
  
  
 
 SUMMARY
MFC has changed substantially since it shipped in Visual C++ version 5.0. MFC 6.0 (Mfc42.dll, version 6.00.8168.0), shipping with Visual C++ 6.0, contains many new classes, new
member functions, bug fixes and enhancements. This document provides an
overview of the more substantial changes in MFC.
 
 
Largely, the changes made to the library fit in one of several categories.
First, many changes were made in an effort to make the library more
efficient. Even though MFC 6.0 has many new features, the size of the DLL
is just about the same as it was in the last version. You'll notice that
the statically-linked version of the library is more granular-many problems
which caused unused code to be brought into the library were addressed in
this version. Finally, there are many new classes and member functions in
the libraries that provide for integrated access to new operating system
features.
 
 
While the library has undergone some growth, you should be able to
recompile your programs with the new library without changing them.
Further, you should be able to install the MFC DLLs over old versions
without recompiling programs which use the library.
 
 
Since some of the changes to the library were made to address very broad
goals, this document contains a section on global changes. After those
global changes are addressed, there's a section on each new or changed
class. We've made every attempt to make this document as comprehensive as
possible, but it's main purpose is to provide an aid to understanding the
differences between this and the previous version of the library. Because
of resource limitations, this document does not, by any means, include a
comprehensive list of all bugs fixed since the last release of the library.
 
 MORE INFORMATIONGlobal Changes
void operator delete(void * pData, LPCSTR /*lpszFileName */,
                     int /*nLine*/)  
Library Implementation Changes
- Thread safety in the CThreadSlotData implementation class has
  improved. This fixes problems with deadlocks and thread safety usually
  apparent only on multiprocessor machines. CThreadSlotData is used
  internally by MFC to manage thread-local data for the library.
 
 
 - COMCTL preregistration code was rewritten to be more efficient. MFC will
  initialize the COMCTL32.DLL library appropriately as your application
  executes. Since a recent update to that DLL allows applications to only
  register window classes they need (rather than all classes supplied by
  the library) MFC will use the more efficient API when it is available.
  When the updated COMCTL32.DLL is not available, MFC falls back on its
  original behavior.
 
 
 - MFC.DLL build uses /DELAYLOAD linker option. The shared DLL version of
  MFC now uses the linker's new /DELAYLOAD option. This makes the library
  only load DLLs when it is necessary to actually initialize them rather
  than load and initialize all referenced DLLs. This significantly reduces
  the size of the DLL.
 
 
  
Collection Classes
- MFC uses memmove() where appropriate. The collection classes would
  sometimes use memcpy() where memmove() was actually required.
 
 
 - FindIndex() returns NULL for negative indexes. List-based collections
  with a FindIndex() member will return NULL if the index passed to the
  function is negative. In previous releases, this scenario caused a hang
  or an access violation.
 
 
  
CArchive
- To improve runtime performance, enhancements to the class were made to
   avoid double-buffering while writing to or reading from the archive.
 
 
 - Don't reset schema when loading old objects. Reading code in the class
  would reset the expected schema number when reading older objects into
  memory. The buggy code caused problems when reading some partially
  updated file types and was fixed in this version of the library.
 
 
  
CAsyncSocket
- SendTo() member correctly returns errors. In previous versions of MFC,
  CAsyncSocket::SendTo() returned FALSE for some errors. The function now
  returns a proper WinSock error code in all circumstances.
 
 
  
CCheckListBox
- CCheckListBox features a new SetSelectionCheck() member which can check
  (or uncheck) the selected items within the box.
 
 
  
CComboBox
- MFC-created combo boxes now properly initialize their contents from data
  provided by the resource editor.
 
 
  
CControlBar
- The new SetBorders() member is a public accessor which allows other
  classes to set the bar's borders.
 
 
 - The new DrawGripper() member function draws a "gripper", which is a
  user-interface clue on command bars that are movable or resizable.
 
 
 - CalcInsideRect() adjusts for the correct sizing of a bar that has a
  gripper.
 
 
 - The CControlBar class will assert that the m_dwStyle member only contains
  MFC-specific bits masked by CBRS_ALL. This assertion will fire if user
  code sets window-style bits which is wrong.
 
 
 - The floating and docking behavior of control bars has been fixed to work
  acceptably on multiple monitor systems.
 
 
  
CDC
- In previous versions of MFC, CDC member functions would sometimes return
  unpredictable values for extreme failure conditions. These functions have
  been cleaned up and will return the correct error code.
 
 
  
CTabCtrl
- SetItemState() and GetItemState() member functions have been added in order to support new functionality exposed by the revised COMCTL32.DLL.
 
 
  
CToolBar
- SetSizes() can be called when toolbar isn't created. The function
  previously ASSERTed when it wasn't attached to a window, but now reacts
  by setting them member data of the object to reflect the size instead of
  moving the window's position.
 
 
 - The CToolBar class has been significantly cleaned up for efficiency and
  also modified to gracefully handle compatibility issues with old and new
  COMCTL32.DLL implementations.
 
 
  
CTreeCtrl
- The GetCheck() and SetCheck() members have been added to support checked
  tree controls.
 
 
  
COleControl
- The style bit fastBeginPaint is now ignored. OLE Controls are always
  expected to erase their background in OnDraw(), as they won't receive
  WM_ERASEBKGND when rendering to a metafile DC.
 
 
 - The handlers for the mouse button messages in the class were rewritten to
  be more efficient without changing their functionality.
 
 
 - Several small bugs in the in-place activation implementation have been
  fixed.
 
 
 - The MFC-supplied tracker now clips properly.
 
 
 - OnSetObjectRects() has been fixed. This function's implementation ignored
  the clipping rectangle and would cause spurious window movement
  (resulting in extra repaints) during windowless activation. The code has
  been fixed to avoid those problems.
 
 
 - The reflector window now handles WM_SIZE appropriately. Previously, the
  message was ignored.
 
 
 - CreateTracker()/DestroyTracker() now call OnSetObjectRects(). Duplicated
  code in the CreateTracker() and DestroyTracker() members has been folded
  into OnSetObjectRects() to save space. Since adding or removing the
  tracker does cause the objects' bounding rectangle size to change, it's
  appropriate that the action now cause call to OnSetObjectRects().
 
 
  
COleDateTime
- Several rounding errors existed in previous versions of this class. All
  known rounding problems have been remedied.
 
 
 - The class now features a GetAsSystemTime() member function, which can be
  used to convert the time object's value to a SYSTEMTIME structure.
 
 
  
CTime
- The class now features a GetAsSystemTime() member function, which can be
  used to convert the time object's value to a SYSTEMTIME structure.
 
 
  
CWinApp
- MFC no longer calls CloseHandle() on the m_hThread handle member of the
  application object. The new behavior avoids leaks and diagnostic
  messages.
 
 
 - Registry deletion code was cleaned up. Significant duplicated code to
  remove keys from the registry has been removed from the library,
  resulting in a space savings.
 
 
 - Applications which register themselves as a DocObject
  server, OAT_DOC_OBJECT_SERVER, will enter their file extension directly
  from the document resource string's filterExt field, if it is available.
  Otherwise, MFC will try to parse an extension from the filterName field.
 
 
  
CObject
- Placement syntax has been added for CObject's operator delete(). The
  compiler now supports placement-syntax delete operators which properly
  delete memory in situations where placement syntax operator new was used.
  Since MFC makes heavy use of placement syntax new in both debug and
  non-debug builds, support for the placement syntax delete operator was
  added.
 
 
  
CDaoDatabase
- Not dependent on DAO 3.5. Some recent releases of MFC had problems
  running correctly on machines that weren't updated to DAO 3.5. Those
  problems have been resolved, but it is advisable to upgrade to DAO 3.5
  anyway due to performance and stability improvements.
 
 
  
CDaoRecordset
- IsBOF() and IsEOF() are now const.
 
 
 - The Unicode DFX_Text() function would not allocate enough space when
  binding Unicode strings. This problem has been fixed.
 
 
 - A DDX routine to work with the CSlider control has been provided. The
  routine exchanges the slider's integer with a field in the database.
 
 
  
CDatabase
- ODBC 3.0 dependency relieved. MFC DLLs previously worked only against
  ODBC 3.0, and are now compatible with ODBC 2.5.
 
 
  
CHttpFile
- Support for log post data. The CHttpFile class now supports long post
  data via the SendRequestEx() and EndRequest() member functions.
 
 
  
CHttpServer
- An overridable function named OnTerminateExtension() has been provided to
  support the termination notification sent by newer ISAPI servers.
 
 
 - MFC will write the response stream in blocks to be compatible with HTTPS
  and other protocols with size limitations. The new m_dwChunkSize member
  variable determines the block size, and the OnWriteBody() function can be
  overridden to alter the writing behavior.
 
 
 - A new parse map parameter type has been added. You may retrieve the raw
  parameters from the client by using the ITS_RAW parameter type.
 
 
 - Via the TransmitFile() member and OnWriteBody() override, the class now
  supports overlapped I/O.
 
 
  
CInternetFile
- In some circumstances, the ReadString() member function would truncate
  data read from the connection. This bug has been fixed.
 
 
  
CInternetSession
- CInternetSession has new member functions to aid with the management of
  cookies.
 
 
 - All internet-related functions in MFC more aggressively ASSERT on the
  validity of memory buffer pointer parameters.
 
 
 - INTERNET_FLAG_ASYNC was never supported by MFC. The presence of this flag
  now causes debug builds of MFC to ASSERT.
 
 
  
CListCtrl
- Member functions have been added to support virtual list views.
 
 
  
CMDIChildWnd
- CMDIChildWnd features a new CreateNewChild() which facilitates the
  creation of MDI child windows outside of the doc-view architecture.
 
 
  
COleDocument
- Previous versions of MFC opened storages with STGM_SHARE_EXCLUSIVE. MFC
  now uses the more appropriate STGM_SHARE_DENY_WRITE flag, which allows
  other applications to read the storage while it is opened by the document
  object.
 
 
  
COleIPFrame
- Menu merging, IOleCommandTarget, and command forwarding support was added
  to COleIPFrame in order to support DocObject containment.
 
 
  
CSlider
- There's now DDX_Slider(), which facilitates data exchange with an integer
  variable and a slider control.
 
 
  
CPropertyPage
- The creation of a property sheet with pages from a DIALOGEX resource
  would sometimes needlessly ASSERT. The assertion has been corrected.
 
 
 - The MapWizardResult() member function would sometimes return an incorrect
  value. This problem has been corrected.
 
 
 - Some property page creations would result in a blank dialog. This problem
  was fixed.
 
 
 - MFC's handler for EndDialog() incorrectly returned IDCANCEL instead of
  PSBTN_CANCEL.
 
 
 - A property page closed with the system menu or by the user pressing the
  close button might not correctly set the m_nModalResult member to
  IDCANCEL. This has been fixed.
 
 
  
CRecordset
- The RFX_Int() function incorrectly handled NULL values in previous
  versions of the library. This problem has been corrected.
 
 
  
CScrollView
- A bug that caused a bogus assert when the mouse wheel was used to scroll
  a CScrollView has been fixed.
 
 
 - Mouse wheel page-mode scrolling has been fixed. A bug which made
  page-by-page views scroll in the wrong direction has been fixed.
 
 
  
CString
- CString has been modified to use an extremely fast fixed-size memory
  allocator. The memory allocator will work for string sizes up to 64
  characters, 128 characters, 256 characters, and 512 characters to improve
  performance for the most commonly encountered string sizes.
 
 
 - CString now includes several new utility functions to ease string
  programming. Find() has a new overload that takes an offset. There are
  length-based string constructors. Delete() and Insert() functions provide
  for removal and insertion, respectively, of characters within the string.
  Replace() provides a way to substitute a substring for another substring,
  or a character for another character. TrimRight() and TrimLeft() now
  feature new overrides which can trim user-specified characters or sets of
  characters.
 
 
 - Format supports __int64. The Format() member now supports the "%I64"
  formatting string for use with __int64 data types.
 
 
  
CView
- The print preview bar has been restored to its rightful position-within
  the parent frame.
 
 
  
CWinThread
- The MFC-supplied PreTranslateMessage() member function is no longer
  responsible for canceling active tooltips. This code has been moved to
  CWnd::FilterToolTipMessage(). This change was necessary in order to
  support the new tracking tooltip styles.
 
 
  
CWnd
- All CWnd-derived classes will print a TRACE message upon failure in their
  creation functions. The message identifies the failure point and shows
  the last error value to aid in diagnosis.
 
 
 - The CenterWindow() function has been fixed to work properly on multiple
  monitor machines.
 
 
  
New Classes
- To support newly available common controls,  the CMonthCalCtrl,
  CDateTimeCtrl, and CIPAddressCtrl classes have been added to the library.
  Appropriate overrides of DDX_ and RFX_ functions have been added to the
  library, as well.
 
 
 - The CReBar and CReBarCtrl classes was added to the library to provide
  access to the new rebar control.
 
 
 - The CHtmlView class is used to contain the Internet Explorer ActiveX
  Control.
 
 
 - The CPropSheetEx and CPropPageEx classes were added to support new user
  interface styles in the property page API.
 
 
  
Socket Support
- MFC changed how WinSock specific thread state information is stored.
Pointers to handle maps, instead of the handle maps themselves, are
stored in the AFX_MODULE_THREAD_STATE data.
 
 
  
Additional query words: 
 
Keywords          : kbnokeyword kbMFC kbVC kbVC600 kbfaq kbMFC600  
Version           : winnt:6.0
 
Platform          : winnt  
Issue type        : kbinfo  
 |