1 什么叫类可串行化?
:从CObject派生,实现Serialize函数,使用了DECLARE_SERIAL宏和IMPLEMENT_SERIAL宏,有缺省构造函数
:对象通过写出描述自己状态的数值来记录自己,叫对象的串行化。把对象保存在存储器上,用到时可恢复原来的状态,使对象可按流的方式读写
2 神秘的基类CObject类
实现了:对运行时类型识别的支持,对动态创建的支持,对对象保存和可串行化的支持,对错误诊断的支持
AssertValid()产生断言,发出消息,列出断言失败的行数和文件名并终止程序,
dump(),将诊断内容转存到CDumpContext中
IsSerializable()测试对象是否可串行化,
Serialize()从档案文件中装载或向档案文件中存储某对象,
CRuntimeClass结构: 类名,对象字节长度,…
RUNTIME_CLASS(class_name), 获得一个运行类结构,返回一个CRuntimeClass结构指针
GetRuntimeClass(),返回该对象类的CRuntimeClass结构指针
IsKindOf()判断对象是否属于该类
3 CCmdtarget又实现了什么?
--->封装了MFC的消息映射机制OnCmdMsg,封装了显示沙漏标的功能BeginWaitCursor,封装COM的IDispatch接口GetIDispatch。
4 举例MDI程序CMyDoc
void CMyDoc::Serialize(CArchive& ar) //确定归档文件是否被存储
{
if( ar.IsStoring()) {add storing code here}
else { add loading code here }
}
#ifdef _DEBUG
void CMyDoc::AssertValid() const
{
CDocument::AssertValid();
}
void CMyDoc::Dump( CDumpContext& dc) const
{
CDocument::Dump(dc);
}
#endif
5 由global想到的如何在MFC中使用全局变量
a、头文件中extern声明,实现文件中定义
b、在MyApp类中定义,其他类可通过获取MyApp类的指针来调用,
c、声明通用类,将其变量和函数声明为static,调用时直接按"类::变量"
:从CObject派生,实现Serialize函数,使用了DECLARE_SERIAL宏和IMPLEMENT_SERIAL宏,有缺省构造函数
:对象通过写出描述自己状态的数值来记录自己,叫对象的串行化。把对象保存在存储器上,用到时可恢复原来的状态,使对象可按流的方式读写
2 神秘的基类CObject类
实现了:对运行时类型识别的支持,对动态创建的支持,对对象保存和可串行化的支持,对错误诊断的支持
AssertValid()产生断言,发出消息,列出断言失败的行数和文件名并终止程序,
dump(),将诊断内容转存到CDumpContext中
IsSerializable()测试对象是否可串行化,
Serialize()从档案文件中装载或向档案文件中存储某对象,
CRuntimeClass结构: 类名,对象字节长度,…
RUNTIME_CLASS(class_name), 获得一个运行类结构,返回一个CRuntimeClass结构指针
GetRuntimeClass(),返回该对象类的CRuntimeClass结构指针
IsKindOf()判断对象是否属于该类
3 CCmdtarget又实现了什么?
--->封装了MFC的消息映射机制OnCmdMsg,封装了显示沙漏标的功能BeginWaitCursor,封装COM的IDispatch接口GetIDispatch。
4 举例MDI程序CMyDoc
void CMyDoc::Serialize(CArchive& ar) //确定归档文件是否被存储
{
if( ar.IsStoring()) {add storing code here}
else { add loading code here }
}
#ifdef _DEBUG
void CMyDoc::AssertValid() const
{
CDocument::AssertValid();
}
void CMyDoc::Dump( CDumpContext& dc) const
{
CDocument::Dump(dc);
}
#endif
5 由global想到的如何在MFC中使用全局变量
a、头文件中extern声明,实现文件中定义
b、在MyApp类中定义,其他类可通过获取MyApp类的指针来调用,
c、声明通用类,将其变量和函数声明为static,调用时直接按"类::变量"