创建并运行 StoClien 示例

StoClien 与 COM 服务器中的 COPaper 对象合作,以在 COM 复合文件中持久存储绘图。 有关 COPaper 在 StoClien 提供给 COPaper 的复合文件中使用流的详细信息,请参阅 StoServe 示例和STOSERVE.HTM。 StoServe 示例中还介绍了 COPaper 的构造及其 IPaper 接口。

代码导览

此代码教程中涵盖的主要主题包括:

  • CGuiPaper 如何封装 StoClien 电子绘图纸的 GUI 行为
  • StoClien 如何捕获和显示交互式绘图活动
  • CGuiPaper 对象如何使用 COPaper 来记录绘图数据
  • 如何在重新绘制中使用 IPaperSink 连接
  • CPapFile LoadSave 方法如何使用复合文件中的结构化存储

由于 FRECLIEN 和 CONCLIEN 示例中使用的 CGuiBall 类封装了弹跳球的行为, StoClien 使用 CGuiPaper C++ 类来封装电子绘图纸的数据和 GUI 行为。

下表列出了与 StoClien 示例相关的文件。

文件 说明
STOCLIEN.TXT 简短的示例说明。
MAKEFILE 用于生成代码示例的泛型生成文件。
STOCLIEN.H StoClien 应用程序的 include 文件。 包含类声明、函数原型和资源标识符。
STOCLIEN.Cpp STOCLIEN.EXE 的main实现文件。 具有 WinMain 和 CMainWindow 实现,以及main菜单调度。
STOCLIEN.钢筋混凝土 应用程序资源定义文件。
STOCLIEN.ICO 应用程序图标资源。
STOCLIEN.Pap 应用程序的默认纸张绘图文件。
铅笔。当前 客户端窗口光标的铅笔图像。
下沉。H COPaperSink COM 对象类的类声明。
下沉。Cpp COPaperSink COM 对象类的实现文件。
PAPFILE。H CPapFile C++ 类的类声明。
PAPFILE。Cpp CPapFile C++ 类的实现文件。
GUIPAPER。H CGuiPaper C++ 类的类声明。
GUIPAPER。Cpp CGuiPaper C++ 类的实现文件。
STOCLIEN.Dsp Microsoft Visual Studio Project 文件。

 

复合文件

StoClien 依赖于 COPaper 来记录绘图数据。 它还依赖于 COPaper 将数据存储在复合文件中。 但是,在 COM 客户端和服务器之间典型的分工中, StoClien 分担文件存储的一部分责任。 这种分工在客户端是容器且服务器是嵌入对象的 COM 应用程序中非常重要。 在此安排中,客户端负责创建或打开结构化存储文件,而服务器对象负责使用该存储用于自己的数据存储目的。 这可能涉及服务器对象在提供给它的存储中创建子存储。 它通常涉及服务器对象在存储中创建流对象。 StoClien 示例中详细介绍了 COPaper 对存储流的使用。

客户端和服务器对象都使用 IStorage 接口来执行文件操作。 使用结构化存储体系结构的复合文件实现。 标准服务函数用于对复合文件进行操作。 例如, StgCreateDocfile 函数最初创建一个复合文件,并传回可用于操作文件的 IStorage 指针。 此特定函数在 StoClien 中调用。 它获取的 IStorage 接口作为参数传递给 COPaper 以供其使用。 COPaper 对象本身不会创建或打开复合文件:它使用 IStorageIStream 接口在给定的复合文件中工作。

这些 IStorageIStream 接口未在 StoClienStoServe 中实现。 它们在 COM 库中实现。 获取指向其中一个接口的指针时,其方法实质上用作一组服务,用于对复合文件进行操作。