9:23 2009-7-23

[sql]
改表结构,工具-选项-designers-表设计器和数据库设计器--阻止保存要求重新创建表的更改
[单词]
urged to 鼓励某人朝某个方向发展
diplomat 外交官
respect 尊敬
judicial 司法的
sovereignty 国家主权的,最高统治权的
espionage 间谍
illegal不合法的。违法的
ample 足够的
arrest逮捕
politicians 政治家
dispute 辩论
counterpart与对方地位相当的人
conducted 举止, expeditiously 迅速的
illegal means不法手段
 in accordance with 依照,与。。一致
revive 恢复
send out 发出,长出,散步
assistant 助教
responsible 负有责任,
fiscal and monetary policies 财政金融政策
ensure 确保
[VC++ 孙鑫]
1.不能实例保存,
2.打开文件对话框,
3,初始化信息
 writerofilestring(段名1,键名2,要写的字符串)拷贝一字符串到win.ini文件,在注册表中存储初始化信息
 win.ini文件位置,
 在cFIleAPP类在写,initinstance初始化调用的虚函数
 ::作用域标识符
 ::WriteProfileString("http://www.homehe.cn%22,%22admin%22,%22zhangsan/");
 得到信息 GetProfilestring(段名1,键名2,缺省值3,4,buffer大小5)
 Getbuffer(1),返回指向一个内部..指针,如果修改,在使用其它之前,要调用 releasebuffer
CwndAPP不是从CWnd派生的,所以没有MessageBox,要用AfxMessageBox
区别:
 CWinapp::writeProfilestring(1,2,3),nt,3.x,95存win.ini
 注册表中,存在这里 current_user-software-local appwizar-generation application-file-setting,
 2000系统 直接存在注册表中machine-software下,SetRegistryKey(_T("http://www.suxin.org/"))
 XP系统 存在hkey_users-S-1-5-21-682003330-413027322-725345543-1003-Software-Local AppWizard-Generated Applications
 读取:cwinapp::getProfilestring(段名1,项名2,)
4.对注册表的编程
 增加菜单项, 写注册表,读注册表,
 1.regCreatekey(1,2,3),创建指定的注册表项,如果已经存在,则打开
  1,句柄,2,打开/创建表项的名字 指向,3,变量,打开接收或创建的句柄,
 定义句柄,调用函数regcreatekey,在machine下写,
 指向两反斜杠,
 2.regSetValue(句柄1,2,3,4,5),//设定指定缺省的数据,eg:默认
  2.设定指定指向,空字符串,为表项设值
  3,存储 信息类型,如果别的类型regsetvalue
  5.数据大小,以字节为单位,不包含中止的空字符
 3,regclosekey关闭句柄
  eg:HKEY hkey;
  RegCreateKey(HKEY_LOCAL_MACHINE,"Software\\http://www.sunxin.org\\Admin",&hkey);
  RegSetValue(hkey,NULL,REG_SZ,"zhangsan",strlen("zhangsan"));
  RegCloseKey(hkey);

 4.读取注册表  regqueryvalue(句柄1,指向2,out返回值,指向bufferr3,4)
  
t第十二章,文档与串行化
1.文件读取方式
 添加一菜单文件,写入文件,读取文件
 1.CArchive没有基类,可以保存一个复杂的对象网络,保持持久性,可以加载 ,
 archive对象,二进制流,可带缓冲写入数据,读取,处理二进制对象数据,先要创建CFile对象,确保
archive加载,保存状态相一致,可处理cObjiect派生的对象,
 类成员 :重载了提取,和插入操作符,
 构造函数(指向CFile的指针1,标记加载,保存2,指定内部文件buffer大小3,可选指针4)
  4.如果没有指定,从内部分配,
 插入数据 ar<<1<<ch<<f<<str;
 浮点类型 默认为double.要设为浮点加f 1.3f
 保存和提取顺序要一致,
 2.写入:
  CFile file("1.txt",CFile::modeCreate|CFile::modeWrite);
  CArchive ar(&file,CArchive::store);
  int i=4;
  char ch='a';
  float f=1.3f;
  CString str("http://www.sunxin.org/");
  ar<<i<<ch<<f<<str;
   读取:
  CFile file("1.txt",CFile::modeRead);
  CArchive ar(&file,CArchive::load);
  int i=100;
  char ch;
  float f;
  CString str;
  CString strResult;
  ar>>i>>ch>>f>>str;
  strResult.Format("%d,%c,%f,%s",i,ch,f,str);


串行化:使数据持久性的过程
 3.设置文档标题:
  settitle("http://www.sunxin.org/")
 4.string table中IDR_MAINFRAME是何时传到MFC中的呢
  APP类中,定义单文档模板指针,关联IDR_MAINFRAME,DOC类,MAINFRAME类,VIEW类,DPCTEMPLATE类,
  文档模板函数 getdocstring(1,index2)获取指定的要查找的
  CDocTemplate::windowTietles:主窗口标题栏上的字符串,MDI程序不需要指定
  CDocTemplate::docName缺省文档名称,缺省为无标题
  DCocTemplate::fileNewName,文档类型的名称,如果为多文档,显示在file/new对话框中
  filterName:和filterExt一起使用,写上Text Files(*.txt)
  filterExt:文档扩展名:
  regFileTypeId:如果以::RegisterShellFileTypes向系统的注册表注册文件类型,此值会出现在
