MFC常用类-链表类

合集下载

mfc编程cstringlist实例

mfc编程cstringlist实例

mfc编程cstringlist实例MFC编程中的CStringList实例在MFC(Microsoft Foundation Classes)编程中,CStringList是一个非常有用的类,用于管理字符串的链表。

它提供了许多方便的功能,使得操作字符串链表变得更加简单和高效。

在本文中,我们将逐步回答关于CStringList的问题,并给出一些实例代码来帮助读者更好地理解和使用这个类。

问题1:什么是CStringList?CStringList是MFC框架中的一个类,它是一个模板类,用于处理字符串的链表。

它使用的是C++的模板机制,可以在链表中存储任意类型的数据。

但在这里,我们主要关注它在处理字符串方面的应用。

问题2:如何创建一个CStringList对象?要创建一个CStringList对象,只需简单地声明一个新的实例即可:CStringList strList;这将创建一个名为strList的CStringList对象。

您可以根据需要创建多个实例,并在程序的任何地方使用它们。

问题3:如何向CStringList中添加字符串?要向CStringList中添加字符串,可以使用AddHead()或AddTail()成员函数。

AddHead()函数将字符串添加到链表的头部,而AddTail()函数则将字符串添加到链表的尾部。

下面是一些示例代码:CStringList strList;strList.AddHead("Hello");strList.AddTail("World");这将创建一个名为strList的CStringList对象,并向其头部添加字符串"Hello",在其尾部添加字符串"World"。

问题4:如何遍历并访问CStringList中的字符串?要遍历并访问CStringList中的字符串,可以使用CstringList的一个迭代器。

第6章 MFC基础

第6章  MFC基础
-4-
MFC概述—MFC应用程序分析
➢ 无WinMain()函数 ➢ 应用程序对象:必须利用应用程序类实例化一个全局对象 ➢ InitInstance()函数:派生类中重写,用于初始化应用程序 ➢ MFC窗体:利用MFC已有的窗体类派生或实例化
-5-
MFC概述—MFC应用程序开发方法
创建项目 创建/编辑资源
函数功能 在数组的最后添加一个数组元素,在必要时扩展数组 将另一个数组添加到此数组,在必要时扩展数组 将另一数组复制给此数组,在必要时扩展数组 设定数组指定位置处的值,在必要时扩展数组 获得一个指向数组元素的指针 释放不用的数组内存 获取数组内指定位置处的值 获取数组中包含的元素个数 获取允许访问数组元素的值的指针 获取数组的上边界的值 在数组的指定位置插入一个元素,后面的元素下标加1 删除指定位置处的值 删除数组中的所有元素 设定数组指定位置处的值,数组不增长 设置数组的的初始大小 重载数组下标操作符
...... END_MESSAGE_MAP
- 10 -
MFC应用程序框架—消息映射
➢ 普通窗口消息
窗口消息 WM_CHAR WM_CLOSE
消息映射宏 ON_WM_CHAR ON_M_CLOSE
默认处理函数
afx_msg void OnChar (UINT, UINT, UINT); afx_msg void OnClose();
afx_msg void OnMouseMove( UINT, CPoint);
- 11 -
MFC应用程序框架—消息映射
➢ 命令消息
//命令消息使用ON_COMMAND宏对其进行映射响应,格式如下: ON_COMMAND(命令ID,响应函数)
//响应函数的原型如下: afx_msg void memberFxn();

cstringlist用法 -回复

cstringlist用法 -回复

cstringlist用法-回复CStringList是MFC(Microsoft Foundation Class)中的一个类,主要用于管理一组C-style字符串的链表。

本篇文章将逐步回答与CStringList 相关的各个方面,包括使用方法、常见操作以及示例代码等。

一、什么是CStringList?在介绍具体使用方法前,我们先来了解一下CStringList的基本概念。

CStringList是MFC中的一个类,它是一个模板类,用于管理C-style字符串的链表。

它提供了一系列的成员函数和操作符重载,方便我们对链表进行访问和操作。

二、如何创建和初始化一个CStringList对象?要使用CStringList,首先需要在代码中包含头文件Afxcoll.h,并且使用using声明:cpp#include <afx.h>#include <afxtempl.h>using namespace std;接下来,我们可以通过两种方式创建和初始化一个CStringList对象。

