WEB开发网
开发学院操作系统Windows Vista Windows Vista 和 Office: 使用托管预览处理程序框... 阅读

Windows Vista 和 Office: 使用托管预览处理程序框架以自己的方式查看数据

 2009-02-09 17:43:48 来源:WEB开发网   
核心提示: void IOleWindow.GetWindow(out IntPtr phwnd){phwnd = _previewControl.Handle;}void IOleWindow.ContextSensitiveHelp(bool fEnterMode){throw new NotIm

void IOleWindow.GetWindow(out IntPtr phwnd)
{
  phwnd = _previewControl.Handle;
}
void IOleWindow.ContextSensitiveHelp(bool fEnterMode)
{
  throw new NotImplementedException();
}

IObjectWithSite IObjectWithSite 也很简单。此接口用于向对象提供指向与其容器关联的站点的指针。提供给 SetSite 的站点实际上是 IPreviewHandlerFrame,它包含预览处理程序的窗口。这样,SetSite 方法将所提供的 IUnknown 接口指针存储在私有成员(GetSite 可以在请求时返回该成员)中,并将它转换成 IPreviewHandlerFrame(它也存储)。实际上,此转换导致了 QueryInterface 调用:

private object _unkSite;
private IPreviewHandlerFrame _frame;
void IObjectWithSite.SetSite(object pUnkSite)
{
  _unkSite = pUnkSite;
  _frame = _unkSite as IPreviewHandlerFrame;
}
void IObjectWithSite.GetSite(ref Guid riid, out object ppvSite)
{
  ppvSite = _unkSite;
}

IInitializeWithFile 和 IInitializeWithStream 继续,在 FileBasedPreviewHandler 和 StreamBasedPreviewHandler 中分别实现 IInitializeWithFile 和 IInitializeWithStream。调用它们是为了向预览处理程序提供待预览文件的完整路径或 IStream。实现这些方法只需几行代码:

// in FileBasedPreviewHandler
private string _filePath;
void IInitializeWithFile.Initialize(string pszFilePath, uint grfMode) {
  _filePath = pszFilePath;
}
// in StreamBasedPreviewHandler
private IStream _stream;
void IInitializeWithStream.Initialize(IStream pstream, uint grfMode) {
  _stream = pstream;
}

这些接口中唯一的方法 Initialize 将得到指向待预览文件的路径或代表该文件的 IStream,以及指示如何打开文件的文件模式。文件路径或流存储在成员变量中,以便稍后可以访问它。预览处理程序应当是只读的,因此我忽略了第二个参数。(实际上,所有预览处理程序都应当忽略第二个参数,以只读方式打开文件。并且,它们应当允许执行后续删除、读取和写入文件操作)。IInitializeWithFile 和 IInitializeWithStream 很容易实现,但它们值得我们进行一些深入的讨论。

上一页  5 6 7 8 9 10 

Tags:Windows Vista Office

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接