Windows Vista 和 Office: 使用托管预览处理程序框架以自己的方式查看数据
2009-02-09 17:43:48 来源:WEB开发网public abstract class PreviewHandler :
IPreviewHandler, IPreviewHandlerVisuals, IOleWindow, IObjectWithSite
{ ... }
它隐藏了所有困难的实现细节(但实际上,可以看到这根本不那么困难)。但请注意,PreviewHandler 既没有实现 IInitializeWithFile,也没有实现 IInitializeWithStream。它们都是从 PreviewHandler 派生的两个抽象类中实现:
public abstract class StreamBasedPreviewHandler :
PreviewHandler, IInitializeWithStream { ... }
public abstract class FileBasedPreviewHandler :
PreviewHandler, IInitializeWithFile { ... }
若要实现自定义预览处理程序,需要从 StreamBasedPreviewHandler 或 FileBasedPreviewHandler 派生新类,并重写一个方法。下面是我的 XmlPreviewHandler 类中实现的方法:
public sealed class XmlPreviewHandler : FileBasedPreviewHandler
{
protected override PreviewHandlerControl
CreatePreviewHandlerControl()
{
return new XmlPreviewHandlerControl();
}
}
CreatePreviewHandlerControl 方法返回您编写的从 StreamBasedPreviewHandlerControl 或 FileBasedPreviewHandlerControl 派生的自定义类型的实例。二者都派生自我的 PreviewHandlerControl 抽象基类:
public abstract class FileBasedPreviewHandlerControl :
PreviewHandlerControl { ... }
public abstract class StreamBasedPreviewHandlerControl :
PreviewHandlerControl { ... }
public abstract class PreviewHandlerControl : Control
{
public abstract void Load(FileInfo file);
public abstract void Load(Stream stream);
public virtual void Unload() { ... }
}
如名称所示,在应当加载和预览文件或流时,将调用 Load 方法。同样,在应当关闭当前预览时,将调用 Unload 方法。然后,自定义 PreviewHandlerControl 负责从合适的类型(FileBasedPreviewHandlerControl 或 StreamBasedPreviewHandlerControl)派生,重写 Load 方法,并创建显示文件或流时需要的任何 Windows 窗体控件。在我的 XML 预览处理程序中,我只创建了 WebBrowser 控件,并将 XML 文档加载到其中,以使 Windows Vista 外壳程序用户获得具有与 Internet Explorer® 相同的整齐打印效果的 XML。
更多精彩
赞助商链接