4 New Features and Enhancements
\r
5 -----------------------------
\r
6 * Adjusted the frame's appearance
\r
7 - Updated the visual appearance of popup menus on systems using Windows Aero. On
\r
8 systems with Aero, popup menus are rendered with Windows Visual Styles. Systems
\r
9 without Areo continue to use the Win32++ theme for popup menus.
\r
10 - Frames now honour the current window theme's menu and status fonts.
\r
11 - the frame's appearence changes dynamically to reflect changes to the window theme.
\r
12 - minor adjustment to the rebar theme colours for the "Modern" theme.
\r
14 * Extended CWebBrowser
\r
15 The CWebBrower class has been extended to wrap the member functions of
\r
16 iWebBrowser2. The Browser sample has been updated and now supports
\r
19 * Added the following controls
\r
27 * CString constructors now accept either ANSI or Unicode characters and converts
\r
28 these to TCHAR as required.
\r
31 The CDC::DetachBitmap function has been added. This provides a convenient
\r
32 way of detaching a bitmap from a memory DC created by CreateCompatibleBitmap.
\r
33 The various CDC::CreateXXX functions now return void instead of a pointer
\r
34 to the old GDI object.
\r
43 - Added CMonthCalendar
\r
46 - Added wndTop a special CWnd for use with SetWindowPos
\r
47 - Added wndTopMost a special CWnd for use with SetWindowPos
\r
48 - Added wndNoTopMost a special CWnd for use with SetWindowPos
\r
49 - Added wndBottom a special CWnd for use with SetWindowPos
\r
51 - Added CDC::DetachBitmap
\r
52 - Added CFrame::DrawMenuItem
\r
53 - Added CFrame::DrawMenuItemBkgnd
\r
54 - Added CFrame::MeasureMenuItem
\r
55 - Added CGDIObject::DeleteObject
\r
56 - Added CString::CString(LPCSTR pszText);
\r
57 - Added CString::CString(LPCWSTR pszText);
\r
58 - Added CString::operator += (LPCSTR szText)
\r
59 - Added CString::operator += (LPCWSTR szText)
\r
60 - Added CReBar::SetToolTips
\r
61 - Added CWebBrowser::ExecWB
\r
62 - Added CWebBrowser::GetApplication
\r
63 - Added CWebBrowser::GetBusy
\r
64 - Added CWebBrowser::GetContainer
\r
65 - Added CWebBrowser::GetFullScreen
\r
66 - Added CWebBrowser::GetHeight
\r
67 - Added CWebBrowser::GetLeft
\r
68 - Added CWebBrowser::GetLocationName
\r
69 - Added CWebBrowser::GetLocationURL
\r
70 - Added CWebBrowser::GetOffline
\r
71 - Added CWebBrowser::GetProperty
\r
72 - Added CWebBrowser::GetReadyState
\r
73 - Added CWebBrowser::GetRegisterAsBrowser
\r
74 - Added CWebBrowser::GetTheaterMode
\r
75 - Added CWebBrowser::GetTop
\r
76 - Added CWebBrowser::GetTopLevelContainer
\r
77 - Added CWebBrowser::GetType
\r
78 - Added CWebBrowser::GetVisible
\r
79 - Added CWebBrowser::GetWidth
\r
80 - Added CWebBrowser::GoBack
\r
81 - Added CWebBrowser::GoForward
\r
82 - Added CWebBrowser::GoHome
\r
83 - Added CWebBrowser::GoSearch
\r
84 - Added CWebBrowser::Navigate2
\r
85 - Added CWebBrowser::PutProperty
\r
86 - Added CWebBrowser::Refresh
\r
87 - Added CWebBrowser::Refresh2
\r
88 - Added CWebBrowser::SetFullScreen
\r
89 - Added CWebBrowser::SetHeight
\r
90 - Added CWebBrowser::SetLeft
\r
91 - Added CWebBrowser::SetOffline
\r
92 - Added CWebBrowser::SetRegisterAsBrowser
\r
93 - Added CWebBrowser::SetTheaterMode
\r
94 - Added CWebBrowser::SetTop
\r
95 - Added CWebBrowser::SetVisible
\r
96 - Added CWebBrowser::SetWidth
\r
97 - Added CWebBrowser::Stop
\r
98 - Modified CComboBoxEx::GetComboBoxControl now returns CWnd*
\r
99 - Modified CComboBoxEx::GetEditCtrl now returns CEdit*
\r
100 - Modified CDC::CreateBitmap now returns void
\r
101 - Modified CDC::CreateCompatibleBitmap now returns void
\r
102 - Modified CDC::CreateDIBSection now returns void
\r
103 - Modified CDC::CreateBitmapIndirect now returns void
\r
104 - Modified CDC::CreateDIBitmap now returns void
\r
105 - Modified CDC::CreateMappedBitmap now returns void
\r
106 - Modified CDC::CreatePatternBrush now returns void
\r
107 - Modified CDC::CreateSolidBrush now returns void
\r
108 - Modified CDC::CreateBrushIndirect now returns void
\r
109 - Modified CDC::CreateHatchBrush now returns void
\r
110 - Modified CDC::CreateDIBPatternBrush now returns void
\r
111 - Modified CDC::CreateDIBPatternBrushPt now returns void
\r
112 - Modified CDC::CreateFontIndirect now returns void
\r
113 - Modified CDC::CreateFont now returns void
\r
114 - Modified CDC::CreatePen now returns void
\r
115 - Modified CDC::CreatePenIndirect now returns void
\r
116 - Modified CDC::LoadBitmap now returns BOOL
\r
117 - Modified CDC::LoadImage now returns BOOL
\r
118 - Modified CDC::LoadOEMBitmap now returns BOOL
\r
119 - Modified CDocker::GetCaption now returns CString
\r
120 - Modified CDocker::LoadRegistrySettings now accepts CString
\r
121 - Modified CDocker::SaveRegistrySettings now accepts CString
\r
122 - Modified CFrame::GetMRUEntry now returns CString
\r
123 - Modified CFrame::GetRegistryKeyName now returns CString
\r
124 - Modified CListView::GetEditCtrl now returns CEdit*
\r
125 - Modified CListView::GetItemText now returns CString
\r
126 - Modified CListView::GetHeader now returns CHeader*
\r
127 - Modified CListView::GetToolTips now returns CToolTip*
\r
128 - Modified CListView::SetToolTips now accepts CToolTip*
\r
129 - Modified CListView::EditLabel now returns CEdit*
\r
130 - Modified CRebar::GetToolTips now returns CToolTip*
\r
131 - Modified CStatusBar::GetPartText now returns CString
\r
132 - Modified CToolBar::GetToolTips now returns CToolTip*
\r
133 - Modified CToolBar::SetToolTips now accepts CToolTip*
\r
134 - Modified CTreeView::GetEditCtrl now returns CEdit*
\r
135 - Modified CTreeView::GetToolTips now returns CToolTip*
\r
136 - Modified CTreeView::SetToolTips now accepts CToolTip*
\r
137 - Modified CWnd::SetWindowPos now uses CWnd* for first argument
\r
138 - Removed CString::b_str
\r
139 - Removed CString(LPCTSTR pszText);
\r
140 - Removed CString::operator += (LPCTSTR szText);
\r
141 - Renamed CFrame::DrawCheckmark to DrawMenuCheckmark
\r
144 Incompatibilities with previous versions
\r
145 ----------------------------------------
\r
151 New Features and Enhancements
\r
152 -----------------------------
\r
153 * Added CString class
\r
154 The CString class is intended to provide much of the same functionality
\r
155 as the CString class provided with MFC/ATL.
\r
157 The CMenu class is intended to provide much of the same functionality
\r
158 as the CMenu class provided with MFC. The library now standardises on
\r
159 using pointers to CMenu, instead of HMENU.
\r
161 This class provides a convenient wrapper for functions dealing with files.
\r
162 * Added Idle processing.
\r
163 The Idle processing is used by the Win32++ library for some internal
\r
164 processing. It is also available for use by users, and is used in much the
\r
165 same way as OnIdle processing in MFC.
\r
166 * Enhanced the CDC class, and added CWindowDC, CClientDC, CMemDC, CPaintDC
\r
167 and CMetaFileDC. The creation of the various different types of CDCs has
\r
168 been simplified, and the CDC functions now use CDC pointers instead of
\r
169 HDCs. These changes improve the compatibility between Win32++ and MFC.
\r
170 * Enhanced the various GDI object classes, namely CBitmap, CBrush, CFont,
\r
171 CPalette, CPen and CRgn, and added CGDIObject. The library now standardises
\r
172 on using pointers to theses classes instead of raw GDI handles (like HPEN).
\r
173 These changes improve the compatibility between Win32++ and MFC.
\r
177 - Added CustomControl sample
\r
185 - Added CMetaFileDC
\r
189 - Added FromHandle. Several global functions. They return pointers for:
\r
198 - Added CDC::Destroy
\r
199 - Added CDC::GetDCBrushColor
\r
200 - Added CDC::SetDCBrushColor
\r
201 - Added CDC::SelectObject (several versions)
\r
202 - Added CDC::SelectPalete
\r
203 - Added CDC::SelectClipRgn
\r
204 - Added CDC::SelectStockObject
\r
205 - Added CDocker::GetActiveDocker
\r
206 - Added CDocker::SetCaptionColors
\r
207 - Added CTab::SetTabIcon
\r
208 - Added CWinApp::GetAccelerators
\r
209 - Added CWinApp::OnIdle
\r
210 - Added CWinApp::PreTranslateMessage
\r
211 - Added CWinException::GetError
\r
212 - Added CWnd::ChildWindowFromPoint
\r
213 - Added CWnd::WindowFromPoint
\r
214 - Modified LoadString now returns CString
\r
215 - Modified CBrush::CreatePatternBrush now accepts a CBitmap pointer
\r
216 - Modified CDC::BitBlt now accepts a CDC pointer
\r
217 - Modified CDC::CreateCompatibleDC now accepts a CDC pointer and attaches the DC
\r
218 - Modified CDC::CreateDC now attaches the DC
\r
219 - Modified CDC::CreateIC now attaches the DC
\r
220 - Modified CDC::CreateCompatibleBitmap now accepts a CDC pointer
\r
221 - Modified CDC::CreateDIBitmap now accepts a CDC pointer
\r
222 - Modified CDC::CreateDIBSection now accepts a CDC pointer
\r
223 - Modified CDC::StretchBlt now accepts a CDC pointer
\r
224 - Modified CDocker::IsChildOfDocker now accepts a CWnd pointer instead of HWND
\r
225 - Modified CDocker::IsRelated now accepts a CWnd pointer instead of HWND
\r
226 - Modified CWnd::CreateEx now accepts a CMenu pointer
\r
227 - Modified CWnd::GetAncestor now accepts a gaFlags parameter
\r
228 - Modified CWnd::GetFont now returns a CFont pointer
\r
229 - Modified CWnd::GetMenu now accepts a CMenu pointer
\r
230 - Modified CWnd::GetNextDlgGroupItem now accepts a CWnd pointer
\r
231 - Modified CWnd::GetNextDlgTabItem now accepts a CWnd pointer
\r
232 - Modified CWnd::GetSystemMenu now accepts a CMenu pointer
\r
233 - Modified CWnd::GetUpdateRgn now accepts a CRgn pointer
\r
234 - Modified CWnd::GetWindowDC now returns a CDC pointer
\r
235 - Modified CWnd::HiliteMenuItem now accepts a CMenu pointer
\r
236 - Modified CWnd::InvalidateRgn now accepts a CRgn pointer
\r
237 - Modified CWnd::OnEraseBkgnd now accepts a CDC pointer
\r
238 - Modified CWnd::RedrawWindow now accepts a CRgn pointer
\r
239 - Modified CWnd::ReleaseDC now accepts a CDC pointer
\r
240 - Modified CWnd::ScrollWindowEx now accepts a CRgn pointer
\r
241 - Modified CWnd::SetFont now accepts a CFont pointer
\r
242 - Modified CWnd::SetMenu now accepts a CMenu pointer
\r
243 - Modified CWnd::SetWindowRgn now accepts a CRgn pointer
\r
244 - Modified CResizer::AddChild now accepts a CWnd pointer
\r
245 - Removed CLoadString
\r
246 - Removed CDC::AttachBitmap
\r
247 - Removed CDC::AttachBrush
\r
248 - Removed CDC::AttachFont
\r
249 - Removed CDC::AttachPalette
\r
250 - Removed CDC::AttachPen
\r
251 - Removed CDC::DetachBitmap
\r
252 - Removed CDC::DetachBrush
\r
253 - Removed CDC::DetachFont
\r
254 - Removed CDC::DetachPalette
\r
255 - Removed CDC::DetachPen
\r
256 - Removed CTab::SetTabImage
\r
257 - Removed GetWindowType for all CWnd classes
\r
258 - Renamed CDocker::GetDockTopLevel to CDocker::GetTopmostDocker
\r
259 - Renamed CWnd::OnPaint to CWnd::OnDraw
\r
261 - Extended the help documentation to describe the new features.
\r
262 - Added an index to the help documentation.
\r
265 Incompatibilities with previous versions
\r
266 ----------------------------------------
\r
267 * The Win32++ now uses Run Time Type Information (RTTI). Older Microsoft
\r
268 compilers (Visual Studio 2003 and earlier) may need to enable the option to
\r
270 * LoadString now returns a CString.
\r
271 * CWnd::OnEraseBkgnd has changed. This function now uses a CDC pointer instead
\r
272 of a CDC reference. This change will need to be made for any function that
\r
273 overrides OnEraseBkgnd in order for it to get called.
\r
274 * CWnd::OnPaint has been removed and replaced with OnPaint. Code that previously
\r
275 overrode OnPaint will now need to override OnPaint instead. OnPaint uses a
\r
276 CDC pointer, not a CDC reference.
\r
277 * Changes made to the CDC class (and the addition of CClientDC, CWindowDC, CMemDC,
\r
278 etc.) are rather likely to affect existing code.
\r
279 - CDC functions now use a CDC pointer argument instead of a HDC.
\r
280 - CWnd functions like GetDC return a pointer to a CDC instead of a HDC.
\r
281 - use CClientDC for client window DCs instead of CDC MyDC = GetDC().
\r
282 - use CWindowDC for window DCs instead of CDC MyDC = GetWindowDC().
\r
283 - use CMemDC for memory DCs instead of CDC MyDC = CreateCompatibleDC(dc).
\r
284 - use CDC::FromHandle to conveniently convert a HDC provided to us by say
\r
285 CustomDraw to a CDC pointer.
\r
288 CClientDC dcClient(this); // Create a client window DC for this CWnd
\r
289 CMemDC dcMem(&dcClient); // Create a Memory DC from the Client DC.
\r
290 CMemDC.CreatePen(PS_SOLID, 1, RGB(255,0,0);
\r
291 CMemDC.MoveTo(0, 0);
\r
292 CMemDC.LineTo(50, 50);
\r
293 dcClient.BitBlt(0, 0, cx, cy, &CMemDC, 0, 0);
\r
297 This version has some additional bug fixes:
\r
298 * Fixed a thread safety issue in CWinApp::SetTLSIndex introduced in version 7.1.2.
\r
299 * Added CWinApp::PreTranslateMessage to simplify overloading CWinApp::MessageLoop.
\r
300 * The Explorer sample now ends without throwing an exeption on Win2000.
\r
301 * CResizer now preserves the tab order in a dialog.
\r
305 This version has some additional bug fixes:
\r
306 * CDC Attach and CDC(HDC hDC) now succeed when the HDC is already attached to another CDC.
\r
307 * Fixed a resource leak in CTab::Paint which affected CTab, CTabbedMDI and CDockContainer
\r
308 * Tabs without owner draw now display their icons.
\r
309 * A CDC can now be reused after its HDC has been detached.
\r
310 * CBrush::CBrush(COLORREF crColor) now works as expected.
\r
311 * CResize now supports controls that issue WM_HSCROLL and WM_VSCROLL messages.
\r
315 Version 7.1.1 has some minor bug fixes for 7.1, namely:
\r
316 * Corrected an incorrect dock size when docking a docker.
\r
317 * Corrected a drawing error in the tutorials and scribble sample which occurred when
\r
318 dragging the mouse over the view window with the left button down.
\r
319 * Added a missing typedef for BSTR2T.
\r
323 New Features and Enhancements
\r
324 -----------------------------
\r
325 * Added support for Task Dialogs
\r
326 * Added the following set of GDI classes: CBitmap, CBrush, CFont, CPalette,
\r
327 CPen and CRgn. These work in cooperation with the existing CDC class.
\r
328 * Added a set of new Text conversion functions based on classes.
\r
329 The complete set of functions are:
\r
330 A2BSTR ANSI to BSTR
\r
338 T2BSTR TCHAR to BSTR
\r
342 W2BSTR WCHAR to BSTR
\r
345 Refer to the help documentation for instructions on using these functions.
\r
346 * Added CLoadString (and LoadString) to return a string resource.
\r
347 * OnEraseBkgnd is now called automatically when a CWnd's background needs
\r
348 erasing. Return TRUE to prevent default erasure.
\r
349 * Scribble Tutorial now demonstrates the use of command line arguments
\r
350 * Enhanced CResizer.
\r
351 - The anchor points are now fixed instead of proportional
\r
352 - Scrollbars are now added when required.
\r
353 - Added the DialogResizing sample to demonstrate CResizer's new features.
\r
354 * Create now use a CWnd pointer instead of a HWND when specifying the
\r
356 * Dialogs and Property Sheets now use a CWnd pointer instead of a HWND
\r
357 when specifying the parent window.
\r
358 * CTab has been enhanced. The TCS_FIXEDWIDTH and TCS_OWNERDRAWFIXED styles
\r
360 * Extended the CSize, CPoint and CRect classes
\r
361 * Extended CMDIFrame and CMDIChild. CMDIChild::SetHandles is now used to set
\r
362 the MDI child's menu and accelerator table.
\r
363 * A docker can now be resized while docked using CDocker::SetDockSize.
\r
364 * Extended the "Using Win32++ section of the Win32++ help documentation.
\r
374 - Added CTaskDialog
\r
375 - Added CLoadString
\r
376 - Added LoadString (uses CLoadString, replaces CWnd::LoadString)
\r
377 - Added tStringStream typedef (a TCHAR stringstream)
\r
393 - Added CDC::AttachPalette
\r
394 - Added CDC::CreatePalette
\r
395 - Added CDC::CreateHalftonePalette
\r
396 - Added CDC::DetachPalette
\r
397 - Added CDC::GetBitmap
\r
398 - Added CDC::GetBitmapInfo
\r
399 - Added CDC::GetBrusg
\r
400 - Added CDC::GetBrushInfo
\r
401 - Added CDC::GetFont
\r
402 - Added CDC::GetFontInfo
\r
403 - Added CDC::GetPen
\r
404 - Added CDC::GetPenInfo
\r
405 - Added CDC::ExtSelectClipRgn
\r
406 - Added CDC::ExcludeClipRect
\r
407 - Added CDC::GetClipBox
\r
408 - Added CDC::GetClipRgn
\r
409 - Added CDC::GetRgn
\r
410 - Added CDC::IntersectClipRect
\r
411 - Added CDC::OffsetClipRgn
\r
412 - Added CDC::PtVisible
\r
413 - Added CDC::RectVisible
\r
414 - Added CDC::SelectClipRgn
\r
415 - Added CDialog::AttachItem
\r
416 - Added CDockContainer::SetActiveContainer
\r
417 - Added CDocker::Close
\r
418 - Added CDocker::SetCaptionHeight
\r
419 - Added CFrame::GetFrameAccel
\r
420 - Added CFrame::ShowMenu
\r
421 - Added CMDIChild::GetMDIFrame
\r
422 - Added CMDIChild::SetHandles
\r
423 - Added CMDIFrame::GetMDIClient
\r
424 - Added CMDIFrame::MDICascade
\r
425 - Added CMDIFrame::MDIIconArrange
\r
426 - Added CMDIFrame::MDIMaximize
\r
427 - Added CMDIFrame::MDINext
\r
428 - Added CMDIFrame::MDIPrev
\r
429 - Added CMDIFrame::MDIRestore
\r
430 - Added CMDIFrame::MDITile
\r
431 - Added CResizer::GetMaxRect
\r
432 - Added CResizer::GetMinRect
\r
433 - Added CResizer::HandleMessage
\r
434 - Added CTab::GetListMenu
\r
435 - Added CTab::SetFixedWidth
\r
436 - Added CTab::SetOwnerDraw
\r
437 - Added CTabbedMDI::GetListMenu
\r
438 - Added CWinApp::SetAccelerators
\r
439 - Added CWnd::BeginPaint
\r
440 - Added CWnd::ClientToScreen
\r
441 - Added CWnd::CheckRadioButton
\r
442 - Added CWnd::DlgDirList
\r
443 - Added CWnd::DlgDirListComboBox
\r
444 - Added CWnd::DlgDirSelectEx
\r
445 - Added CWnd::DlgDirSelectComboBoxEx
\r
446 - Added CWnd::DrawAnimatedRects
\r
447 - Added CWnd::DrawCaption
\r
448 - Added CWnd::EndPaint
\r
449 - Added CWnd::GetDesktopWindow
\r
450 - Added CWnd::GetNextDlgGroupItem
\r
451 - Added CWnd::GetNextDlgTabItem
\r
452 - Added CWnd::GetSystemMenu
\r
453 - Added CWnd::GetUpdateRect
\r
454 - Added CWnd::GetUpdateRgn
\r
455 - Added CWnd::HiliteMenuItem
\r
456 - Added CWnd::IsDialogMessage
\r
457 - Added CWnd::IsDlgButtonChecked
\r
458 - Added CWnd::MapWindowPoints
\r
459 - Added CWnd::OnEraseBkgnd
\r
460 - Added CWnd::Print
\r
461 - Added CWnd::ScreenToClient
\r
462 - Added CWnd::SendNotifyMessage
\r
463 - Modified CDialog now takes a CWnd pointer instead of HWND
\r
464 - Modified CResizer::AddChild now takes a CWnd reference
\r
465 - Modified CWnd::Create now takes a CWnd pointer instead of HWND
\r
466 - Modified CWnd::CreateEx now takes a CWnd pointer instead of HWND
\r
467 - Moved CWnd::LoadBitmap to LoadBitmap
\r
468 - Removed CDC::AttachClipRgn
\r
469 - Removed CDC::DetachClipRgn
\r
470 - Removed CMDIChild::SetChildMenu
\r
471 - Renamed CDocker::GetDockWidth to CDocker::GetDockSize
\r
472 - Renamed CDocker::SetDockWidth to CDocker::SetDockSize
\r
473 - Renamed CDC::AttachClipRegion to CDC::AttachClipRgn
\r
474 - Renamed CDC::DetachClipRegion to CDC::DetachClipRgn
\r
475 - Replaced CharToWide with A2W
\r
476 - Replaced CharToTChar with A2T
\r
477 - Replaced TCharToChar with T2A
\r
478 - Replaced TCharToWide with T2W
\r
479 - Replaced WideToChar with W2A
\r
480 - Replaced WideToTChar with W2T
\r
481 - Replaced CWnd::LoadString with CLoadString (and ::LoadString)
\r
482 - Added several functions to CPoint
\r
483 - Added several functions to CSize
\r
484 - Added many functions to CRect
\r
486 The problem with the previous the text functions
\r
487 ------------------------------------------------
\r
488 While the previous text conversion functions generally worked well, there were
\r
489 ambiguities about usage, and corner cases where they produced undesirable
\r
490 results. For example:
\r
492 // This worked well
\r
493 ExampleFunction(CharToTChar(pAnsi1));
\r
495 // But this failed to produce expected results
\r
496 ExampleFunction(CharToTChar(pAnsi1), CharToTChar(pAnsi2));
\r
499 // This worked as expected
\r
500 LPCTSTR pStr = CharToTChar(pAnsi1);
\r
502 // But this fails to work as expected
\r
503 LPCTSTR pStr1 = CharToTChar(pAnsi1);
\r
504 LPCTSTR pStr2 = CharToTChar(pAnsi2);
\r
506 The new text conversion functions (classes) resolve problem 1 and render all of
\r
507 problem 2's usage invalid (making usage less ambiguous).
\r
509 Refer to the "Text Conversions" topic in the "Using Win32++" section of the
\r
510 help documentation that ships with Win32++ for information on how to use the
\r
513 Incompatibilities with previous versions
\r
514 ----------------------------------------
\r
515 * The old text conversion functions have been replaced with a set of new functions
\r
516 which look and behave more like the functions used in MFC, ATL and WTL.
\r
517 * Windows, dialogs and property sheets now use a CWnd pointer instead of a HWND
\r
518 to specify the parent window.
\r
519 * CTab defaults to not using the CS_FIXEDWIDTH and TCS_OWNERDRAWFIXED styles.
\r
520 The SetFixedWidth and SetOwnerDraw functions can be used to change these
\r
522 * Users of Borland's C++ compiler version 5.5 will need to install the
\r
523 compiler's service pack 2 for stringsteam support.
\r
524 * MDI Children use SetHandles instead of SetChildMenu to set the menu. SetHandles
\r
525 also sets the MDI child's accelerator table (if any).
\r
526 * LoadString now returns a tString instead of a LPCTSTR.
\r
530 * Fix for a memory leak in CDC
\r
531 * Fix for accelerators in WinCE
\r
532 * Fix for menu check marks when themes are disabled
\r
533 * Fix for OnMessageReflect in dialogs
\r
537 * Supports the latest version of MinGW compiler
\r
538 * DialogProc now returns INT_PTR instead of BOOL
\r
539 * Fixed several x64 warnings
\r
540 * Fixed DragAcceptFiles error when WIN32_LEAN_AND_MEAN is defined
\r
541 * Added OnPaint to CDialog and CPropertyPage
\r
542 * Minor update to the documentation
\r
543 * Added targetver.h to samples
\r
544 * Supports VS2010's resource editor
\r
546 Incompatibilities with previous versions
\r
547 ----------------------------------------
\r
548 DialogProc now returns INT_PTR instead of BOOL. This change will be required
\r
549 in user code as well.
\r
555 New Features and Enhancements
\r
556 -----------------------------
\r
557 * The following function now return CWnd* instead of HWND:
\r
558 GetActiveWindow, GetAncestor, GetCapture, GetFocus, GetDlgItem, GetWindow,
\r
559 GetLastAtivePopup, GetParent, GetTopWindow, SetActiveWindow, SetCapture,
\r
560 SetFocus, and SetParent. This helps the framework to be more object
\r
561 orientated, by allowing the programmer to work more directly with CWnds.
\r
562 It also reduces the need to convert between CWnds and HWNDs in user code.
\r
563 If a CWnd object for the HWND doesn't already exist, Win32++ creates a
\r
564 temporary CWnd. The pointers returned by these functions should not be
\r
565 stored and used later, as they might not be valid then.
\r
566 * Added CThread class to simplify the task of using threads and creating
\r
567 windows in different threads. CThread can be used for both worker threads
\r
568 and GUI threads. Refer to the Thread and DirectX samples for examples of
\r
569 how to use CThread to create windows in a different thread. The DirectX
\r
570 sample also uses a customized message loop for the thread.
\r
571 * Added the following control wrappers: CAnimation, CComboBox, CComboBoxEx,
\r
572 CProgressBar, CScrollBar, CSlider, and CSpinButton.
\r
573 * Renamed CToolbar to CToolBar, CStatusbar to CStatusBar, CRebar to CReBar
\r
574 and CMenubar to CMenuBar. This matches the MFC names, and is also more
\r
575 consistent with Win32++'s naming conventions.
\r
576 * Added support for re-sizable dialogs. The CResizer class has been added
\r
577 to dialog.h to facilitate dialog resizing. Refer to the forms sample for
\r
578 an example of how to put CResizer to use.
\r
579 * Added IPv6 support to CSocket. The network samples have been updated to
\r
580 take advantage of IPv6 support. IP version 6 is supported on Vista
\r
581 operating systems and newer.
\r
582 * Added Shared_Ptr class. Note that a "shared_ptr" will be available for the
\r
583 updated C++ standard. It is already available with some modern compilers,
\r
584 and also for users of the Boost library. The "Shared_Ptr" class is intended
\r
585 as an alternative for those users who would like to use a "shared_ptr", but
\r
586 don't have access to one yet. Unlike auto-ptr's, shared_ptr's can be used
\r
587 to safely store pointers in vectors and other STL containers.
\r
588 * Extended the CToolbar class.
\r
589 * Added the GDIPlus sample to demonstrate how to use the GDIPlus library
\r
590 provided with modern Windows operating systems (XP and above).
\r
591 * Win32++ can now be run from inside a DLL. The "DLL" sample demonstrates how to
\r
592 put a Win32++ dialog in a dll, and run it from a test program.
\r
593 * Dialogs and Property Sheets now use DWLP_MSGRESULT to automatically handle the
\r
594 value returned by notifications in their message handling. This allows a
\r
595 dialog's controls to use custom draw.
\r
596 * Improved the appearance of frames without themes. The frame sample demonstrates
\r
597 how override CMainFrame::OnCreate to customize the frame's appearance.
\r
598 * Asserts are used more liberally to test for programming errors. Any message
\r
599 sent to a non-existent window, for example, will now assert. More asserts
\r
600 are intended to help users write code that is more robust. Note that asserts
\r
601 are only evaluated in Debug mode, and have no effect in Release mode.
\r
602 * Exceptions are thrown less often. They are now thrown to indicate a critical
\r
603 problem, outside the programmer's control. Throwing fewer exceptions results
\r
604 in slightly smaller executables, and gives users more flexibility and
\r
605 control over their own exception methodology. They are thrown when:
\r
606 - a window creation fails.
\r
607 - a critical dll cannot be loaded.
\r
608 - a window message cannot be routed to a CWnd object.
\r
609 - an attempt to read from or write to the registry fails unexpectedly.
\r
610 * Vectors are now used as a replacement for all dynamically allocated arrays,
\r
611 ensuring the arrays are automatically deleted when they go out of scope.
\r
612 Creating an array with "new" runs the risk of causing a memory leak,
\r
613 particularly when an exception is thrown. Using a vector to create the
\r
614 array guarantees that it will be deleted properly under all circumstances.
\r
615 * The OnPaint function now uses a CDC reference as its argument instead of a
\r
616 HDC. This simplifies the task of using a CDC when overriding OnPaint.
\r
617 * Extended the help documentation.
\r
624 Added CProgressBar
\r
631 Updated CSocket to support IPv6
\r
632 Added CMDIChild::MDIActivate
\r
633 Added CMDIChild::MDIDestroy
\r
634 Added CMDIChild::MDIMaximize
\r
635 Added CMDIChild::Restore
\r
636 Added CPropertySheet::SetIcon
\r
637 Added CPropertyPage::SetWizardButtons
\r
638 Added CPropertyPage::QuerySiblings
\r
639 Added CRebar::SizeToRect
\r
640 Added CSocket::IsIPV6Supported
\r
641 Added CSocket::FreeAddrInfo
\r
642 Added CSocket::GetAddrInfo
\r
643 Added CSocket::GetLastError
\r
644 Added CTabbedMDI::SetActiveMDITab
\r
645 Added CToolBar::AddButtons
\r
646 Added CToolBar::AddString
\r
647 Added CToolBar::AutoSize
\r
648 Added CToolBar::CheckButton
\r
649 Added CToolBar::DeleteButton
\r
650 Added CToolBar::GetButton
\r
651 Added CToolBar::GetButtonSize
\r
652 Added CToolBar::GetButtonText
\r
653 Added CToolBar::GetDisabledImageList
\r
654 Added CToolBar::GetHotItem
\r
655 Added CToolBar::GetImageList
\r
656 Added CToolBar::GetPadding
\r
657 Added CToolBar::GetRect
\r
658 Added CToolBar::GetRows
\r
659 Added CToolBar::GetTextRows
\r
660 Added CToolBar::GetToolTips
\r
661 Added CToolBar::HideButton
\r
662 Added CToolBar::Indeterminate
\r
663 Added CToolBar::InsertButton
\r
664 Added CToolBar::IsButtonHidden
\r
665 Added CToolBar::IsButtonHighlighted
\r
666 Added CToolBar::IsButtonIndeterminate
\r
667 Added CToolBar::IsButtonPressed
\r
668 Added CToolBar::MapAccelerator
\r
669 Added CToolBar::MarkButton
\r
670 Added CToolBar::MoveButton
\r
671 Added CToolBar::PressButton
\r
672 Added CToolBar::SaveRestore
\r
673 Added CToolBar::SetDisabledImageList
\r
674 Added CToolBar::SetDrawTextFlags
\r
675 Added CToolBar::SetExtendedStyle
\r
676 Added CToolBar::SetHotImageList
\r
677 Added CToolBar::SetHotItem
\r
678 Added CToolBar::SetImageList
\r
679 Added CToolBar::SetIndent
\r
680 Added CToolBar::SetMaxTextRows
\r
681 Added CToolBar::SetPadding
\r
682 Added CToolBar::SetToolTips
\r
683 Added CWinException::what
\r
684 Added CWnd::DragAcceptFiles
\r
685 Added CWnd::GetActiveWindow
\r
686 Added CWnd::GetCapture
\r
687 Added CWnd::GetFocus
\r
688 Added CWnd::GetFont
\r
689 Added CWnd::GetIcon
\r
690 Added CWnd::GetLastActivePopup
\r
691 Added CWnd::GetTopWindow
\r
692 Added CWnd::GetWindowTextLength
\r
693 Added CWnd::OpenIcon
\r
694 Added CWnd::SetFont
\r
695 Added CWnd::SetIcon
\r
696 Added CWnd::SetWindowTheme
\r
697 Added CWnd::ShowOwnedPopups
\r
698 Added CWnd::ShowWindowAsync
\r
699 Added CWnd::WindowFromDC
\r
700 Added ::IsAeroThemed
\r
701 Modified CPropertyPage::Apply now returns int
\r
702 Modified CPropertyPage::OnKillActive now returns BOOL
\r
703 Modified CPropertyPage::OnOK now returns int
\r
704 Modified CPropertyPage::OnSetActive now returns int
\r
705 Modified CPropertyPage::OnWizardBack now returns int
\r
706 Modified CPropertyPage::OnFinish now returns BOOL
\r
707 Modified CPropertyPage::OnWizardBack now returns int
\r
708 Modified CPropertyPage::OnWizardFinish now returns BOOL
\r
709 Modified CPropertyPage::OnWizardNext now returns int
\r
710 Modified CSocket::Bind now uses TCHAR instead of char
\r
711 Modified CSocket::Connect now uses TCHAR instead of char
\r
712 Modified CSocket::Receive now uses TCHAR instead of char
\r
713 Modified CSocket::ReceiveFrom now uses TCHAR instead of char
\r
714 Modified CSocket::Send now uses TCHAR instead of char
\r
715 Modified CSocket::SentTo now uses TCHAR instead of char
\r
716 Modified CWinException::what now outputs text to debugger
\r
717 Modified CWnd::OnPaint now takes a CDC& argument instead of HDC
\r
718 Renamed CMenubar to CMenuBar
\r
719 Renamed CRebar to CReBar
\r
720 Renamed CStatusbar to CStatusBar
\r
721 Renamed CToolbar to CToolBar
\r
722 Renamed RebarTheme to ReBarTheme
\r
723 Renamed ToolbarTheme to ToolBarTheme
\r
724 Renamed CToolBar::AddToolbarButton to CToolBar::AddButton
\r
725 Moved CWnd::CharToTChar to ::CharToTChar
\r
726 Moved CWnd::CharToWide to ::CharToWide
\r
727 Moved CWnd::TCharToChar to ::TCharToChar
\r
728 Moved CWnd::TCharToWide to ::TCharToWide
\r
729 Moved CWnd::WideToChar to ::WideToChar
\r
730 Moved CWnd::WideToTChar to ::WideToTChar
\r
731 Removed CWinException::MessageBox
\r
732 Removed CPropertySheet::QuerySiblings
\r
734 Added DS_NO_CLOSE style to suppress the closing of docked dockers
\r
735 Added DS_FIXED_RESIZE style to perform a fixed (not proportional) resize
\r
737 Added WM_PAINT handler to CDialog::DialogProcDefault
\r
738 Added WM_PAINT handler to CPropertyPage::DialogProcDefault
\r
740 Added GDIPlus sample
\r
741 Updated Network samples
\r
742 Updated FormDemo sample
\r
744 Incompatibilities with previous versions
\r
745 ----------------------------------------
\r
746 * The OnPaint function definition has changed to:
\r
747 virtual void OnPaint(CDC& dc);
\r
748 The older OnPaint function will be ignored.
\r
749 * The stricter testing with asserts might reveal previously hidden errors in
\r
751 * Some CSocket functions take TCHAR as an argument instead of char.
\r
752 * CFrame::LoadRegistrySettings, CFrame::LoadRegistryMRUSettings and
\r
753 CFrame::SaveRegistrySettings return BOOL.
\r
754 * CPropertySheet.m_PSH is now private. Use SetIcon to set the icon.
\r
755 * CPropertyPage change the return types of several functions.
\r
756 * Replace all instances of "Menubar" with "MenuBar"
\r
757 * Replace all instances of "Rebar" with "ReBar"
\r
758 * Replace all instances of "Statusbar" with "StatusBar"
\r
759 * Replace all instances of "Toolbar" with "ToolBar"
\r
760 * The following functions now return a CWnd pointer instead of a HWND:
\r
761 GetActiveWindow, GetAncestor, GetCapture, GetFocus, GetDlgItem, GetWindow,
\r
762 GetLastAtivePopup, GetParent, GetTopWindow, SetActiveWindow, SetCapture,
\r
763 SetFocus, and SetParent.
\r
769 New Features and Enhancements
\r
770 -----------------------------
\r
771 * Added a WebBrowser class called CWebBrowser. This class provides a web
\r
772 browser in a window. This class can be used as a view window anywhere
\r
773 view windows are used, such as in frames, dockers, MDI Children,
\r
774 Tabbed MDIs etc. It has no dependence on ATL, greatly simplifying the
\r
775 approach to adding a browser window to any application. It can be compiled
\r
776 by any of the supported compilers including Dev-C++, MinGW and the Borland
\r
777 compilers as well as the compilers from Microsoft.
\r
778 * Added an ActiveX host class called CAXWindow.
\r
779 * The CTab, CMDITab, CDocker and CDockContainer classes are now flicker free,
\r
780 providing a more professional look during resizing and docker moving.
\r
781 * Improved the dock targeting and dock hinting.
\r
782 * Introduced a new set of text conversion functions to convert between Ansi,
\r
783 Unicode and Wide characters.
\r
784 * CWnd objects can now report their type with GetWindowType.
\r
785 * Modified the Browser sample to use the new CWebBrowser class. It also
\r
786 demonstrates how to use an event sink to get notification of browser events.
\r
787 * Added a Tray sample which demonstrates how to create an application
\r
788 which can be minimised to the system tray, and restored.
\r
789 * The visual editor that ships with VS2008 and VS2010 can now be used to
\r
790 modify the resource files (Resource.rc and resource.h) without mangling them.
\r
796 Added CWnd::CharToWide
\r
797 Added CWnd::WideToChar
\r
798 Added CWnd::TCharToWide
\r
799 Added CWnd::WideToTChar
\r
800 Added CWnd::CharToTChar
\r
801 Added CWnd::TCharToChar
\r
802 Added CWnd::GetClassName
\r
803 Added CWnd::GetDlgItemText
\r
804 Added CWnd::GetWindowText
\r
805 Added CWnd::GetWindowType
\r
806 Added CWnd::KillTimer
\r
807 Added CWnd::SetTimer
\r
808 Added GetSizeofMenuItemInfo
\r
809 Removed CharToTString
\r
810 Removed TCharToString
\r
811 Removed TCharToWide
\r
812 Removed CWnd::GetWindowString
\r
813 Removed CWnd::GetClassString
\r
814 Removed CWnd::GetDlgItemString
\r
815 Removed CWnd::IsContainer
\r
816 Removed CWnd::IsDocker
\r
817 Removed CWnd::IsFrame
\r
818 Removed CWnd::IsMenubar
\r
819 Removed CWnd::IsMDIChild
\r
820 Removed CWnd::IsMDIFrame
\r
821 Removed CWnd::IsRebar
\r
822 Removed CWnd::IsStatusbar
\r
823 Removed CWnd::IsTab
\r
824 Removed CWnd::IsTabbedMDI
\r
825 Removed CWnd::IsToolbar
\r
826 Renamed CContainer to CDockContainer
\r
828 Modified Browser Sample
\r
829 Added MDIFrameSplitter demo
\r
833 Incompatibilities with previous versions
\r
834 ----------------------------------------
\r
835 * CContainer has been renamed to CDockContainer
\r
836 * The global string functions CharToTString, TCharToString and TCharToWide have
\r
837 been replaced with CWnd::CharToWide, CWnd::WideToChar, CWnd::TCharToWide,
\r
838 CWnd::WideToTChar, CWnd::CharToTChar and CWnd::TCharToChar.
\r
846 * Support has been added for the Windows Ribbon Framework available on
\r
847 Windows 7 operating systems. The RibbonFrame and RibbonSimple samples
\r
848 demonstrates how to implement the ribbon. RibbonFrame reverts back to
\r
849 using the traditional Toolbar and Menubar if the operating system doesn't
\r
850 support the ribbon framework.
\r
852 * Helper classes have been added for the standard controls, namely the Button,
\r
853 Edit, Listbox, and Static controls.
\r
855 * Dockers can now be hidden and unhidden. Refer to the Splitter sample for a
\r
856 demonstration of this feature.
\r
858 * Modal dialogs now support pretranslated messages.
\r
863 Added CButton class
\r
865 Added CListBox class
\r
866 Added CRibbon class
\r
867 Added CRibbonFrame class
\r
868 Added CStatic class
\r
869 Removed CSplitter class
\r
871 Added CDocker::Dock
\r
872 Added CDocker::DockInContainer
\r
873 Added CDocker::Hide
\r
874 Added CDocker::Undock
\r
875 Added CDocker::UndockContainer
\r
876 Added CFrame::GetRebarTheme
\r
877 Added CFrame::GetToolbarTheme
\r
878 Added CFrame::GetMRUEntries
\r
879 Renamed ThemeMenu to MenuTheme
\r
880 Renamed ThemeRebar to RebarTheme
\r
881 Renamed ThemeToolbar to ToolbarTheme
\r
882 Renamed CFrame::GetThemeMenu to CFrame::GetMenuTheme
\r
884 Added UWM_GETMENUTHEME message
\r
885 Added UWM_GETREBARTHEME message
\r
886 Added UWM_GETTOOLBARTHEME message
\r
888 Added RibbonFrame sample
\r
889 Added RibbonSimple sample
\r
891 Added 'Compile VS2005 Express' tool
\r
892 Added 'Compile VS2008 Express' tool
\r
893 Added 'Compile VS2010 Express' tool
\r
895 Added PreTranslate Message support for modal dialogs
\r
899 - Fixed TCharToString
\r
900 - Dockers can now be used as the view for CMDIChild
\r
905 - Fixed dialog destruction
\r
906 - Fixed thread safety when creating multi-threaded windows simultaneously
\r
907 - Fixed TintBitmap for 16 bit colours
\r
908 - The close button on docked dockers now works.
\r
909 - Fixed PreTranslateMessage
\r
913 * The directory layout of Win32++ has changed. It now contains the following
\r
915 help The help for Win32++
\r
916 include The Win32++ library for typical use
\r
917 lib The static library files when they are build
\r
918 Library Projects The project files used to build the static library
\r
919 new projects A set of projects to be used in your new projects
\r
920 src The Win32++ library for building the static library
\r
921 tests A directory which contains the output of some tools
\r
922 tools A set of useful batch files for Win32++
\r
924 * The Win32++ include directory is specified within the project rather than
\r
925 hard coded into the source files. To specify a different location for the
\r
926 Win32++ files in a project, specify the "Additional Include Directories" for
\r
927 both "C/C++" and "Resources".
\r
929 * The projects now provide the option of compiling with a static library or
\r
930 directly from the file in Win32++\include. To build the static libraries,
\r
933 * A set of projects have been supplied to build the Win32++ into a static
\r
934 library. These projects are contained within the Win32++\Library Projects
\r
935 folder. The lib file created is placed within the lib directory.
\r
937 * The projects are now configured to take advantage of precompiled headers.
\r
939 * A set of tools is now provided in the tools folder. They include a set of
\r
940 batch files for compiling the examples and batch files to "clean" them.
\r
942 * The CDC class has been extended. Several functions have been added, and
\r
943 CDC::GetDC has been renamed to CDC::GetHDC.
\r
945 * Support has been added for Right to Left languages which include Hebrew and
\r
946 Arabic. The CFrame and CDocker classes now honour the WS_EX_LAYOUTRTL
\r
947 extended style used by these languages. To take advantage of this feature,
\r
948 use PreCreate to set this extended when using CFrame, CMDIFrame, CTab,
\r
949 CTabbedMDI, and CDocker.
\r
951 * OnInitialUpdate is now called after Attach or AttachDlgItem.
\r
953 * IsChild now takes a HWND argument.
\r
955 * Win32++ is now available as a single download, rather than a collection of
\r
958 * Each program example now has a Readme.txt file which describes what it does,
\r
959 and the features it demonstrates.
\r
966 * The number of arguments have changed for WndProc and WndProcDefault.
\r
967 - The HWND parameter has been dropped in both of these functions. It's
\r
968 presence was redundant and possibly confusing. Users will need to modify
\r
969 their WndProc and WndProc functions accordingly. If needed, the m_hWnd
\r
970 member variable can be used in place of hwnd within the WndProc function.
\r
971 * The number of arguments have changed for DialogProc and DialogProcDefault.
\r
972 - The HWND parameter has been dropped in both of these functions. It's
\r
973 presence was redundant and possibly confusing. Users will need to modify
\r
974 their WndProc and WndProc functions accordingly. If needed, the m_hWnd
\r
975 member variable can be used in place of hwnd in the WndProc function.
\r
976 * Enhancements to docking, containers and tabs.
\r
977 - By default the dockers are immediately resized while the splitter bar is
\r
978 being dragged. To defer resizing until the splitter bar is released, use
\r
979 SetDragAutoResize(FALSE).
\r
980 - The close and list buttons now indicate when they are hot and pressed.
\r
981 - Added SetTabText, SetTabImage and SwapTabs to the CTab class.
\r
982 - Minor improvements to the painting of tabs, containers and dockers.
\r
983 * Enhancements to GDI graphics support.
\r
984 - The CDC class has been extended. It now includes wrapper functions for
\r
985 the Device Context related functions.
\r
986 - Added the CBitmapInfoPtr class. This simplifies the use of the BITMAPINFO
\r
987 structure in functions like GetDIBits and SetDIBits.
\r
988 - Added GrayScaleBitmap function to gdi.h. It converts a colored bitmap to
\r
990 * Automated menu updating.
\r
991 - When a menu is about to be displayed, OnUpdateMenu is called to provide
\r
992 an opportunity to modify the check state of the menu items.
\r
993 * Enhancements to frames
\r
994 - The style of the rebarband is now specified in AddToolbarBand. This
\r
995 facilities saving and restoring toolbar settings from the registry (as
\r
996 demonstrated in the Themes example.)
\r
997 - The Frame's ShowToolbar and ShowStatusbar states are now saved in the
\r
999 * Modification to CRect class
\r
1000 - The various function now use references instead of naked pointers.
\r
1001 * Updated the Themes example.
\r
1002 - Added check boxes for the various rebar theme option
\r
1003 - Added Hide/Show option for the additional toolbars
\r
1004 - Save/Load the theme options in the registry
\r
1005 - Save/Load the rebar band positions and styles in the registry
\r
1006 * Replaced the Form example with the DocViewForm example.
\r
1007 - This example now demonstrates a form using a Doc/View architecture, much
\r
1008 like the traditional Doc/View of MFC.
\r
1009 - Added OnUpdateMenu handling.
\r
1010 * Updated the FastGDI example.
\r
1011 - Added gray-scale transformation
\r
1012 - Added file save.
\r
1013 - Added Scroll bars.
\r
1014 * Updated the picture example.
\r
1015 - Added Scroll bars.
\r
1016 * Updated the DockContainer and DockTabbedMDI examples
\r
1017 - These examples now demonstrate how to theme a container's toolbar.
\r
1020 Incompatibilities with previous versions
\r
1021 ----------------------------------------
\r
1022 - WndProc now takes 3 arguments, not 4:
\r
1023 WndProc(UINT uMsg, WPARAM wParam, LPARAM lParam);
\r
1024 - WndProcDefault now takes 3 arguments, not 4:
\r
1025 WndProcDefault(UINT uMsg, WPARAM wParam, LPARAM lParam);
\r
1026 - DialogProc now takes 3 arguements, not 4:
\r
1027 DialogProc(UINT uMsg, WPARAM wParam, LPARAM lParam);
\r
1028 - DialogProcDefault now takes 3 arguements, not 4:
\r
1029 DialogProcDefault(UINT uMsg, WPARAM wParam, LPARAM lParam);
\r
1030 - CFrame::AddToolbarBand now requires three arguements
\r
1031 - The various CRect functions use references to RECT rather than pointers
\r
1032 - CWnd::IsVisable has been renamed to CWnd::IsWindowVisible
\r
1033 - CWnd::IsEnabled has been renamed to CWnd::IsWindowEnabled
\r
1039 * Added StaticLibrary example
\r
1040 This example has the code to build Win32++ into a a static library, and also
\r
1041 demonstrates the use of Precompiled Headers. More experienced users might
\r
1042 prefer this approach as it provides for much faster compile times.
\r
1043 * Added CTab class.
\r
1044 This class is used by CContainer and CTabbedMDI, and can also be used as a
\r
1046 * Added TabDemo example.
\r
1047 Refer to the TabDemo example for a demonstration of how CTab class is
\r
1048 used as a view window in a frame. TabDialogDemo also uses CTab.
\r
1049 * Added CTabbedMDI class.
\r
1050 A TabbedMDI can be used as a view window for a Frame or a Dockable. As the
\r
1051 name suggests, it provides tabs for a MDI window.
\r
1052 * Added TabbedMDI example within docking.
\r
1053 Refer to the docking TabbedMDI example for a demonstration of how CTabbedMDI
\r
1055 * Enhancements to docking.
\r
1056 - Dockers can now be docked into, and undocked from all other dockers,
\r
1057 including those that are undocked.
\r
1058 - Containers can also be docked into and undocked all from containers,
\r
1059 including those that are undocked.
\r
1060 - Containers can display their tabs at the top or bottom of the window.
\r
1061 - Containers can also display a tab list button.
\r
1062 - Docker and container objects are destroyed when their window is closed.
\r
1063 - CContainer::SetupToolbar can be used to specify the toolbar's resource IDs.
\r
1064 - Dockers and containers can save their layout in and load their layout from
\r
1066 * Improvements to toolbars
\r
1067 - Resource IDs should be specified in SetupToolbar, rather than CMainFrame's
\r
1069 - Other configurations for the toolbar such as disabled buttons and alternate
\r
1070 bitmaps should be specified in SetupToolbar, rather than in OnCreate.
\r
1071 - Configuration of additional toolbars if any should also be done in
\r
1072 SetupToolbar. Refer to the Themes example for a demonstration of this.
\r
1073 - CToolbar now holds the vector of Resource IDs, which can be retrieved
\r
1074 with the GetToolbarData function. There is no need to specify a vector
\r
1075 when adding additional toolbars.
\r
1076 - There is now no need to specify the number of toolbar buttons in the
\r
1077 AddBitmap, ReplaceBitmap, SetBitmap and SetImages functions.
\r
1078 - The AddToolbarButton can now add a toolbar button which is initially
\r
1080 - There is no need to call SetButtons when adding additional toolbars.
\r
1081 - Tooltips for all toolbars in the rebar are now displayed.
\r
1082 * MIN and MAX macros have been defined and can be used in place of min and max.
\r
1083 This avoids incompatibilities between the way different compliers support
\r
1084 these macros. It also avoids clashes between the macro definitions of
\r
1085 min and max, and the STL definitions of min and max.
\r
1090 Added CTabbedMDI class
\r
1091 Added TabDemo example
\r
1092 Added Docking TabbedMDI example
\r
1093 Added CFrame::SetupToolbar
\r
1094 Added CFrame::m_bUseToolbar
\r
1095 Added CContainer::SetupToolbar
\r
1096 Added CDocker::GetDockTopLevel
\r
1097 Added CDocker::GetContainer
\r
1098 Added CDocker::GetTabbedMDI
\r
1099 Added CDocker::IsRelated
\r
1100 Added CDocker::LoadRegistrySettings
\r
1101 Added CDocker::NewDockerFromID
\r
1102 Added CDocker::SaveRegistrySettings
\r
1103 Added CToolbar::GetToolbarData
\r
1104 Added CWnd::GetClassString
\r
1105 Added CWnd::IsFrame
\r
1106 Added CWnd::IsMenubar
\r
1107 Added CWnd::IsRebar
\r
1108 Added CWnd::IsTabbedMDI
\r
1109 Added CWnd::IsToolbar
\r
1110 Changed CFrame::SetToolbarImages
\r
1111 Changed CToolbar::SetImages
\r
1112 Changed CToolbar::SetBitmap
\r
1113 Changed CToolbar::AddBitmap
\r
1114 Changed CToolbar::ReplaceBitmap
\r
1115 Renamed CDockable to CDocker
\r
1116 Renamed CDocker::CheckDockables to CDocker::VerifyDockers
\r
1117 Renamed CFrame::OnFrameDrawItem to CFrame::OnDrawItem
\r
1118 Renamed CFrame::OnFrameExitMenuLoop to CFrame::OnExitMenuLoop
\r
1119 Renamed CFrame::OnFrameInitMenuPopup to CFrame::OnInitMenuPopup
\r
1120 Renamed CFrame::OnFrameMeasureItem to CFrame::OnMeasureItem
\r
1121 Renamed CFrame::OnFrameClose to CFrame::OnClose
\r
1122 Renamed CFrame::OnFrameNotify to CFrame::OnNotify
\r
1123 Renamed CFrame::OnFrameSetFocus to CFrame::OnSetFocus
\r
1124 Renamed CFrame::OnFrameSysColorChange to CFrame::OnSysColorChange
\r
1125 Renamed CFrame::OnFrameTimer to CFrame::OnTimer
\r
1126 Removed OnFrameCommand
\r
1128 Incompatiblities with previous versions
\r
1129 ---------------------------------------
\r
1130 - Many of the functions associated with adding toolbars to frames have changed.
\r
1131 CFrame::SetupToolbar should be overridden to perform toolbar configuration.
\r
1132 Refer to the Themes example for a demonstration of how to add multiple toolbars
\r
1134 - The renaming of the CFrame::OnXXXX may affect overloading. Calling the base
\r
1135 function may now be required particularly for CFrame::OnNotify.
\r
1136 - The OnCommand handlers for OnViewStatusbar and OnViewToolbar have been removed
\r
1137 from CFrame, and should be added to CMainFrame::OnCommand if required.
\r
1138 - CDocker has been renamed to CDocker
\r
1139 - dockable.h has been renamed to docking.h
\r
1143 This release has the following bug fixes:
\r
1144 - Assertions in CContainer reported by VS2005(express) and VS2008(express)
\r
1145 - Definition of OPENFILENAME_SIZE_VERSION_400 added for VS6
\r
1153 - Added tabbed docking container with optional toolbar
\r
1154 - Added close button to the caption of docked windows
\r
1155 - Added 'outer' docking ie. docking at the side of the frame rather
\r
1156 than inside another Docker.
\r
1157 - Added a second docking example demonstrating containers
\r
1158 - Added save/restore dock layout to docking examples
\r
1159 - Added Close All Dockables and Default Dock Layout to docking examples
\r
1160 - Added Win98 and WinME support for docking.
\r
1161 * Added Region support to CDC class.
\r
1162 * Notepad example enhancements:
\r
1163 - Now capable of handling Unicode text
\r
1164 * Themes example now demonstrates a ComboBoxEx control in its toolbar
\r
1169 Various fixes to docking, including:
\r
1170 - Fixed Z order of undocked windows
\r
1171 - Fixed focus for child windows
\r
1172 - Improved undocking
\r
1174 - Better sizing of docked windows
\r
1176 Incompatibilities with previous versions
\r
1177 ----------------------------------------
\r
1178 * CWnd::m_hWndParent has been removed. Use GetParent() in its place.
\r
1179 * Some functions have been added to CWnd which have the same name as their
\r
1180 Win32 counterparts. Prefix functions with the global scope specifier '::'
\r
1181 to use the original Win32 API function instead of the Win32++ version.
\r
1182 * CSplitter has been superseded by CDocker. Use a CDocker with the
\r
1183 DS_NO_UNDOCK and DS_NO_CAPTION styles to duplicate the behaviour of
\r
1184 CSplitter. CSplitter will be retained for backwards compatibility, as
\r
1185 well as for those who require its 'immediate' mode.
\r
1187 More About Docking Containers
\r
1188 -----------------------------
\r
1189 A container can be used is a view window for a frame, MDI child, dockable etc.
\r
1190 It has a tab control, and is capable of containing and displaying other
\r
1191 containers. Each container will in turn have a view window of its own. The view
\r
1192 for each container as well as it's toolbar (if any) is displayed in the tab's
\r
1193 page. When used as the view window of a dockable, the container also permits
\r
1194 docking and undocking of it's containers.
\r
1197 * Any CWnd object inherited from CContainer is capable of containing other CWnd
\r
1198 objects inherrited from CContainer. There is no theoretical limit as to the
\r
1199 number of containers that can be contained.
\r
1200 * A child container (a container contained within another) can not in turn
\r
1201 contain other containers.
\r
1202 * Containers have a View window, just like Frames, MDI children and dockables.
\r
1203 * Containers can set an icon and text for the tab, as well as text for the
\r
1205 * Containers can optionally include a toolbar.
\r
1206 * When a container contains other containers, each container's view is displayed
\r
1207 in a separate tab.
\r
1208 * When a container is the view window for a dockable, any container children
\r
1209 can be individually undocked from their parent container.
\r
1210 * When used a the view for a docker, a container with child containers can be
\r
1211 undocked as a group.
\r
1212 * An undocked container group (container with children) can be docked as a
\r
1213 group inside another docked container.
\r
1221 * Added support for docking. See below for more information on Docking
\r
1222 - Note: CDocker is now recommended over CSplitter for splitter apps.
\r
1223 * Added the Fast GDI demo. This demonstrates the use of the TintBitmap function.
\r
1224 * MDI child windows now require a view window. The use of a view window is
\r
1225 now the same for Frames, MDI children, and dockables. The MDI demo example
\r
1226 has been extended to include ListView and TreeView views.
\r
1227 * Added message translation. This allows modeless dialogs and propertysheets
\r
1228 to process the tab (and other) keys.
\r
1229 * Added a CWnd::Destroy function. This returns a CWnd back to its default
\r
1230 state ready to be reused.
\r
1231 * SetView can now be used to change the frame's view from one CWnd to
\r
1233 * The Frame now stores which child window had focus before it is de-activated,
\r
1234 and returns focus to this child when the frame application is reactivated.
\r
1239 * CFrame now supports Extra Large fonts in the menu and status bar. Also, font
\r
1240 size can be changed while the application is running.
\r
1241 * 16Bit colours (and grey-scale) are now rendered properly
\r
1242 * Tabbing now works for modeless dialogs and property sheets
\r
1243 (uses PreTranslateMessage).
\r
1246 Incompatibilities with previous versions
\r
1247 ----------------------------------------
\r
1248 * MDI Child windows now require a view. Refer to the MDI Demo example for an
\r
1249 example of how to add views to a MDI child.
\r
1250 * Some functions have been added to CWnd which have the same name as their
\r
1251 Win32 counterparts. Prefix functions with the global scope specifier '::'
\r
1252 to use the original Win32 API function instead of the Win32++ version.
\r
1255 More About Docking
\r
1256 ------------------
\r
1257 * Any CWnd object inherited from CDocker is capable of docking other CWnd
\r
1258 objects inherrited from CDocker.
\r
1259 * Dockables can be docked in any of the 4 sides. Any number of windows can be
\r
1261 * A dockable could be docked inside another dockable which in turn is docked
\r
1262 inside another. There is no theoretical limit as to depth of dockables
\r
1264 * Dockables have a View window, just like the Frame, and MDI children.
\r
1265 * Dockables are separated by a movable splitter bar.
\r
1266 * Dockables use a modern style of dock targeting and dock hinting (the same
\r
1267 as Visual Studio 2005 and 2008).
\r
1268 * Dockables can have styles including:
\r
1271 - DS_DOCKED_RIGHT
\r
1273 - DS_DOCKED_BOTTOM
\r
1274 - DS_NODOCKCHILD_LEFT
\r
1275 - DS_NODOCKCHILD_RIGHT
\r
1276 - DS_NODOCKCHILD_TOP
\r
1277 - DS_NODOCKCHILD_BOTTOM
\r
1281 * CDocker is now the recommended alternative to CSplitter (being much simpler
\r
1282 to implement - see the example below). The DS_NO_CAPTION and DS_NO_UNDOCK
\r
1283 styles should be specified if docking and undocking are not required.
\r
1285 Example of how to dock 8 dockables inside a dockable view:
\r
1286 ----------------------------------------------------------
\r
1287 void CMainFrame::OnInitialUpdate()
\r
1289 // CTextDockable in inherited from CDocker
\r
1290 CDocker* pDockLeft = m_DockView.AddDockedChild(new CTextDockable, DS_DOCKED_LEFT, 100);
\r
1291 CDocker* pDockRight = m_DockView.AddDockedChild(new CTextDockable, DS_DOCKED_RIGHT, 100);
\r
1292 CDocker* pDockTop = m_DockView.AddDockedChild(new CTextDockable, DS_DOCKED_TOP, 100);
\r
1293 CDocker* pDockBottom = m_DockView.AddDockedChild(new CTextDockable, DS_DOCKED_BOTTOM, 100);
\r
1295 // Dock 4 dockables inside other dockables
\r
1296 pDockLeft->AddDockedChild(new CTextDockable, DS_DOCKED_BOTTOM, 100);
\r
1297 pDockRight->AddDockedChild(new CTextDockable, DS_DOCKED_BOTTOM, 100);
\r
1298 pDockTop->AddDockedChild(new CTextDockable, DS_DOCKED_RIGHT, 100);
\r
1299 pDockBottom->AddDockedChild(new CTextDockable, DS_DOCKED_RIGHT, 100);
\r
1302 (Refer to the Docking example for an example of to use CDocker.)
\r
1310 * The default colour scheme has been changed from blue to grey.
\r
1311 The blue, olive and silver colour schemes continue to be used on Windows XP
\r
1312 with themes enabled.
\r
1316 * Frame applications now store the window size and position in the registry.
\r
1317 To enable this, set the m_KeyName member variable in CMainFrame's constructor.
\r
1318 This member variable can be used to reflect the company name and application
\r
1319 name, for example:
\r
1320 m_KeyName = _T("SomeCompany\\SomeApp");
\r
1322 * Frame applications now provide a Most Recently Used (MRU) list. This list is
\r
1323 stored in the registry.
\r
1326 CWnd now includes functions which wrap many of the Windows API functions that
\r
1327 affect to windows.
\r
1335 * All Win32++ code has been moved to header files.
\r
1336 This simplifies the use of Win32++. To add Win32++ to a project, simply
\r
1337 include the appropriate Win32++ header files in your code. There is no longer
\r
1338 any need to add the Win32++ files to the project, although doing so may
\r
1339 still prove useful under some circumstances. Depending on the compiler/IDE
\r
1340 used, adding the Win32++ header files to the project may add the various
\r
1341 Win32++ classes to the class view.
\r
1343 * Added CListView class.
\r
1344 This class encapsulates the various messages and macros used by the Win32/64
\r
1345 API to manage the List-View common control. You can inherit from this class
\r
1346 when creating your own List-View control in a window, or attaching a
\r
1347 List-View control from a dialog.
\r
1349 * Added CTreeView class.
\r
1350 This class encapsulates the various messages and macros used by the Win32/64
\r
1351 API to manage the Tree-View common control. You can inherit from this class
\r
1352 when creating your own Tree-View control in a window, or attaching a
\r
1353 Tree-View control from a dialog.
\r
1355 * Added CPoint CRect and CSize classes
\r
1356 The CPoint, CRect and CSize classes can be used anywhere a POINT, RECT
\r
1357 or CSize struct can be used respectively. In addition:
\r
1358 - The constructors ensure that members are set to reasonable values.
\r
1359 They also allow a default value to be set when the class is used as a
\r
1360 function argument.
\r
1361 - The classes have additional member functions, including operator==
\r
1363 - These classes makes porting code from MFC or WTL a little easier.
\r
1365 * Extended the CRebar, CToolbar and CStatusbar classes.
\r
1373 * Added support for x64 applications.
\r
1375 Win32++ can now be used to build 64 bit applications. The manifest file has
\r
1376 been modified to support both 32bit and 64bit applications. The new manifest
\r
1377 should be used for any 64 bit applications that use common controls.
\r
1379 Users are encouraged to use the modern Win64 API functions like:
\r
1380 GetWindowLongPtr, SetWindowLongPtr, GetClassLongPtr and SetClassLongPtr.
\r
1381 Win32++ will convert these back to their Win32 API counterparts if required.
\r
1386 Added CFrame::SetMenuIcons
\r
1387 Added CFrame::SetToolbarImages
\r
1388 Removed CToolbar::SetToolbarImageList
\r
1389 Added CToolbar::SetBitmap
\r
1390 Moved CreateDisabledImageList to CFrame::CreateDisabledImageList
\r
1391 Modified CFrame::AddMenuIcons
\r
1395 * 32 bit bitmaps are now supported for toolbars (requires XP or Vista)
\r
1396 * SetMenuIcons and AddMenuIcons now also accept a bitmap for disabled icons
\r
1397 in addition to the bitmap for normal icons.
\r
1405 * Win32++ now also directly supports the Windows CE operating systems.
\r
1406 Windows CE is the operating system used on such things as Pocket PCs,
\r
1407 embedded systems and SmartPhones. The Win32++ examples for Windows CE
\r
1408 include the project files for eMbedded Visual C++ 4.0, and Visual
\r
1411 * Added Networking support. Win32++ now includes a CSocket class which
\r
1412 encapsulates much of the Winsock API. This class is capable of monitoring
\r
1413 network events, such as connection requests from clients, and notification
\r
1414 that the socket has data ready to be received. Command line and dialog
\r
1415 examples are provide to demonstrate how the class can be used to create
\r
1416 TCP/IP (and UDP/IP) servers and clients.
\r
1418 * Added a CDC class. This class simplifies the drawing to device contexts.
\r
1419 This class can be used anywhere we would normally use a handle to a
\r
1420 device context (HDC). Its features include:
\r
1421 - Automates the selection of GDI objects into the device context.
\r
1422 - Automates the destruction of GDI objects.
\r
1423 - Automates the deletion or release of the device contexts.
\r
1425 * PreRegisterClass can now be used to set the WNDCLASS parameters before the
\r
1426 window class is registered. This provides a convenient way to set a window's
\r
1427 background brush or cursor.
\r
1429 * Improvements to tracing. It now uses OutputDebugString to send the trace
\r
1430 output the debug/output pane of the various IDE's. This is now also
\r
1431 compatible with debuggers, should you choose to use them. Previously the
\r
1432 tracing created a separate window to display text.
\r
1434 * Added an immediate mode to CSplitter. There is now the choice of resizing
\r
1435 the panes while the splitter bar is being dragged, or defer the resizing
\r
1436 until the splitter bar drag is complete (as before). CSplitter's
\r
1437 constructor now requires no arguments, making the class simpler to use.
\r
1439 * Automatically detects the XP theme used (Default, Silver or Olive), and
\r
1440 adjusts the theme colors accordingly.
\r
1442 * Added project files for Borland's Turbo C++ 2006. This is a free compiler
\r
1443 available from Borland. It can be downloaded here:
\r
1444 http://www.codegear.com/downloads/free/turbo
\r
1446 * Enhanced the tutorial. It now also demonstrates file operations and printing.
\r
1451 * Property Sheets are now supported. The files PropertySheet.cpp and
\r
1452 PropertySheet.h have been added to Win32++. These files define
\r
1453 the CPropertySheet and CPropertyPage classes. The Property sheet generic
\r
1454 demonstrates the following:
\r
1455 - Modal property sheets.
\r
1456 - Modeless property sheets.
\r
1462 * Added Menubar theme support
\r
1463 - Gradient background for hot buttons (any two colors)
\r
1464 - Gradient background for pressed buttons (any two colors)
\r
1465 - Gradient Sidebar for menu items based on pressed button colors.
\r
1466 - A border color for Menubar buttons and selected menu items
\r
1471 * Added Rebar themes, including:
\r
1472 - Gradient background for the rebar control (any two colors)
\r
1473 - Gradient background for the rebar bands (any two colors)
\r
1474 - The Menubar can be locked in place.
\r
1475 - The bands can be kept left.
\r
1477 - Bands can have rounded borders
\r
1478 - Bands with rounded borders can have a flat style
\r
1479 * Added Toolbar themes, including:
\r
1480 - Gradient background for hot buttons (any two colors)
\r
1481 - Gradient background for pressed buttons (any two colors)
\r
1482 - Colored outline for hot and pressed buttons (any color)
\r
1483 * Built in support for multiple toolbars (in rebars) with AddToolbarBand
\r
1484 * Added Forms example
\r
1485 * Added Themes example
\r
1490 * Owner drawn drop down menu items with icons. CMenubar::SetIcons is
\r
1491 used to determine which menu items display an icon. By default, the
\r
1492 framework uses the toolbar's bitmap and resource IDs for displaying
\r
1493 icons. Override CFrame::SetButtons to change this behavior.
\r
1494 * Automatic subclassing for windows using Windows API defined window classes.
\r
1495 Now when a window is based on predefined window classes, like the
\r
1496 common controls (e.g. list-view, tree-view, richedit), the window is
\r
1497 automatically subclassed. There is now no need to call the subclass
\r
1498 function in user code.
\r
1503 * Added a separate HINSTANCE for resources. This provides for multilingual
\r
1504 support, when resources are loaded via a DLL.
\r
1505 * Added the Internet Browser example. It demonstrates how to host an ActiveX
\r
1506 control in a Win32++ window. It requires ATL.
\r
1507 * Added the Performance example. This program now also conducts a simple
\r
1508 performance test to measure the efficiency of the message handling.
\r
1513 * Existing windows can be subclassed and converted to CWnd objects using Attach
\r
1514 * Dialog items can be sublcassed and converted to CWnd objects, using
\r
1516 * Improvements to CToolbar. The toolbar uses image lists which support using
\r
1517 separate bitmaps for normal, hot and disabled buttons. Text can be added
\r
1518 to toolbar buttons, and the style can be set.
\r
1519 * Improvements to CStatusbar.
\r
1520 * Notifications from common controls are reflected back to the CWnd object that
\r
1522 * Messages from old style common controls are reflected back to the CWnd object
\r
1523 that generated them.
\r
1528 * Added rebars to the frame window
\r
1529 * Added a menubar to the frame window
\r
1530 * Added MDI frame support
\r
1531 * Added splitter window support
\r
1536 * Changed the method of associating the Window's handle (HWND) and
\r
1537 the CWnd pointer. Previously SetWindowLong was used to store the
\r
1538 CWin pointer in the windows data area. Now std::map is used to
\r
1539 associate a CWnd pointer with the HWND (i.e. the window's handle).
\r
1540 * Added the lpParam parameter to both versions of the CWnd::CreateEx
\r
1541 function. Users are now free to use lpParam for their own
\r
1542 purposes. This parameter defaults to NULL for backwards
\r
1548 * Added Tracing. To use tracing, ensure that you are in Debug mode,
\r
1549 i.e. the variable _DEBUG is defined, and use the TRACE("xxxxx")
\r
1550 function to send trace messages. The first TRACE(...) creates
\r
1551 the Trace output window.
\r
1552 * Enhanced the error reporting in the event of an exception. The
\r
1553 GetLastError information is now decoded and displayed if it
\r
1554 provides any additional information.
\r
1555 * Added support for multi-threaded applications.
\r
1560 * The code is now Unicode compliant.
\r
1561 * Added CWinApp class to start Win32++.
\r
1562 * Added CDialog class to support modal and modeless dialogs as well
\r
1563 as indirect dialogs (dialogs created from a dialog template in
\r
1565 * Added the Create function to simplify window creation.
\r