(第四版中文版)[十六]读和写文档-SDI应用程序:序列化,双击运行程序,拖放运行,快捷方式的实现
2007-04-30 16:26
393 查看
序列化:
即对象可以被持续。意即当程序退出时,文档被存在磁盘上,当程序重启时又可以恢复。对象的这种存盘和恢复的过程即称为序列化。
磁盘文件和归档:
Serialize函数对数据进行的读和写:在MFC中,磁盘文件是通过CFile类的对象来表示,CFile类对通过Win32函数CreateFile所获得的二进制文件句柄进行了封装。该文件句柄和通过调用C运行库fopen函数所获得的带缓冲区的FILE指针有所不同,它是一个二进制文件的句柄,应用程序框架借助于该文件句柄来调用win32函数ReadFile、WriteFile、SetfilePointer。如果应用程序不直接利用磁盘I/O,而只依赖于序列化处理过程,那么可以避免直接使用CFile对象。在Serialize函数和CFile对象之间,还有一个归档对象(CArchive类对象)。该归档对象为CFile对象缓存数据,它同时还保存一个内部标记,用来标识归档是存入还是载入。在FileOPen和FileSave的处理过程中会调用文档的Serialize函数。
可序列化的类必须直接或间接地从CObject派生而来,并在声明中必须包含DECLARE_SERIAL宏调用,在类的实现文件中,必须包含IMPLEMENT_SERIAL宏调用。
大多数序列化函数都需要调用基类的Serialize函数。
从归档中载入-内嵌对象和指针:
对于CObjecf 派生类的内嵌对象总是直接调用 Serialize()。
从Explorer启动和拖放(双击文档能运行某个程序来打开):
在 InitInstance() 里调用
RegisterShellFileType(TRUE) ;
在注册表里会加入两个条目:
HKEY_CLASSES_ROOT顶层键下,新加入一个子键和一个数据字符串。
在文档上双击:
InitInstance() 里的 EnableShellOpen() ;
它支持通过DDE消息执行程序。
允许拖放:
应用程序对象的公有数据成员m_pMainWnd指针指向CFrameWnd(或CMDIFrameWnd)对象。当把一个文件拖到框架窗口里的任何地方时,都会激发对CFrameWnd::OnDropFiles 的调用。AppWizard 在 InitInstance() 里产生一行代码,使拖放可以工作:
m_pMainWnd->DragAcceptFiles() ;
程序启动参数:
InitInstance() 函数调用 ParseCommandLine 和 ProcessShellCommand() 函数以处理命令行。如果命令行包含一些看起来像文件名一样的字符,程序会马上装入该文件。因此可以建立一个Windows快捷方式以用指定的文档文件运行程序。
即对象可以被持续。意即当程序退出时,文档被存在磁盘上,当程序重启时又可以恢复。对象的这种存盘和恢复的过程即称为序列化。
磁盘文件和归档:
Serialize函数对数据进行的读和写:在MFC中,磁盘文件是通过CFile类的对象来表示,CFile类对通过Win32函数CreateFile所获得的二进制文件句柄进行了封装。该文件句柄和通过调用C运行库fopen函数所获得的带缓冲区的FILE指针有所不同,它是一个二进制文件的句柄,应用程序框架借助于该文件句柄来调用win32函数ReadFile、WriteFile、SetfilePointer。如果应用程序不直接利用磁盘I/O,而只依赖于序列化处理过程,那么可以避免直接使用CFile对象。在Serialize函数和CFile对象之间,还有一个归档对象(CArchive类对象)。该归档对象为CFile对象缓存数据,它同时还保存一个内部标记,用来标识归档是存入还是载入。在FileOPen和FileSave的处理过程中会调用文档的Serialize函数。
可序列化的类必须直接或间接地从CObject派生而来,并在声明中必须包含DECLARE_SERIAL宏调用,在类的实现文件中,必须包含IMPLEMENT_SERIAL宏调用。
大多数序列化函数都需要调用基类的Serialize函数。
从归档中载入-内嵌对象和指针:
对于CObjecf 派生类的内嵌对象总是直接调用 Serialize()。
从Explorer启动和拖放(双击文档能运行某个程序来打开):
在 InitInstance() 里调用
RegisterShellFileType(TRUE) ;
在注册表里会加入两个条目:
HKEY_CLASSES_ROOT顶层键下,新加入一个子键和一个数据字符串。
在文档上双击:
InitInstance() 里的 EnableShellOpen() ;
它支持通过DDE消息执行程序。
允许拖放:
应用程序对象的公有数据成员m_pMainWnd指针指向CFrameWnd(或CMDIFrameWnd)对象。当把一个文件拖到框架窗口里的任何地方时,都会激发对CFrameWnd::OnDropFiles 的调用。AppWizard 在 InitInstance() 里产生一行代码,使拖放可以工作:
m_pMainWnd->DragAcceptFiles() ;
程序启动参数:
InitInstance() 函数调用 ParseCommandLine 和 ProcessShellCommand() 函数以处理命令行。如果命令行包含一些看起来像文件名一样的字符,程序会马上装入该文件。因此可以建立一个Windows快捷方式以用指定的文档文件运行程序。
相关文章推荐
- bat脚本实例实现只允许运行一个实例(安装程序、创建快捷方式脚本)
- QT中实现程序只运行一个实例--应用程序的单例化
- linux下在root用户登陆状态下,以指定用户运行脚本程序实现方式
- 给应用程序创建快捷方式VC实现
- 当程序用ado的jet4.0方式连接的时候,对于设有access数据库密码的mdb的访问居然报错“无法启动应用程序,工作组信息文件丢失,或是已被其他用户已独占方式打开”,而用odbc方式不报错,小阴沟里翻船,郁闷中然后查文档解决之
- 在 Ubuntu 11.10中,在桌面上创建快捷方式以将程序作为 root 运行
- 【Android实现程序前后台切换效果】(一)android后台运行时弹出正在运行通知的三种方式对比
- WPF:实现主应用程序单一实例运行方式总结
- cxfreeze打包python程序的方法说明(生成安装包,实现桌面快捷方式、删除快捷方式)
- 实现给Fedora 15的gnome3增加自定义程序快捷方式方法
- Winform and WPF 第二遍双击快捷方式或应用程序打开原来的应用程序而不新建一个实例[进程通信 1]
- 批处理实现c/s程序部署,以及创建桌面快捷方式
- 【Android】双击返回键,退出android应用程序 双击两次退出程序提示功能 三种实现方法
- 一个SDI程序基于CFormView视。上面放一个CStatic控件,给视图添加双击消息,运行程序后,双击视图,会有弹出消息响应。 但是双击CStatic类控件,却没有响应
- python实现将程序以守护进程的方式运行
- 在SDI框架下实现关闭文档而不退出程序的功能
- 设置程序开机运行并添加快捷方式、启用、结束线程
- python os.startfile python实现双击运行程序 python监控windows程序 监控进程不在时重新启动
- fedora中将程序的快捷方式添加到“应用程序”中的方法
- AHK 程序/脚本仅能在程序内部启动而无法直接双击运行的实现