1. 通过默认构造函数创建一个空链表:cppCStringList list;2. 通过将已有的链表作为参数传入构造函数进行初始化:cppCStringList list2(list);这样就可以创建并初始化一个CStringList对象了。

三、常见操作1. 插入元素我们可以使用AddHead和AddTail函数在链表的头部和尾部插入新的元素。

例如:cpplist.AddHead(_T("Hello"));list.AddTail(_T("World"));这样就在链表中插入了两个元素。

2. 获取链表大小可以使用GetCount函数获取链表中的元素个数:cppint count = list.GetCount();3. 访问链表元素CStringList提供了一系列的迭代器(iterator)用于访问链表的元素。

mfc clist遍历

mfc clist遍历

mfc clist遍历MFC(Microsoft Foundation Class)是一种常用的C++类库,在Windows平台下开发Windows应用程序时,MFC可以为我们提供丰富的开发工具和API。

CList类是MFC中的一个容器类,它提供了一个链表结构来存储数据,并且提供了多种操作链表的方法。

本文将介绍如何使用MFC CList类进行遍历操作。

首先,我们需要创建一个CList对象,并向其中添加数据。

通过调用AddHead或AddTail方法可以将数据添加到链表的头部或尾部。

```CList<int, int> myList;myList.AddHead(1);myList.AddHead(3);myList.AddTail(5);```接下来,我们可以使用迭代器进行遍历。

MFC提供了CList的迭代器类CListIterator。

```CList<int, int>::iterator iter;for (iter = myList.begin(); iter != myList.end(); iter++){//进行操作}```在这段代码中,我们使用了begin和end方法来获取迭代器的起始和结束位置,然后使用循环遍历整个链表。

在每个迭代器指向的节点中,我们可以进行各种操作,如访问节点的值、修改节点的值等。

除了使用迭代器,我们也可以使用MFC提供的另一个方法——循环遍历链表。

该方法使用GetHeadPosition和GetNext方法来依次访问链表中的每个节点。

```POSITION pos = myList.GetHeadPosition();while (pos != NULL){int nValue = myList.GetNext(pos);//进行操作}```在这段代码中,我们首先调用GetHeadPosition方法来获取链表头部节点的位置,然后使用循环依次获取下一个节点,并进行各种操作。

MFC类库的基本类

MFC类库的基本类

MFC类库是一个层次结构,主要有CObject类、应用程序类、可视对象类、绘图和打印类、通用类、数据库类、Internet和网络类、OLE类。

(1)CObject类CObject类是MFC的抽象基类,MFC中的大多数类是从CObject类派生出来的。

它是MFC 中多数类和用户自定义的根类,该类为程序员提供了希望融入所编写程序的许多公共操作,包括对象的建立和删除、串行化支持、对象诊断输出、运行时信息以及集合类的兼容等。

CObject类的声明在Afx.h中。

(2)应用程序结构类该类主要用于构造框架应用程序的结构,提供了多数应用程序公用的功能.编写程序的任务是填充框架,添加应用程序专有的功能。

1.应用程序和线程支持类CWinThread类是所有线程的基类,窗口应用程序类CWinApp类就是从该类中派生来的。

每个应用程序有且只有一个应用程序对象,在运行程序中该对象和其他对象相互协调,该对象从CWinApp中派生出来。

该类封装了初始化、运行、终止应用程序的代码。

2.命令相关类CCmdTarget类是CObject的子类,它是MFC所有具有消息映射属性的基类。

消息映射规定了当一对象接收到消息命令时,应调用哪个函数对该消息进行处理。

程序员很少需要从CCmdTarget类中直接派生出新类,往往都是从它的子类中派生出新类。

如窗口类(CWnd)、应用程序类(CWinApp)、文档模板类(CDocTemplate)、视类(CView)及框架窗口类(CFrameWnd)等。

3.文档类文档对象由文档对象模板创建,用于管理应用程序的数据。

视图对象表示一个窗口的客户区,用于显示文档数据并允许读者与之交互。

有关文档/视结构的类如下:①CDocTemplate类:文档模板的基类。

文档模板用于协调文档、视图和框架窗口的创建。

②CSingleDocTemplate类:单文档界面(SDI)的文档模板。

③CMultiDocTemplate类:多文档界面(MDI)的文档模板。

MFC各类库详解

MFC各类库详解

