创建并运行 StoClien 示例

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

代码导览

此代码教程中介绍的主要主题包括:

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

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

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

文件 说明
STOCLIEN.TXT 简短的示例说明。
MAKEFILE 用于生成代码示例的泛型生成文件。
STOCLIEN。H StoClien 应用程序的 include 文件。 包含类声明、函数原型和资源标识符。
STOCLIEN。CPP STOCLIEN.EXE的主实现文件。 具有 WinMain 和 CMainWindow 实现以及主菜单调度。
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 应用程序中非常重要,其中客户端是容器,服务器是嵌入式对象。 在此安排中,客户端负责创建或打开结构化存储文件,而服务器对象负责将该存储用于自己的数据存储目的。 这可能涉及在提供给它的存储中创建子存储的服务器对象。 它通常涉及在存储中创建流对象的服务器对象。 COPaper 对存储流的使用在 StoClien 示例中进行了详细介绍。

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

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