1,DECLARE_DYNCREATE( class_name )
参数:
class_name 类的实际名字(不用引号括起来)。
说明:
使用DECLARE_DYNCREATE宏可以使每个CObject的派生类的对象具有运行时动态创建的能力
MTestClass.h
class CMTestClass : public CObject
{
DECLARE_DYNCREATE(CMTestClass)
public:
CMTestClass();
virtual ~CMTestClass();
}
MTestClass.cpp
#include "MTestClass.h"
IMPLEMENT_DYNCREATE(CMTestClass,CObject)
CMTestClass::CMTestClass()
{
}
CMTestClass::~CMTestClass()
{
}
2,GetTickCount()
说明:
GetTickCount返回(retrieve)从操作系统启动所经过(elapsed)的毫秒数,它的返回值是DWORD
3,AfxGetApp()
获取当前的App
(class_name )* pApp = (class_name *)AfxGetApp();
4,直接可以使用枚举的值,枚举定义最后必须有分号结束(C#无)
enum Test
{
ENUM_TEST1=0,
ENUM_TEST2,
ENUM_TEST3,
};
UINT i=ENUM_TEST2;//i=1;
//C# enum Test
//C# {
//C# ENUM_TEST1=0,
//C# ENUM_TEST2,
//C# ENUM_TEST3,
//C# }
//C# uint i=(uint)Test.ENUM_TEST2;////i=1;
5,CArray < TYPE,ARG_TYPE >
MFC使用CArray类定义动态数组
参数说明:
TYPE 参数来指定数组元素的类型
ARG_TYPE 参数来指定函数参数的类型。例如CArray类的Add成员函数采用ARG_TYPE参数
6,Vector< TYPE>
C++中的一种数据结构,确切的说是一个类.它相当于一个动态的数组
#include
using namespace std;
vector<int> m_vector;
7,List< TYPE>
C++使用,将元素按顺序储存在链表中. 与 向量(vectors)相比, 它允许快速的插入和删除,但是随机访问却比较慢
#include
using namespace std;
list<int> m_list;
8,map < Key,Value >
C++中使用,提供一个键值对容器,注:参考CArray理解参数意思
注:有点类似C#中的字典Dictionary < Type1,Type2 >
#include
using namespace std;
map<int,string> m_map;
9,CMap< KEY,ARG_KEY,VALUE,ARG_VALUE >
MFC提供使用类似字典的键值容器
CMapWordToPtr 保存void指针,关键字为WORD
CMapPtrToWord 保存WORD,关键字为void指针
CMapPtrToPtr 保存void指针,关键字为其它void指针
CMapWordToOb 保存CObject指针,关键字为WORD
CMapStringToOb 保存CObject指针,关键字为字符串
CMapStringToPtr 保存void指针,关键字为字符串
CMapStringToString 保存字符串,关键字为字符串
声明:
CMap < SOCKET, SOCKET, char*, char* > m_SockToUserIDMap;
CMap < char*, char*, SOCKET, SOCKET> m_UserIDToSockMap;
赋值:
m_SockToUserIDMap[pUserInfo->sSocket] = pszUserID;
m_UserIDToSockMap[pszUserID] = pUserInfo->sSocket;
取值:
char *pszUserID = m_SockToUserIDMap[sSock];
SOCKET sSock = m_UserIDToSockMap[pszUserID];
此处略去CMyData的代码。
以下演示CMap的基本用法,其它的也都差不多的用法,只是其中元素变一变。
//定义类型
typedef CTypedPtrMap <CMapStringToOb,CString,CMyData*> CMapDataMap;