COLLECT 示例:阐释 MFC 集合类

更新:2007 年 11 月

COLLECT 示例阐释了由 Microsoft 基础类库 (MFC) 提供的各种集合类。

安全说明:

提供该示例代码是为了阐释一个概念,并不代表着最安全的编码实践,因此不应在应用程序或网站中使用该示例代码。对于超出本示例代码的预期用途以外的使用所造成的偶然或继发性损失,Microsoft 不承担任何责任。

获取示例和安装示例的说明:

  • 在 Visual Studio 的“帮助”菜单上,单击“示例”。

    有关更多信息,请参见定位示例文件

  • 示例的最新版本和完整列表可以从 Visual Studio 2008 Samples page(Visual Studio 2008 示例页面)联机获取。

  • 还可以在计算机的硬盘上查找示例。默认情况下,示例和自述文件将复制到 \Program Files\Visual Studio 9.0\Samples\ 下的文件夹中。对于 Visual Studio 速成版,所有示例都位于联机位置。

生成并运行示例

生成并运行 COLLECT 示例

  1. 打开解决方案 collect.sln。

  2. 在“生成”菜单中单击“生成”。

  3. 在“调试”菜单中,单击“开始执行(不调试)”。

“Example”菜单列出了按下表组织的 9 个集合类示例。每个示例都提供一个执行下列许多常见集合操作的窗体视图:

  • 添加新元素。

  • 将新元素插入到列表中间。

  • 搜索元素(通过在对话框的列表框中单击该元素的项)。

  • 通过输入搜索词并单击“Find”在映射中搜索项。

  • 更新元素的值。

  • 移除元素。

  • 移除集合中的所有元素。

通过在“文件”菜单上单击“保存”可以保存对所有示例的更改,通过在“文件”菜单上单击“打开”则可以读回它们。

MFC 集合类

MFC 集合类可以按形态和设计方案来分类。MFC 为三种类型的集合形态提供了类:

  • 列表

  • 数组

  • 映射

MFC 还提供三种类型的设计方案:

  • 不使用 C++ 模板。

  • 使用由简单元素组成的基于 C++ 模板的集合。

  • 使用由类型安全指针组成的基于 C++ 模板的集合。

下表标识了按形态和设计方案排序的所有 MFC 集合类。COLLECT 示例阐释了这些集合中的 9 个,每个来自表中的一个单元格。每个代表形态和设计方案的不同组合。另外,由于根据是用来保存指向 CObjects 的指针还是指向非 CObject 的指针,CTypedPtrArrayCTypedPtrList 基于模板的集合的用法有所不同,因此 COLLECT 示例阐释这两种情况。COLLECT 所阐释的 9 个集合用星号指示。

集合形状

非基于模板的

基于模板的简单元素

基于模板的 typeSafe 指针

列表

CStringList*

CList*

CTypedPtrList

 

CObList

 

(属于指针)*

 

CPtrList

 

CTypedPtrList

 

 

 

(属于 CObject

数组

CByteArray

CArray*

CTypedPtrArray

 

CUIntArray

 

(属于指针)

 

CWordArray*

 

 

 

CDWordArray

 

CTypedPtrArray

 

CStringArray

 

(属于 CObject)*

 

CPtrArray

 

 

 

CObArray

 

 

映射

CMapWordToPtr

CMap*

CTypedPtrMap*

 

CMapWordToOb

 

 

 

CMapStringToString*

 

 

 

CMapStringToPtr

 

 

 

CMapStringToOb

 

 

 

CMapPtrToWord

 

 

 

CMapPtrToPtr

 

 

其他 COLLECT 功能

除了阐释 MFC 集合类外,COLLECT 还阐释:

  • 在添加和移除列表框中的项与添加和移除集合中的项之间进行协调。

  • 在文档的不同视图之间切换,一次仅显示一个视图。也就是说,尽管 COLLECT 包含多个不同的视图,但它只有单文档界面 (SDI),而没有多文档界面 (MDI)。

关键字

此示例说明以下关键字:

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

说明:

某些示例(如此示例)尚未经过修改以反映 Visual C++ 向导、库和编译器中所做的更改,但仍演示了如何完成所需的任务。

请参见

其他资源

MFC 示例