1.MFC概述1.MFC是一个编程框架MFC (Microsoft Foundation Class Library)中的各种类结合起来构成了一个应用程序框架,它的目的就是让程序员在此基础上来建立Windows下的应用程序,这是一种相对SDK来说更为简单的方法。

因为总体上,MFC框架定义了应用程序的轮廓,并提供了用户接口的标准实现方法,程序员所要做的就是通过预定义的接口把具体应用程序特有的东西填入这个轮廓。

Microsoft Visual C++提供了相应的工具来完成这个工作:AppWizard可以用来生成初步的框架文件(代码和资源等);资源编辑器用于帮助直观地设计用户接口;ClassWizard用来协助添加代码到框架文件;最后,编译,则通过类库实现了应用程序特定的逻辑。

1.封装构成MFC框架的是MFC类库。

MFC类库是C++类库。

这些类或者封装了Win32应用程序编程接口,或者封装了应用程序的概念,或者封装了OLE特性,或者封装了ODBC和DAO数据访问的功能,等等,分述如下。

(1)对Win32应用程序编程接口的封装用一个C++ Object来包装一个Windows Object。

例如:class CWnd是一个C++ window object,它把Windows window(HWND)和Windows window有关的API函数封装在C++ window object的成员函数内,后者的成员变量m_hWnd就是前者的窗口句柄。

(2)对应用程序概念的封装使用SDK编写Windows应用程序时,总要定义窗口过程,登记Windows Class,创建窗口,等等。

MFC把许多类似的处理封装起来,替程序员完成这些工作。

另外,MFC提出了以文档-视图为中心的编程模式,MFC类库封装了对它的支持。

文档是用户操作的数据对象,视图是数据操作的窗口,用户通过它处理、查看数据。

(3)对COM/OLE特性的封装OLE建立在COM模型之上,由于支持OLE的应用程序必须实现一系列的接口(Interface),因而相当繁琐。

mfc list 用法

MFC(Microsoft Foundation Classes)是微软提供的一组用于开发Windows桌面应用程序的类库。

MFC List是MFC库中的一个类,用于表示和操作动态数组。

MFC List类的用法类似于标准C++的STL容器中的vector 类。

它提供了许多方法来添加、删除、访问和操作元素。

下面是一些常用的MFC List类方法:1. `AddTail()`:在列表的末尾添加一个元素。

2. `AddHead()`:在列表的开头添加一个元素。

3. `Insert()`:在指定位置插入一个元素。

4. `Remove()`:删除指定位置的元素。

5. `RemoveHead()`:删除列表的第一个元素。

6. `RemoveTail()`:删除列表的最后一个元素。

7. `GetCount()`:获取列表中元素的数量。

8. `GetAt()`:获取指定位置的元素。

9. `SetAt()`:设置指定位置的元素的值。

10. `GetHead()`:获取列表的第一个元素。

11. `GetTail()`:获取列表的最后一个元素。

使用MFC List类需要包含MFC的头文件,并在代码中定义MFC List对象,然后可以使用上述方法来操作列表。

以下是一个简单的示例:```cpp#include <afx.h> // 包含MFC头文件#include <iostream>int main(){CList<int, int> myList; // 定义一个整数类型的MFC List对象// 添加元素到列表中myList.AddTail(10);myList.AddTail(20);myList.AddTail(30);// 输出列表中的元素POSITION pos = myList.GetHeadPosition();while (pos != NULL){int num = myList.GetNext(pos);std::cout << num << " ";}std::cout << std::endl;// 删除元素并输出剩余元素myList.RemoveAt(1); // 删除第二个元素(索引为1)pos = myList.GetHeadPosition();while (pos != NULL){int num = myList.GetNext(pos);std::cout << num << " ";}std::cout << std::endl;return 0;}```上述示例演示了如何使用MFC List类来添加、删除和访问列表中的元素。

c语言中linklist类型

c语言中linklist类型LinkList类型是C语言中常用的数据结构之一,用于表示链表。

链表是一种动态数据结构,它可以根据需要动态地分配和释放内存空间,比较灵活。

在本文中,我们将深入探讨LinkList类型及其相关操作。

一、什么是链表链表是一种由节点组成的数据结构,每个节点包含数据和指向下一个节点的指针。

链表中的节点可以按照任意顺序存储,通过指针将它们连接起来。

与数组相比,链表的插入和删除操作更加高效,但是访问元素的效率较低。

