文件查看器创建

【勇芳软件工作室】汉化HomePreviousNext

您可以创建一个文件查看器,通过以下步骤与Quick View进行适当的交互:

1.定义文件查看器对象以使用IPersistFileIFileViewer接口。该对象还必须实现一个单独的IUnknown接口,它不会在聚合情况下委派调用。通常,文件查看器对象创建或附加到显示文件内容的窗口。

2.对IPersistFile接口的加载GetCurFile成员函数(以及IUnknown 【】成员函数)进行实现。IsDirty成员函数只需返回ResultFromScode ( S_FALSE ),因为文件查看器不会修改该文件,保存SaveCompleted成员函数应该只返回ResultFromScode( E_NOTIMPL )加载存储文件名,但延迟打开文件,直到以后调用IFileViewer::ShowInitialize成员函数。GetCurFile如果加载尚未被调用,则返回ResultFromScode( E_UNEXPECTED ).否则,它复制路径名并返回NOERROR错误代码。

3.实现IFileViewer::ShowInitializeIFileViewer::Show成员函数(以及IUnknown成员函数IFileViewer)。ShowInitialize必须执行易于发生故障的所有操作,以便如果ShowInitialize成功,显示将永远不会失败。这两个成员函数的实现就像一个应用程序的WinMain函数的实现,其中ShowInitialize注册窗口类(使用DLL在其DllEntryPoint函数中接收的实例句柄,而不是快速视图的实例)创建必要的窗口以满足UI准则,并以IPersistFile::Load中给出的路径将文件加载为只读。然后,显示在视口窗口中显示该文件的内容,显示顶级文件查看器窗口,并进入消息循环。为了增强UI的外观,在窗口可见之前,文件应该被加载并完全显示在视口窗口中。

显示直到用户关闭窗口才返回;也就是说,Quick View等待显示终止前返回。Quick View将消息循环的责任委托给显示成员函数,所以ShowInitialize显示在任何应用程序中看起来像一个WinMain函数(代码只存储在一个DLL中)。

请注意,IPersistFile::Load成员函数中的路径可能是统一的命名约定(UNC)路径。Win32 OpenFile和OLE StgOpenStorage等功能自动处理UNC路径。如果以任何其他方式打开文件,则必须确保正确处理UNC路径。

4.使用IClassFactory界面定义类工厂对象,并完全实现接口创建文件查看器对象。类工厂必须支持聚合和服务器锁定,按照IClassFactory界面的要求。

5.实现DllGetClassObject函数来创建步骤4中提到的类工厂的实例,并根据需要为任何组件对象DLL返回一个指向其接口之一的指针。

6.根据服务中的文件查看器对象数量和使用IClassFactory::LockServer成员函数实现的锁定计数的数量,按照任何组件对象DLL的要求,实现DllCanUnloadNow函数返回相应的代码。

7.使用IFileViewer::PrintTo成员函数【.】包含打印到功能此步骤是可选的。如果未实现此函数,则成员函数必须返回ResultFromScode ( E_NOTIMPL ).

8.根据任何基于Win32的DLL的需要,使用DllEntryPoint函数来完成DLL的实现。

通常,只有IPersistFile::LoadIFileViewer成员函数的实现是文件查看器特有的。处理创建OLE组件对象的其他步骤是标准OLE机制。