hey_classes_root之下成为其子项,并仅供winddows内部使用,如果没有指定,这种文件类型无法注册
  regFileTypeName,存在注册表中的文件类型名称,会显示于程序中用以访问注册表的对话框内
 5.程序刚启动时调用OnNewDocument(),doc类中,
 菜单点击,实际上发送一个命令消息,ID号,onnewdocument()虚函数,
 源代码文件位置,找,MFC—srC-appdlg.cpp 文件中,成员 函数,onFileNew,声明
 afx_msg void onfileNew() //命令消息响应函数,
 成员变量cptrlist对象 是否为空,文档管理器,
 cptrlist对象 是指针链表 opendocumentfile
 调用单文档模板中的csingdoctemplate,
 定义文档类指针,框架类指针,创建文档类对象,创建框架类对象,视类对象,
 调onnewdocument
 doc类下serialize写代码:
 onfileOpen,消息响应函数,调用文档管理器中的onfileopen,DoPromptFileName
 获得一指针, opendocumentfilename
 先保存,后打开,cdocmanager::opendocumentfile()  matchdoctype(1,2)
 返回文档类指针,换一个文件保存,再打开就可以看到,换的时候,将数据清空,和新的数据相关联,
 只有一个文档对象,
 多文档:每打开一个文档就创建一个文档对象,
调用顺序:??
 cdocmanage,l转到文档类成员函数,
用seralize保存对象,
 对象的类必须支持串行化
 CArchive,可串行化的类,
 串行化:对象的持入性
  1.让类从CObject派生,把CGraph类加入项目中,seralize ppu 实现这个函数,
  2.
  3.使用delcare 在类头文件的声明中,
  4.定义一个不带参数的构造函数,
  5,使用implement_serial,
 增加成员函数,void,Draw()
  根据绘画类型判断,画线形状,
 创建透明画刷FromHandle((HBRUSH)GetStockObjctt(NULL_BRUSH));
 返回先前在设备描述表中的画刷,
 将先前的画刷选到设备描述表中,
 打开.以前的资源, *.rc资源

 6.COBArray::Add,集合类,view类增加成员变量 COBArray m_obArray public,
因为在doc中要访问,
 CGraph *pGraph=new CGraph(m_nDrawType,m_ptOrigin,point);
 包含头文件 "Graph.h"
 serialize函数中,集合中所保存的数据写到文件当中,
 文档类要访问视类,要得到一指针,GetFirstViewPosition得到第一个视类对象在视类对象中的位置
所指示的指针,
 返回值:position 表示在集合当中的元素的位置,被MFC的集合类所使用,
 GetNextView.返回这个位置所标识的视类对象指针,不断调用,叠类对象,如果下一对象不存在,则设为NULL
 Position pos=GetFirstViewPosition()//获取第一个视类对象指针,
 CGraphicveiw *pView=(CGraphicveiw)GetNextView(pos)//反回CView指针,要强制转制
 利用指针访问成员变量,
 m_obArray.GetSIze(),//用在for循环中,效率低。
 int nCount=pView->m_obArray.GetSIze()
 ar<<nCOunt
 保存,for(int i-0;i<nCount,i++)
  {
   arr<<pView->m_obArray.GetAt(i);
  
  }
 因为支持串行化,可以直接保存,
 7.提取数据,
 保存之前,将数据也保存,
 int nCount;
 ar>>nCount;
 CGraph *pGraph;
 for(int i=0;i<nCount;i++)
 {
   ar>>pGraph;
   pView->m_obArray.Add(pGraph);
 }
构造,将地址赋绘指针变量,不需要分配空间,
 在view类的onDraw中,要实现重绘功能,调用图形绘制函数,
串行化内部机制:
 保存数据的时候,实际是调用对象本身的serialize函数完成的
 存什么数据,要在可串行化的时候,确定,
COBArray
 结合implement_erial支持串行化,将框架调用
 过程:
 查源代码array.cpp serialize方法,,调用基类,数组数目,数组每一元素依次写到文件中,
 doc类中,增加成员变量 .
 view中得到文档类成员函数,getdocument(),
8.Document/View结构
 文档类:负责管理数据,提供保存和加载数据的功能,负责数据显示,给用户提供对数据的编辑和修改功能,
 MFC提供的document/view结构,将应用程序所需要的“数据处理与显示”的函数空壳都设计好了,这些函数都是虚函数,
可以在派生类中重写,
 有关文件的读写的操作在CView的onDraw函数中进行,
 在派生类中,只需要关注serialize和ondraw函数就可以了
 当按下“File/Open”,application framework会激活文件打开对话框,让你指定文件名,自动调用CGraphicDoc::Serialize
读取文件,application framework还调用CGraphicView::OnDraw传递一个显示DC,让你重新绘制窗口内容
 MFC提供Document/View结构,希望我们将精力放在数据结构的设计和数据显示的操作上,而不是对象与对象,模块与模块之间的通信上
 一个文档对象可以和多个视类对象相关联,一个视类只能关联一个文档对象
9.不管是新建还是打开,都会先deleteContents,删除和文档相关联的所有数据,
 虚函数,并不销毁doc对象本身,对象销毁之前,和重复使用之前被调用,
doc中,增加DeleContens方法,
 delete m_obArray.GetAt(i)//释放堆内存
 removeAt删除在指定索引的元素,m_obArray.RemoveAt(i);
 内在泄露,m_obArray.GetSize()做为条件放在for循环当中,
 也可以用while(nCount--)从最大开始删
 
 
 
 

你可能感兴趣的:(9:23 2009-7-23)