链表分为单向链表和双向链表两种形式,本文主要介绍单向链表。

二、LinkList类型的定义在C语言中,我们通过结构体来定义链表节点的数据结构,具体定义如下:```ctypedef struct Node{int data;struct Node *next;}Node;typedef Node *LinkList;```其中,Node表示链表的节点类型,LinkList表示链表的类型。

三、LinkList类型的常用操作1. 初始化链表初始化链表主要是将链表的头指针置空,表示链表为空。

具体实现如下:```cvoid InitList(LinkList *L){*L = NULL;}```2. 判断链表是否为空判断链表是否为空可以通过判断链表的头指针是否为空来实现。

具体实现如下:```cint ListEmpty(LinkList L){return L == NULL;}```3. 求链表的长度求链表的长度即统计链表中节点的个数。

具体实现如下:```cint ListLength(LinkList L){int count = 0;Node *p = L;while(p != NULL){count++;p = p->next;}return count;}```4. 插入节点插入节点可以在链表的任意位置插入新的节点。

具体实现如下:```cint ListInsert(LinkList *L, int pos, int data){if(pos < 1 || pos > ListLength(*L) + 1){return 0;}Node *p = *L;Node *newNode = (Node*)malloc(sizeof(Node));newNode->data = data;newNode->next = NULL;if(pos == 1){newNode->next = *L;*L = newNode;}else{for(int i = 1; i < pos - 1; i++){p = p->next;}newNode->next = p->next;p->next = newNode;}return 1;}```5. 删除节点删除节点可以删除链表中指定位置的节点。

MFC常用控件使用

MFC常用控件使用MFC(Microsoft Foundation Classes)是一个用于Windows平台的C++类库,用于开发基于Windows的图形用户界面应用程序。

MFC提供了许多常用的控件,开发人员可以使用这些控件来构建各种类型的Windows应用程序。

下面是一些常用的MFC控件和它们的使用方法:1. Button控件:Button控件用于创建按钮。

创建Button控件的方法是通过调用CButton类的Create函数,指定按钮的风格、位置和大小等参数。

之后,可以使用CButton类的成员函数来设置按钮的文本、图片和事件处理程序等。

3. List Box控件:List Box控件用于创建列表框,用于显示列表项。

创建List Box控件的方法是通过调用CListBox类的Create函数,指定列表框的风格、位置和大小等参数。

之后,可以使用CListBox类的成员函数来添加、删除和获取列表项等。

5. Static控件:Static控件用于显示静态文本。

创建Static控件的方法是通过调用CStatic类的Create函数,指定静态文本的风格、位置和大小等参数。

之后,可以使用CStatic类的成员函数来设置静态文本的内容、字体和颜色等。

6. Slider控件:Slider控件用于创建滑动条。

创建Slider控件的方法是通过调用CSliderCtrl类的Create函数,指定滑动条的风格、位置和大小等参数。

之后,可以使用CSliderCtrl类的成员函数来设置滑动条的范围、当前位置和事件处理程序等。

7. Progress控件:Progress控件用于显示进度条。

创建Progress 控件的方法是通过调用CProgressCtrl类的Create函数,指定进度条的风格、位置和大小等参数。

之后,可以使用CProgressCtrl类的成员函数来设置进度条的范围、当前位置和事件处理程序等。

8. Tree Control控件:Tree Control控件用于显示树形结构。

MFC基础知识概述

MFC基础知识概述MFC(Microsoft Foundation Classes)是微软公司开发的基于C++的类库,用于Windows操作系统下的图形用户界面(GUI)应用程序开发。

MFC是Windows的主要开发框架,提供了一系列的类和函数,可以用于创建窗口、控件、对话框、菜单等。

本文将对MFC的基础知识进行概述,包括MFC的结构、类层次结构、消息和事件处理、资源管理等内容。

一、MFC的结构MFC的结构主要由四个层次构成:应用程序对象、窗口对象、视图对象和文档对象。

应用程序对象继承自CWinApp类,用于创建和初始化应用程序的整个过程。

窗口对象继承自CWnd类,用于创建和管理窗口。

视图对象继承自CView类,用于显示和处理用户界面上的一部分,通常与窗口对象对应。

文档对象继承自CDocument类,用于管理应用程序中的数据。

