架构
windows下的quicklook,基于COM实现,分为两个部分:
- Preview Handler: 实现真正的预览功能,包括内容如何渲染(内容是只读的),是否响应用户输入(鼠标、键盘等),右键菜单,内容如何销毁等
- Preview Host: 宿主程序,提供预览区域,调用Preview Hander实现的接口,可控制预览区域(大小、是否显示等)
可以简单理解为server - client模式,Preivew Handler是server, Preivew Host是client
开发流程
- Preview Host根据文件扩展名,查找注册表(推荐使用IQueryAssociations),确定Preview Handler
- 创建Preview Handler实例, 推荐使用CoCreateInstance
- 向Preview Handler 传递要预览的文件(stream, file等方式)
- 可选: 设置前景色,背景色,字体等,需要Preview handler实现这些功能
- 向Preview Handler 传递可预览区域(window Handle)
- 调用DoPreview 显示预览内容
- 调用Unload结束预览
Preview Handler
有两种实现模式:
- In-Process server, 是以DLL的方式实现(DllSurrogate), 需指定代理为Prevhost.exe, 优点: 实现简单,灵活
- local server,是以独立exe程序实现, 官方不建议,但Office是以这种方式实现的
这两种模式是COM编程中的两种,其他还有Remote Server, in-process handler