Record Type | Condition | Comments |
msofbtSpgr | Shape is a group shape. | Group-shape-specific information. |
msofbtSp | Always. | A shape atom record. |
msofbtOPT | Always. | The properties of a shape. |
msofbtAnchor or msofbtChildAnchor or msofbtClientAnchor | Always, except for the background shape. | The anchor or location of the shape. If the shape is saved to a clipboard, a msofbtAnchor record is used. If the shape is a child of a group shape, a msofbtChildAnchor is used. Otherwise, for top-level shapes, a host anchor record is present. |
msofbtClientData | Always. | A client data record, the content of which is up to the host. |
msofbtClientTextbox or msofbtTextbox | Shape has attached text. | If the shape has text, a text record is written. For clipboard streams, a msofbtTextbox record is used. Otherwise, a msofbtClientTextbox record is used, the content of which is up to the host. |
msofbtOleObject | Shape is an OLE object. | Used only in the clipboard format. |
msofbtDeletedPspl | Shape is deleted. | Link to previous spot of object. |
typedef struct _FSPGR
{
RECT rcgBounds;
} FSPGR;
typedef struct _FSP
{
MSOSPID spid; // The shape id
ULONG grfPersistent;
} FSP;
The flags for the shape are:
typedef struct
{
ULONG fGroup : 1; // This shape is a group shape
ULONG fChild : 1; // Not a top-level shape
ULONG fPatriarch : 1; // This is the topmost group shape.
// Exactly one of these per drawing.
ULONG fDeleted : 1; // The shape has been deleted
ULONG fOleShape : 1; // The shape is an OLE object
ULONG fHaveMaster : 1; // Shape has a hspMaster property
ULONG fFlipH : 1; // Shape is flipped horizontally
ULONG fFlipV : 1; // Shape is flipped vertically
ULONG fConnector : 1; // Connector type of shape
ULONG fHaveAnchor : 1; // Shape has an anchor of some kind
ULONG fBackground : 1; // Background shape
ULONG fHaveSpt : 1; // Shape has a shape type property
ULONG reserved : 20; // Not yet used
}
The format of a property table record is in another section of this document.
// FPSPL - File PSPL
typedef struct _FPSPL
{
union
{
ULONG lAll;
struct
{
ULONG spid : 30; // The SPID of the shape PSPL points at.
ULONG fFirst : 1; // Is this a pointer to the m_splFirst?
ULONG fLast : 1; // Is this a pointer to the m_splLast?
};
};
} FPSPL;