COLLECT Sample: Illustrates MFC Collection Classes
The COLLECT sample illustrates a wide variety of collection classes offered by the Microsoft Foundation Class Library (MFC).
Security Note |
---|
This sample code is intended to illustrate a concept, and it shows only the code that is relevant to that concept. It may not meet the security requirements for a specific environment, and it should not be used exactly as shown. We recommend that you add security and error-handling code to make your projects more secure and robust. Microsoft provides this sample code "AS IS" with no warranties. |
To get samples and instructions for installing them:
To access samples from Visual Studio
On the Help menu, click Samples.
By default, these samples are installed in drive:\Program Files\Microsoft Visual Studio 10.0\Samples\.
- For the most recent version of this sample and a list of other samples, see Visual Studio Samples on the MSDN Web site.
Building and Running the Sample
To build and run the COLLECT sample
Open the solution collect.sln.
On the Build menu, click Build.
On the Debug menu, click Start Without Debugging.
The Example menu lists nine collection class illustrations organized according to the following table. Each example presents a form view that exercises many common collection operations:
Adding a new element.
Inserting a new element in the middle of a list.
Searching an element (by clicking its entry in the dialog box's list box).
Searching an entry in the map by entering the Key and clicking Find.
Updating the value of an element.
Removing an element.
Removing all the elements of the collection.
You can save changes to all the examples by clicking Save on the File menu and read them back by clicking Open on the File menu.
MFC Collection Classes
The MFC collection classes can be classified according to shape and design. MFC offers classes for three types of collection shapes:
Lists
Arrays
Maps
MFC also offers three types of designs:
No use of C++ templates.
Use of a C++ template–based collection of simple elements.
Use of a C++ template–based collection of type-safe pointers.
The following table identifies all the MFC collection classes sorted according to shape and design. The COLLECT sample illustrates nine of these collections, one from each cell in the table. Each represents a distinct combination of shape and design. Also, because usage of the CTypedPtrArray and CTypedPtrList template-based collections differs according to whether they are used to hold pointers to CObjects or to non-CObjects, the COLLECT sample illustrates both cases. The nine collections illustrated by COLLECT are indicated with an asterisk.
Collection shapes |
Non-template based |
Template-based simple elements |
Template-based typeSafe pointers |
---|---|---|---|
List |
CStringList* |
CList* |
CTypedPtrList |
|
CObList |
|
(of pointers)* |
|
CPtrList |
|
CTypedPtrList |
|
|
|
(of CObjects) |
Array |
CByteArray |
CArray* |
CTypedPtrArray |
|
CUIntArray |
|
(of pointers) |
|
CWordArray* |
|
|
|
CDWordArray |
|
CTypedPtrArray |
|
CStringArray |
|
(of CObjects)* |
|
CPtrArray |
|
|
|
CObArray |
|
|
Map |
CMapWordToPtr |
CMap* |
CTypedPtrMap* |
|
CMapWordToOb |
|
|
|
CMapStringToString* |
|
|
|
CMapStringToPtr |
|
|
|
CMapStringToOb |
|
|
|
CMapPtrToWord |
|
|
|
CMapPtrToPtr |
|
|
Additional COLLECT Features
In addition to illustrating the MFC collection classes, COLLECT also illustrates:
Coordinating the addition and removal of entries in a list box with the addition and removal of entries in a collection.
Switching between different views of a document, with only one shown at a time. That is, although COLLECT has many different views, it has a single document interface (SDI) instead of a multiple document interface (MDI).
Keywords
This sample demonstrates the following keywords:
AfxMessageBox; CCmdUI::SetCheck; CControlBar::EnableDocking; CDialog::DoModal; CDocument::DeleteContents; CDocument::OnNewDocument; CFrameWnd::DockControlBar; CFrameWnd::EnableDocking; CFrameWnd::GetActiveDocument; CFrameWnd::GetActiveView; CFrameWnd::RecalcLayout; CFrameWnd::SetActiveView; CListBox::AddString; CListBox::DeleteString; CListBox::FindString; CListBox::GetCurSel; CListBox::GetItemData; CListBox::GetItemDataPtr; CListBox::GetText; CListBox::InsertString; CListBox::ResetContent; CListBox::SetItemData; CListBox::SetItemDataPtr; CObject::AssertValid; CObject::Dump; CObject::Serialize; CStatusBar::Create; CStatusBar::SetIndicators; CString::Empty; CString::Format; CString::LoadString; CToolBar::Create; CToolBar::LoadBitmap; CToolBar::SetButtons; CView::DoPreparePrinting; CView::GetDocument; CView::OnBeginPrinting; CView::OnDraw; CView::OnEndPrinting; CView::OnInitialUpdate; CView::OnPreparePrinting; CView::OnUpdate; CWinApp::AddDocTemplate; CWinApp::InitInstance; CWinApp::LoadStdProfileSettings; CWinApp::OnFileNew; CWnd::DestroyWindow; CWnd::DoDataExchange; CWnd::OnCreate; CWnd::ShowWindow; CWnd::UpdateData; LoadString; SetWindowLong
Note
Some samples, such as this one, have not been modified to reflect the changes in the Visual C++ wizards, libraries, and compiler, but still demonstrate how to complete your desired task.