二、MFC的类层次结构MFC提供了众多的类和函数,可以用于创建各种窗口、控件、对话框等。

类层次结构是指这些类的继承关系。

MFC的类层次结构非常庞大,以CObject类为基类,派生出众多的中间类,再由这些中间类派生出更具体的类。

例如,CObject派生出CWnd,CWnd派生出CFrameWnd,CFrameWnd派生出CView,CView派生出CScrollView和CFormView等。

通过这种类层次结构,可以方便地创建和管理各种类型的窗口和控件。

三、消息和事件处理在MFC中,消息是用于实现窗口和控件之间通信的机制。

当用户操作窗口或控件时,会产生消息,应用程序可以通过消息处理函数来处理这些消息。

MFC提供了一些宏,如DECLARE_MESSAGE_MAP和BEGIN_MESSAGE_MAP,可以简化消息处理函数的定义和注册。

消息处理函数需要通过ON_MESSAGE或ON_COMMAND宏来注册,以告诉MFC在何时何地调用该函数。

事件是消息的一个特殊形式,一般是指用户操作控件时触发的消息。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

MFC的链表类
模板类Clist CTypedPtrList
非模板类CObList CPtrList CStringList
MFC链表类的常用成员函数——以Clist为例
1.CList(int nBlockSize = 10 );
2.TYPE GetHead()const;
3.TYPE GetTail()const;
4.RemoveHead()
5.RemoveTail()
6.原型1:POSITION AddHead(ARG_TYPE newElement );
原型2:void AddHead(CList* pNewList );
7.原型1:POSITION AddTail(ARG_TYPE newElement );
原型2:void AddTail(CList* pNewList );
8.RemoveAll()
9.POSITION GetHeadPosition()const;
10.POSITION GetTailPosition()const;
11.TYPE GetNext(POSITION& rPosition )const;
12.TYPE GetPrev(POSITION& rPosition )const;
13.TYPE GetAt(POSITION position )const;
14.void SetAt(POSITION pos, ARG_TYPE newElement );
15.void RemoveAt(POSITION position );
16.POSITION InsertBefore(POSITION position, ARG_TYPE newElement );
17.POSITION InsertAfter(POSITION position, ARG_TYPE newElement ); 18.POSITION Find(ARG_TYPE searchValue, POSITION startAfter = NULL)const;
19.POSITION FindIndex(int nIndex )const;
20.int GetCount()const;
21.BOOL IsEmpty()const;
例题
struct CStudent
{
CString m_strName;
int m_nScore;
};
CPtrList m_List;
向添加链表中添加元素
CStudent* m_pStudent = new CStudent;
m_pStudent->m_strName = m_strName;
m_pStudent->m_nScore = m_nScore;
m_List.AddTail(m_pStudent);
删除节点
int nNumber;
CStudent* m_pStudent = NULL;
if (m_List.IsEmpty())
MessageBox("结点已经全部删除!");
else
{
if (m_nRadio == 0)
m_pStudent = (CStudent*)m_List.RemoveHead();
else if(m_nRadio == 1)
m_pStudent = (CStudent*)m_List.RemoveTail();
else
{
if(nNumber < m_List.GetCount())
{
POSITION pos = m_List.FindIndex(m_nNumber);
POSITION pos1 = pos;
m_pStudent = (CStudent*)m_List.GetNext(pos1);
m_List.RemoveAt(pos);
}
else
{
MessageBox("指定结点超出范围!");
}
}
if(m_pStudent)
delete m_pStudent;
}
遍历链表
POSITION pos = m_List.GetHeadPosition();
while (pos != NULL)
{
CStudent* m_pStudent = (CStudent*) m_List.GetNext(pos);
char s[81];
wsprintf(s, " 的成绩是%d.",m_pStudent->m_nScore);
CString m_string=m_pStudent->m_strName+s;
}
// 声名一个CStringList
CStringList list;
// 初始化两个CString
CString str1 = "Good morning ";
CString str2 = "李逍遥";
// 添加到列表中
list.AddTail( str1 );
list.AddTail( str2 );
// 获得长度
int length = list.GetCount();
// 获得尾部位置
POSITION posTail = list.GetTailPosition();
// 输出所有元素
for (POSITION pos = list.GetHeadPosition(); pos != NULL;) {
CString str = list.GetNext(pos);
TRACE0(str);
}。

相关文档
最新文档