MFC常用类-链表类
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基础
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是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(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类库是一个层次结构,主要有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各类库详解
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在何时何地调用该函数。
事件是消息的一个特殊形式,一般是指用户操作控件时触发的消息。
MFC常用的类及其成员函数简介
MFC常用类及其成员函数CRuntimeClass结构在CRuntimeClass结构中定义了类名、对象所占存储空间的大小、类的版本号等成员变量及动态创建对象、派生关系判断等成员函数。
每一个从CObject 类派生的类都有一个CRuntimeClass结构同它关联,以便完成在运行时得到对象的信息或基类的信息。
要使用CRuntimeClass结构,必须结合使用RUNTIME_CLASS()宏和其他有关运行时类型识别的MFC宏。
CCmdTarget类(1)消息发送MFC应用程序为每个CCmdTarget派生类创建一个称为消息映射表的静态数据结构,可将消息映射到对象所对应的消息处理函数上。
(2)设置光标BeginWaitCursor() 将光标改为沙漏形状;EndWaitCursor() 将光标改回到之前的形状;RestoreWaitCursor()用于将光标还原为等待状态。
(3)支持自动化CCmdTarget类支持程序通过COM接口进行交互操作,自动翻译COM接口的方法。
CWinThread类由CCmdTarget派生,主要工作是创建和处理消息循环。
CWinApp类从CWinThread类派生,成员函数InitApplication()、InitInstance()、Run()。
在InitInstance()函数中,创建了一个单文档模板类或多文档模板类(CDocTemplate)的对象,并且在文档模板的构造函数中,系统定义的宏RUNTIME_CLASS创建了文档类对象,框架窗口类对象和视图类对象.在MFC应用程序中有且仅有一个CWinApp派生类的对象,代表程序运行的主线程,代表应用程序本身。
CWnd类由CCmdTarget类直接派生,是MFC中最基本的GUI对象。
公共变量m_hWnd 用于存放供API函数调用的窗口句柄。
CframeWnd类从CWnd类派生而来,主要用来掌管一个窗口。
其对象是一个框架窗口,包括边界、标题栏、菜单、最大化按钮、最小化按钮和一个激活的视图。
MFC常用类-链表类
MFC常用类-链表类MFC的链表类模板类Clist CTypedPtrList非模板类CObList CPtrList CStringListMFC链表类的常用成员函数——以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 AddT ail(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;}// 声名一个CStringListCStringList list;// 初始化两个CStringCString 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);}。
mfc基本控件
mfc基本控件
在MFC(Microsoft Foundation Classes)中,有许多基本的控件可用于创建用户界面。
以下列出了一些常见的MFC基本控件:
1. CButton:按钮控件,用于响应用户的点击操作。
2. CEdit:编辑框控件,用于显示和编辑文本。
3. CStatic:静态文本控件,用于显示静态文本内容。
4. CListBox:列表框控件,用于显示列表并允许用户选择其中的项。
5. CComboBox:组合框控件,结合了文本框和下拉列表框的功能。
6. CSliderCtrl:滑块控件,用于表示一个范围,用户可以通过拖动滑块选择值。
7. CProgressCtrl:进度条控件,用于显示任务或操作的进度。
8. CScrollBar:滚动条控件,用于使用滚动条浏览内容。
9. CTreeViewCtrl:树视图控件,用于显示树形结构的数据。
10. CListViewCtrl:列表视图控件,用于以表格形式显示数据。
这只是一些常见的MFC基本控件示例,MFC还提供了其他许多控件和自定义控件的扩展功能。
通过使用这些基本控件,您可以构建丰富的用户界面并与用户进行交互。
MFC中常用数据类型
typedef unsigned short WORD; windef.h
typedef unsigned short wchar_t
typedef short SHORT; winnt.h
//整型typedef int
下面将介绍一些常用数据类型的使用:
我们先定义一些常见类型变量借以说明
int i = 100;
long l = 2001;
float f=300.2;
double d=12345.1பைடு நூலகம்9;
char username[]="女侠程佩君";
char temp[200];
char *buf;
CString str;
_variant_t v1;
_bstr_t v2;
一、其它数据类型转换为字符串
短整型(int)
itoa(i,temp,10);///将i转换为字符串放入temp中,最后一个数字表示十进制
LPCRECT:32-bit指针,指向一个不变的RECT结构
L表示long指针, 这是为了兼容Windows 3.1等16位操作系统遗留下来的, 在win32中以及其他的32为操作系统中, long指针和near指针及far修饰符都是为了兼容的作用。没有实际意义。
P表示这是一个指针
C表示是一个常量
同样, LPCSTR就只能是一个ANSI字符串, 在程序中我们大部分时间要使用带T的类型定义。
LPCTSTR == const TCHAR *
MFC/windows基本数据类型详细介绍
#define FALSE 0 afx.h
#define TRUE 1 afx.h
7 MFC基础知识
MFC中的主要类目
CObject:大部分MFC类的基类.定义对象的创建,删除,串化 命令目标类
– CCmdTarget及其派生类 – 功能:实现对消息的分发处理
窗口支持类
– CWnd及其派生类 – 下一层:
框架窗口:管理视图和文档的窗口; 视图类:提供文档的各种显示和处理方式; 对话框类:作为自定义对话框的基础和提供各种公共对话框; 控件类:代表各类Window标准控件; 控制条类:代表工具栏,状态栏等窗口组件;
对象模型
文档/视图结构的创建过程
文档/视图结构中命令消息的传递
当用户选择了菜单项, 当用户选择了菜单项, 单击了快捷键或工具条 按钮, 按钮,系统就会发送 WM_COMMAND消息.框 消息. 消息 架窗口实际上是大多数 WM_COMMAND消息的接 消息的接 受者, 受者,但WM_COMMAND 消息还可以在视图, 消息还可以在视图,文 档,甚至应用程序类中 被处理. 被处理.
文档/视图结构
单文档应用程序 多文档应用程序
文档/视图 结构
目的:
– 将数据与数据的显示和处理分离; – 一种数据可以有多种显示方式;
实现方法:
– 数据:CDocument封装了数据的输入输出;
真正的数据应该在CDocument的派生类中以数据成员的方式表示;
– 视图:CView及其派生类封装了多种数据的常用显示方式.如:
编写单文档应用程序
1,使用AppWizard创建单文档工程 2,向导帮助建立资源,从CWinApp,CFrameWnd,CView, CDocument派生新的专用类.
– 其中可以选择视图的基类,如CEditView,CListView等.
MFC中CList类使用注意
初学mfc者,往往对CList等mfc的Collect类的使用感到迷惑,在使用中经常会遇到许多问题,导致对vc中的Collect类的使用产生了惧怕。
以下,就个人经历而言,告诉大家如何使用CList。
CList是一个双向链表类。
1、头文件名不可少Clist类定义在Afxtempl.h 头文件中,因此在使用该类时,需要加这个头文件名。
2、理解CList的声明和构造方法CList的声明如下:template< class TYPE, class ARG_TYPE >class CList : public CObject由此,我们知道CList是一个模版类,那么他的两个class是什么意思呢?下面看一个例子:CList<CString ,CString&> list;//链表对象1CList<CString,CString> list2;//链表对象2这里的第一个参数CString是实例化的类型,第二个参数是类的成员函数的参数的调用形式,通常是类型引用,当然也可以是对象,而不是引用。
对象和引用的区别,可以看一下C++基础知识方面的书。
3、使用CList的迭代器迭代器是近年在链表使用中的一个常用技术。
如果大家学过java,就会知道,在java 中,会有专门的一个迭代器类,这个迭代器类用来访问Collect中的数据元素。
在mfc中,在CList中,定义了几个迭代器的函数。
他们方便了我们去访问数据元素。
GetHeadPosition Returns the position of the head element of the list.GetTailPosition Returns the position of the tail element of the list.GetNext Gets the next element for iterating.GetPrev Gets the previous element for iterating.以上是四个迭代器函数。
MFC中文件操作、查找与选择总结
MFC总结(一):MFC中文件操作、查找与选择总结(1)本文主要涉及以下几个方面,均为在MFC编程中较为常用的:CFile操作、CArchive操作、如何选择文件和文件夹、如何查找文件、获取当前目录、_access函数等。
(一)使用CFile类操作文件CFile类在MFC的文件操作中应该是最常用的了。
主要的成员函数有Open、Close、Write、Read、Seek、SeekToEnd、GetLength、GetPosition,具体用法见MSDN。
(1)文件打开操作:文件打开有两种方式,一种是先定义类对象,在用Open函数打开;一种是在定义类对象时传入文件名和打开方式。
分别如下CFile file;if(!file.Open(lpszFileName, nOpenFlags ))return;或CFile file(lpszFileName, nOpenFlags);(2)文件打开方式:文件打开方式,即上述nOpenFlags的值主要由一些宏定义的值组合而成,具体见MSDN,常用的有如下几种:A. CFile::modeCreate | CFile::modeNoTruncate |CFile::modeWrite,以写文件的方式打开,如果文件不存在,则新建文件,否则打开已有文件进行写入操作,此时不会清空原有文件;B. 将上述CFile::modeWrite更换为CFile::modeRead或者CFile::modeReadWrite可实现读操作或者同时读写。
(3)判断文件结束判断文件是否结束,没有结束则继续读取,否则关闭退出。
这点在编程时常用。
对于CFile常用的判断文件结束的方法是:while(file.GetPosition() < file.GetLength()){ //文件未结束//Add code ....}(4)值得注意的几点:A. 当文件名中包含路径时,要注意使用\\,如C:\\MyFile.DAT,在Unicode下时,需要使用_T("C:\\MyFile.DAT");B. 采用(2)中A方式写文件时,注意使用file.SeekToEnd()将文件指针移至文件尾,再写入,否则会覆盖已有的数据,这点经常被很多初学者忽视;C. 在打开文件后就要紧接着写下Close,养成这样的习惯,避免忘记关闭文件。
MFC笔记
MFC 课程特点一个编程框架的学习基于框架,添加和修改代码代码的调试技巧断点调试。
call stack 查看函数的调用关系由理论到实践实践到理解理论的过程课程连续性比较强掌握MFC课程的知识点之外还需要掌握代码的调试技巧阅读别人的代码day01一 MFC的概念Microsoft Foundation Classes 微软基础类库包括两个方面:1 一个编程框架,快速开发。
2 庞大的类库,可以满足我们基本的编程要求二 MFC发展历程Borland公司-----菲利普斯.康和安德鲁斯.海尔斯伯格在1983年创建,以编译器起家的。
早在doc年代,Borland c/c++ , microsoft c/c++在win3.x 年代, Borland c/c++ 3.0/3.192 年 visual c++ 1.0 开始挖墙角,Borland公司主要开发人员(尤金.王)离职,Microsoft 与 borland 的编译器之争。
visual c++ 2.0 集成的MFC3.0 主要面向32位的程序开发。
visual c++4.0 集成的MFC的4.0 加入了对internet的支持visual c++5.0 集成ATL库。
98年9月份推出visual c++ 6.0 对类库及界面做了优化。
安德鲁斯.海尔斯伯格 c#语言之父。
vs2010,集成MFC 10.0三、展开讲解MFC1 MFC类的介绍继承关系的介绍1.1 CObject类及派生类1.1.1 CObject类—MFC的顶层父类,定义了MFC的一些基本特性和机制,例如运行时类信息动态创建和序列化等。
1.1.2 CCmdTarget类----在该类中,对命令消息做了相应的处理(例如点击菜单工具栏产生wm_command消息。
)如果一个类处理命令消息,继承自CCmdTarget。
1.1.3 CWinApp类—应用程序类,几乎所有的MFC程序都要使用该类。
贯穿了整个程序的始终。
mfc中链表removeat的用法
mfc中链表removeat的用法在MFC中,链表的RemoveAt方法用于删除链表中指定位置上的元素,并返回删除的元素。
RemoveAt的用法如下:CList::RemoveAt(position);其中,position是要删除的节点的位置,位置的取值范围为0到链表长度减1。
例如:CList<int> m_list; //声明一个整型链表对象m_list.AddTail(1); //添加元素1m_list.AddTail(2); //添加元素2m_list.AddTail(3); //添加元素3m_list.RemoveAt(1); //删除位置为1的元素在上述示例中,链表中的元素为1、2、3,调用RemoveAt(1)方法后,链表中的元素变为1、3。
需要注意的是,使用RemoveAt函数删除链表节点后,链表的长度会减1。
进一步拓展:1. RemoveAt方法还有一个重载版本,可以接受一个POSITION类型的参数,该参数表示要删除的节点的迭代器。
例如:CList<int>::POSITION pos = m_list.Find(2); //查找元素2的位置m_list.RemoveAt(pos); //删除pos位置上的元素2. MFC中的双向链表类CList还提供了RemoveHead和RemoveTail方法,分别用于删除链表头和链表尾的元素。
3.如果希望删除链表中的所有元素,可以使用RemoveAll方法。
4.在MFC中,链表的迭代器类型为POSITION,可以使用GetPrev 和GetNext方法获取前一个节点和后一个节点的迭代器,进而实现链表遍历和操作。
总之,MFC中链表的RemoveAt方法提供了一种方便的删除链表元素的方式,可以根据位置或迭代器删除指定的节点。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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);
}。