diff options
Diffstat (limited to 'private/oleutest/ole1/srvrdemo/srvrdemo.h')
-rw-r--r-- | private/oleutest/ole1/srvrdemo/srvrdemo.h | 333 |
1 files changed, 333 insertions, 0 deletions
diff --git a/private/oleutest/ole1/srvrdemo/srvrdemo.h b/private/oleutest/ole1/srvrdemo/srvrdemo.h new file mode 100644 index 000000000..2f4dfb6e4 --- /dev/null +++ b/private/oleutest/ole1/srvrdemo/srvrdemo.h @@ -0,0 +1,333 @@ +/* + OLE SERVER DEMO + SrvrDemo.h + + This file contains typedefs, defines, global variable declarations, and + function prototypes. + + (c) Copyright Microsoft Corp. 1990 - 1992 All Rights Reserved +*/ + + + +/* + Explanation of Function Comments. + + Every function has a comment preceding it which gives the following + information: + + 1) Function name. + 2) A description of what the function does. + 3) A list of parameters, each with its type and a short description. + 4) A list of return values, each with an explanation of the condition that + will cause the function to return that value. + 5) A customization section giving tips on how to customize this function + for your OLE application. + If the customization section says "None" then you may find the function + usable as is. + If the customization section says "Re-implement" then the function + should still serve the same purpose and do what is indicated in the + function comment, but will probably need to be re-implemented for + your particular application. Any Server Demo code relating to OLE + will be useful as a guide in your re-implementation. + If the customization section says "Server Demo specific" then the + function will probably have no counterpart in your application. +*/ + + +/* Menu Identifiers */ + +// File menu + +#define IDM_NEW 100 +#define IDM_OPEN 101 +#define IDM_SAVE 102 +#define IDM_SAVEAS 103 +#define IDM_EXIT 104 +#define IDM_ABOUT 105 +#define IDM_UPDATE 106 + +// Edit menu + +#define IDM_CUT 107 +#define IDM_COPY 108 +#define IDM_DELETE 109 + +// Color menu + +#define IDM_RED 110 +#define IDM_GREEN 111 +#define IDM_BLUE 112 +#define IDM_WHITE 113 +#define IDM_GRAY 114 +#define IDM_CYAN 115 +#define IDM_MAGENTA 116 +#define IDM_YELLOW 117 + +// New object menu + +#define IDM_NEWOBJ 118 +#define IDM_NEXTOBJ 119 + +#define IDD_CONTINUEEDIT 120 +#define IDD_UPDATEEXIT 121 +#define IDD_TEXT 122 + +#define OBJECT_WIDTH 120 +#define OBJECT_HEIGHT 60 + +// number HIMETRIC units per inch +#define HIMETRIC_PER_INCH 2540 + +/* Types */ + +// Document type + +typedef enum +{ + doctypeNew, // The document is untitled. + doctypeFromFile, // The document exists in a file and may be linked. + doctypeEmbedded // The document is an embedded document. +} DOCTYPE; + + +// Device context type, passed to DrawObj. + +typedef enum +{ + dctypeScreen, + dctypeBitmap, + dctypeMetafile, + dctypeEnhMetafile +} DCTYPE ; + + +// Version + +typedef WORD VERSION; + + +// Verb + +typedef enum +{ + verbPlay = OLEVERB_PRIMARY, + verbEdit +} VERB; + + +// Server structure + +typedef struct +{ + OLESERVER olesrvr; // This must be the first field so that + // an LPOLESERVER can be cast to a SRVR*. + LHSERVER lhsrvr; // Registration handle +} SRVR ; + + +// How many objects (distinct numbers) will we allow? +#define cfObjNums 20 + +// How many distinct clients can be associated with the object? +#define clpoleclient 20 + + +// Document structure + +typedef struct +{ + OLESERVERDOC oledoc; // This must be the first field so that an + // LPOLESERVERDOC can be cast to an DOC*. + LHSERVERDOC lhdoc; // Registration handle + DOCTYPE doctype; // Document type + ATOM aName; // Document name + HPALETTE hpal; // Handle to a logical color palette + BYTE rgfObjNums[cfObjNums+1]; // What object numbers have been used +} DOC, *DOCPTR ; + + +// Native data structure + +typedef struct +{ + INT idmColor; + INT nWidth; + INT nHeight; + INT nX; + INT nY; + INT nHiMetricWidth; // Used by an object handler. These two fields + INT nHiMetricHeight; // always correspond to nWidth and nHeight. + VERSION version; + CHAR szName[10]; // "Object nn" +} NATIVE, FAR *LPNATIVE; + + +// Object structure + +/* Ordinarily, an OBJ structure would not contain native data. Rather, it + would contain a pointer (or some other reference) to the native data. + This method would allow multiple objects containing the same native data. + Each OBJ structure would be created on the fly when some portion of the + document was to be made into an object. Each OBJ structure would have + only one LPOLECLIENT, which would be passed in to DocGetObject. +*/ + +typedef struct +{ + OLEOBJECT oleobject; // This must be the first field so that an + // LPOLEOBJECT can be cast to a LPOBJ. + HANDLE hObj; // A circular handle to this structure, + // used to delete this structure. + LPOLECLIENT lpoleclient[clpoleclient]; + // Clients associated with the object. + // The array is NULL terminated. + HWND hwnd; // The object's own window + ATOM aName; // Unique identifier for each object within a doc + HPALETTE hpal; // Logical palette to use in drawing object + NATIVE native; // Object data in native format +} OBJ, FAR *LPOBJ ; + +typedef struct { + CHAR *pClassName; + CHAR *pFileSpec; + CHAR *pHumanReadable; + CHAR *pExeName; +} CLASS_STRINGS; + + + +/* Defines */ + +// The name of the application, used in message boxes and title bars. +#define szAppName "Server Demo10" + +// THe class name in the registration database. +#define szClassName "SrvrDemo10" + +// Used to check for "-Embedding" on command line. +#define szEmbeddingFlag "Embedding" + +// Maximum length of a fully-qualified pathname. +#define cchFilenameMax 256 + +// Maximum number of HBRUSHes. +#define chbrMax 9 + +// Number of extra bytes in the window structure for an object +#define cbWindExtra 4 + +// Offset (in the extra space) of the pointer to the object +#define ibLpobj 0 + + + +/* Global variable declarations. (See SrvrDemo.c for descriptions.) */ + +extern HANDLE hInst; +extern HWND hwndMain; +extern SRVR srvrMain; +extern DOC docMain; +extern BOOL fDocChanged; +extern BOOL fEmbedding; +extern BOOL fRevokeSrvrOnSrvrRelease; +extern BOOL fWaitingForDocRelease; +extern BOOL fWaitingForSrvrRelease; +extern BOOL fUnblock; +extern CHAR szClient[]; +extern CHAR szClientDoc[]; +extern HBRUSH hbrColor[chbrMax]; +extern VERSION version; +extern OLECLIPFORMAT cfObjectLink; +extern OLECLIPFORMAT cfOwnerLink; +extern OLECLIPFORMAT cfNative; +extern OLESERVERDOCVTBL docvtbl; +extern OLEOBJECTVTBL objvtbl; +extern OLESERVERVTBL srvrvtbl; + + + +/* Function Prototypes */ + +// Various functions + +BOOL CreateDocFromFile (LPSTR lpszDoc, LHSERVERDOC lhdoc, DOCTYPE doctype); +BOOL CreateNewDoc (LONG lhdoc, LPSTR lpszDoc, DOCTYPE doctype); +LPOBJ CreateNewObj (BOOL fDoc_Changed); +VOID CutOrCopyObj (BOOL fOpIsCopy); +VOID DestroyDoc (VOID); +VOID DestroyObj (HWND hwnd); +VOID DeviceToHiMetric ( LPPOINT lppt); +VOID EmbeddingModeOff (VOID) ; +VOID EmbeddingModeOn (VOID); +VOID UpdateFileMenu (INT); +VOID ErrorBox (CHAR *jwf); +BOOL GetFileOpenFilename (LPSTR lpszFilename); +BOOL GetFileSaveFilename (LPSTR lpszFilename); +VOID HiMetricToDevice ( LPPOINT lppt); +LPOBJ HwndToLpobj (HWND hwndObj); +BOOL InitServer (HWND hwnd, HANDLE hInst); +VOID InitVTbls (VOID); +BOOL OpenDoc (VOID); +VOID PaintObj (HWND hwnd); +OLESTATUS RevokeDoc (VOID); +VOID RevokeObj (LPOBJ lpobj); +INT SaveChangesOption (BOOL *pfUpdateLater); +BOOL SaveDoc (VOID); +BOOL SaveDocAs (VOID); +VOID SavedServerDoc (VOID); +LPOBJ SelectedObject (VOID); +HWND SelectedObjectWindow (VOID); +VOID SendDocMsg (WORD wMessage ); +VOID SendObjMsg (LPOBJ lpobj, WORD wMessage); +VOID SetTitle (LPSTR lpszDoc, BOOL bEmbedded); +VOID SetHiMetricFields (LPOBJ lpobj); +VOID SizeClientArea (HWND hwndMain, RECT rectReq, BOOL fFrame); +VOID SizeObj (HWND hwnd, RECT rect, BOOL fMove); +OLESTATUS StartRevokingServer (VOID); +VOID Wait (BOOL *pf); +LPSTR Abbrev (LPSTR lpsz); +BOOL APIENTRY fnFailedUpdate (HWND, UINT, WPARAM, LONG); +int Main(USHORT argc, CHAR **argv) ; + +// Window handlers + +BOOL APIENTRY About (HWND, UINT, WPARAM, LPARAM); +LONG APIENTRY MainWndProc (HWND, UINT, WPARAM, LPARAM); +LONG APIENTRY ObjWndProc (HWND, UINT, WPARAM, LPARAM); + + +// Server methods + +OLESTATUS APIENTRY SrvrCreate (LPOLESERVER, LHSERVERDOC, OLE_LPCSTR, OLE_LPCSTR, LPOLESERVERDOC FAR *); +OLESTATUS APIENTRY SrvrCreateFromTemplate (LPOLESERVER, LHSERVERDOC, OLE_LPCSTR, OLE_LPCSTR, OLE_LPCSTR, LPOLESERVERDOC FAR *); +OLESTATUS APIENTRY SrvrEdit (LPOLESERVER, LHSERVERDOC, OLE_LPCSTR, OLE_LPCSTR, LPOLESERVERDOC FAR * ); +OLESTATUS APIENTRY SrvrExecute (LPOLESERVER, HANDLE); +OLESTATUS APIENTRY SrvrExit (LPOLESERVER); +OLESTATUS APIENTRY SrvrOpen (LPOLESERVER, LHSERVERDOC, OLE_LPCSTR, LPOLESERVERDOC FAR *); +OLESTATUS APIENTRY SrvrRelease (LPOLESERVER); + +// Document methods + +OLESTATUS APIENTRY DocClose (LPOLESERVERDOC); +OLESTATUS APIENTRY DocExecute (LPOLESERVERDOC, HANDLE); +OLESTATUS APIENTRY DocGetObject (LPOLESERVERDOC, OLE_LPCSTR, LPOLEOBJECT FAR *, LPOLECLIENT); +OLESTATUS APIENTRY DocRelease (LPOLESERVERDOC); +OLESTATUS APIENTRY DocSave (LPOLESERVERDOC); +OLESTATUS APIENTRY DocSetColorScheme (LPOLESERVERDOC, OLE_CONST LOGPALETTE FAR*); +OLESTATUS APIENTRY DocSetDocDimensions (LPOLESERVERDOC, OLE_CONST RECT FAR *); +OLESTATUS APIENTRY DocSetHostNames (LPOLESERVERDOC, OLE_LPCSTR, OLE_LPCSTR); + +// Object methods + +OLESTATUS APIENTRY ObjDoVerb (LPOLEOBJECT, UINT, BOOL, BOOL); +OLESTATUS APIENTRY ObjGetData (LPOLEOBJECT, OLECLIPFORMAT, LPHANDLE); +LPVOID APIENTRY ObjQueryProtocol (LPOLEOBJECT, OLE_LPCSTR); +OLESTATUS APIENTRY ObjRelease (LPOLEOBJECT); +OLESTATUS APIENTRY ObjSetBounds (LPOLEOBJECT, OLE_CONST RECT FAR*); +OLESTATUS APIENTRY ObjSetColorScheme (LPOLEOBJECT, OLE_CONST LOGPALETTE FAR*); +OLESTATUS APIENTRY ObjSetData (LPOLEOBJECT, OLECLIPFORMAT, HANDLE); +OLESTATUS APIENTRY ObjSetTargetDevice (LPOLEOBJECT, HANDLE); +OLESTATUS APIENTRY ObjShow (LPOLEOBJECT, BOOL); +OLECLIPFORMAT APIENTRY ObjEnumFormats (LPOLEOBJECT, OLECLIPFORMAT); + |