📄 olestd.h
字号:
/*************************************************************************
**
** OLE 2.0 Utilities
**
** olestd.h
**
** This file contains file contains data structure defintions,
** function prototypes, constants, etc. for the common OLE 2.0
** utilities.
**
** These utilities include the following:
** Debuging Assert/Verify macros
** HIMETRIC conversion routines
** reference counting debug support
** OleStd API's for common compound-document app support
**
** (c) Copyright Microsoft Corp. 1990 - 1996 All Rights Reserved
**
*************************************************************************/
#if !defined( _OLESTD_H_ )
#define _OLESTD_H_
#if !defined(__cplusplus) && !defined( __TURBOC__)
#define NONAMELESSUNION // use strict ANSI standard (for DVOBJ.H)
#endif
#include <windows.h>
#include <shellapi.h>
#include <ole2.h>
#include <string.h>
#include <dlgs.h> //For fileopen dlg; standard include
#include "ansiapi.h"
#include "oledlg.h"
/*************************************************************************
** DEBUG ASSERTION ROUTINES
*************************************************************************/
#if DBG
#include <assert.h>
#define FnAssert(lpstrExpr, lpstrMsg, lpstrFileName, iLine) \
(_assert(lpstrMsg ? lpstrMsg : lpstrExpr, \
lpstrFileName, \
iLine), NOERROR)
#endif //DBG
// BEGINING OF OLD OLESTD.H FILE
#if defined( __TURBOC__ ) || defined( WIN32 )
#define _based(a)
#endif
#ifndef RC_INVOKED
#include <dos.h> // needed for filetime
#endif /* RC_INVOKED */
#include <commdlg.h> // needed for LPPRINTDLG
#include <shellapi.h> // needed for HKEY
#include "ansiapi.h"
// String table defines...
#define IDS_OLESTDNOCREATEFILE 700
#define IDS_OLESTDNOOPENFILE 701
#define IDS_OLESTDDISKFULL 702
/*
* Some C interface declaration stuff
*/
#if ! defined(__cplusplus)
typedef struct tagINTERFACEIMPL {
IUnknownVtbl FAR* lpVtbl;
LPVOID lpBack;
int cRef; // interface specific ref count.
} INTERFACEIMPL, FAR* LPINTERFACEIMPL;
#define INIT_INTERFACEIMPL(lpIFace, pVtbl, pBack) \
((lpIFace)->lpVtbl = pVtbl, \
((LPINTERFACEIMPL)(lpIFace))->lpBack = (LPVOID)pBack, \
((LPINTERFACEIMPL)(lpIFace))->cRef = 0 \
)
#if defined( _DEBUG )
#define OleDbgQueryInterfaceMethod(lpUnk) \
((lpUnk) != NULL ? ((LPINTERFACEIMPL)(lpUnk))->cRef++ : 0)
#define OleDbgAddRefMethod(lpThis, iface) \
((LPINTERFACEIMPL)(lpThis))->cRef++
#if _DEBUGLEVEL >= 2
#define OleDbgReleaseMethod(lpThis, iface) \
(--((LPINTERFACEIMPL)(lpThis))->cRef == 0 ? \
OleDbgOut("\t" iface "* RELEASED (cRef == 0)\r\n"),1 : \
(((LPINTERFACEIMPL)(lpThis))->cRef < 0) ? \
( \
DebugBreak(), \
OleDbgOut( \
"\tERROR: " iface "* RELEASED TOO MANY TIMES\r\n") \
),1 : \
1)
#else // if _DEBUGLEVEL < 2
#define OleDbgReleaseMethod(lpThis, iface) \
(--((LPINTERFACEIMPL)(lpThis))->cRef == 0 ? \
1 : \
(((LPINTERFACEIMPL)(lpThis))->cRef < 0) ? \
( \
OleDbgOut( \
"\tERROR: " iface "* RELEASED TOO MANY TIMES\r\n") \
),1 : \
1)
#endif // if _DEBUGLEVEL < 2
#else // ! defined (_DEBUG)
#define OleDbgQueryInterfaceMethod(lpUnk)
#define OleDbgAddRefMethod(lpThis, iface)
#define OleDbgReleaseMethod(lpThis, iface)
#endif // if defined( _DEBUG )
#endif // ! defined(__cplusplus)
/*
* Some docfiles stuff
*/
#define STGM_DFRALL (STGM_READWRITE | STGM_TRANSACTED | STGM_SHARE_DENY_WRITE)
#define STGM_DFALL (STGM_READWRITE | STGM_TRANSACTED | STGM_SHARE_EXCLUSIVE)
#define STGM_SALL (STGM_READWRITE | STGM_SHARE_EXCLUSIVE)
/*
* Some Concurrency stuff
*/
/* standard Delay (in msec) to wait before retrying an LRPC call.
** this value is returned from IMessageFilter::RetryRejectedCall
*/
#define OLESTDRETRYDELAY (DWORD)5000
/* Cancel the pending outgoing LRPC call.
** this value is returned from IMessageFilter::RetryRejectedCall
*/
#define OLESTDCANCELRETRY (DWORD)-1
/*
* Some Icon support stuff.
*
* The following API's are now OBSOLETE because equivalent API's have been
* added to the OLE2.DLL library
* GetIconOfFile superceeded by OleGetIconOfFile
* GetIconOfClass superceeded by OleGetIconOfClass
* OleUIMetafilePictFromIconAndLabel
* superceeded by OleMetafilePictFromIconAndLabel
*
* The following macros are defined for backward compatibility with previous
* versions of the OLE2UI library. It is recommended that the new Ole* API's
* should be used instead.
*/
#define GetIconOfFile(hInst, lpszFileName, fUseFileAsLabel) \
OleGetIconOfFile(lpszFileName, fUseFileAsLabel)
#define GetIconOfClass(hInst, rclsid, lpszLabel, fUseTypeAsLabel) \
OleGetIconOfClass(rclsid, lpszLabel, fUseTypeAsLabel)
#define OleUIMetafilePictFromIconAndLabel(hIcon,pszLabel,pszSourceFile,iIcon)\
OleMetafilePictFromIconAndLabel(hIcon, pszLabel, pszSourceFile, iIcon)
/*
* Some Clipboard Copy/Paste & Drag/Drop support stuff
*/
//Macro to set all FormatEtc fields
#define SETFORMATETC(fe, cf, asp, td, med, li) \
((fe).cfFormat=cf, \
(fe).dwAspect=asp, \
(fe).ptd=td, \
(fe).tymed=med, \
(fe).lindex=li)
//Macro to set interesting FormatEtc fields defaulting the others.
#define SETDEFAULTFORMATETC(fe, cf, med) \
((fe).cfFormat=cf, \
(fe).dwAspect=DVASPECT_CONTENT, \
(fe).ptd=NULL, \
(fe).tymed=med, \
(fe).lindex=-1)
// Macro to test if two FormatEtc structures are an exact match
#define IsEqualFORMATETC(fe1, fe2) \
(OleStdCompareFormatEtc(&(fe1), &(fe2))==0)
// Clipboard format strings
#define CF_EMBEDSOURCE TEXT("Embed Source")
#define CF_EMBEDDEDOBJECT TEXT("Embedded Object")
#define CF_LINKSOURCE TEXT("Link Source")
#define CF_CUSTOMLINKSOURCE TEXT("Custom Link Source")
#define CF_OBJECTDESCRIPTOR TEXT("Object Descriptor")
#define CF_LINKSRCDESCRIPTOR TEXT("Link Source Descriptor")
#define CF_OWNERLINK TEXT("OwnerLink")
#define CF_FILENAME TEXT("FileName")
#define OleStdQueryOleObjectData(lpformatetc) \
(((lpformatetc)->tymed & TYMED_ISTORAGE) ? \
NOERROR : ResultFromScode(DV_E_FORMATETC))
#define OleStdQueryLinkSourceData(lpformatetc) \
(((lpformatetc)->tymed & TYMED_ISTREAM) ? \
NOERROR : ResultFromScode(DV_E_FORMATETC))
#define OleStdQueryObjectDescriptorData(lpformatetc) \
(((lpformatetc)->tymed & TYMED_HGLOBAL) ? \
NOERROR : ResultFromScode(DV_E_FORMATETC))
#define OleStdQueryFormatMedium(lpformatetc, tymd) \
(((lpformatetc)->tymed & tymd) ? \
NOERROR : ResultFromScode(DV_E_FORMATETC))
// Make an independent copy of a MetafilePict
#define OleStdCopyMetafilePict(hpictin, phpictout) \
(*(phpictout) = OleDuplicateData(hpictin,CF_METAFILEPICT,GHND|GMEM_SHARE))
// REVIEW: these need to be added to OLE2.H
#if !defined( DD_DEFSCROLLINTERVAL )
#define DD_DEFSCROLLINTERVAL 50
#endif
#if !defined( DD_DEFDRAGDELAY )
#define DD_DEFDRAGDELAY 200
#endif
#if !defined( DD_DEFDRAGMINDIST )
#define DD_DEFDRAGMINDIST 2
#endif
/* OleStdGetDropEffect
** -------------------
**
** Convert a keyboard state into a DROPEFFECT.
**
** returns the DROPEFFECT value derived from the key state.
** the following is the standard interpretation:
** no modifier -- Default Drop (NULL is returned)
** CTRL -- DROPEFFECT_COPY
** SHIFT -- DROPEFFECT_MOVE
** CTRL-SHIFT -- DROPEFFECT_LINK
**
** Default Drop: this depends on the type of the target application.
** this is re-interpretable by each target application. a typical
** interpretation is if the drag is local to the same document
** (which is source of the drag) then a MOVE operation is
** performed. if the drag is not local, then a COPY operation is
** performed.
*/
#define OleStdGetDropEffect(grfKeyState) \
( (grfKeyState & MK_CONTROL) ? \
( (grfKeyState & MK_SHIFT) ? DROPEFFECT_LINK : DROPEFFECT_COPY ) : \
( (grfKeyState & MK_SHIFT) ? DROPEFFECT_MOVE : 0 ) )
#define OLESTDDROP_NONE 0
#define OLESTDDROP_DEFAULT 1
#define OLESTDDROP_NONDEFAULT 2
/*
* Some misc stuff
*/
#define EMBEDDINGFLAG "Embedding" // Cmd line switch for launching a srvr
#define HIMETRIC_PER_INCH 2540 // number HIMETRIC units per inch
#define PTS_PER_INCH 72 // number points (font size) per inch
#define MAP_PIX_TO_LOGHIM(x,ppli) MulDiv(HIMETRIC_PER_INCH, (x), (ppli))
#define MAP_LOGHIM_TO_PIX(x,ppli) MulDiv((ppli), (x), HIMETRIC_PER_INCH)
// Returns TRUE if all fields of the two Rect's are equal, else FALSE.
#define AreRectsEqual(lprc1, lprc2) \
(((lprc1->top == lprc2->top) && \
(lprc1->left == lprc2->left) && \
(lprc1->right == lprc2->right) && \
(lprc1->bottom == lprc2->bottom)) ? TRUE : FALSE)
#define LSTRCPYN(lpdst, lpsrc, cch) \
(\
(lpdst)[(cch)-1] = '\0', \
((cch)>1 ? _fstrncpy(lpdst, lpsrc, (cch)-1) : 0)\
)
/****** DEBUG Stuff *****************************************************/
#ifdef _DEBUG
#if !defined( _DBGTRACE )
#define _DEBUGLEVEL 2
#else
#define _DEBUGLEVEL _DBGTRACE
#endif
#if defined( NOASSERT )
#define OLEDBGASSERTDATA
#define OleDbgAssert(a)
#define OleDbgAssertSz(a, b)
#define OleDbgVerify(a)
#define OleDbgVerifySz(a, b)
#else // ! NOASSERT
#define OLEDBGASSERTDATA \
static char _based(_segname("_CODE")) _szAssertFile[]= __FILE__;
#define OleDbgAssert(a) \
(!(a) ? FnAssert(#a, NULL, _szAssertFile, __LINE__) : (HRESULT)1)
#define OleDbgAssertSz(a, b) \
(!(a) ? FnAssert(#a, b, _szAssertFile, __LINE__) : (HRESULT)1)
#define OleDbgVerify(a) \
OleDbgAssert(a)
#define OleDbgVerifySz(a, b) \
OleDbgAssertSz(a, b)
#endif // ! NOASSERT
#define OLEDBGDATA_MAIN(szPrefix) \
char near g_szDbgPrefix[] = szPrefix; \
OLEDBGASSERTDATA
#define OLEDBGDATA \
extern char near g_szDbgPrefix[]; \
OLEDBGASSERTDATA
#define OLEDBG_BEGIN(lpsz) \
OleDbgPrintAlways(g_szDbgPrefix,lpsz,1);
#define OLEDBG_END \
OleDbgPrintAlways(g_szDbgPrefix,"End\r\n",-1);
#define OleDbgOut(lpsz) \
OleDbgPrintAlways(g_szDbgPrefix,lpsz,0)
#define OleDbgOutNoPrefix(lpsz) \
OleDbgPrintAlways("",lpsz,0)
#define OleDbgOutRefCnt(lpsz,lpObj,refcnt) \
OleDbgPrintRefCntAlways(g_szDbgPrefix,lpsz,lpObj,(ULONG)refcnt)
#define OleDbgOutRect(lpsz,lpRect) \
OleDbgPrintRectAlways(g_szDbgPrefix,lpsz,lpRect)
#define OleDbgOutHResult(lpsz,hr) \
OleDbgPrintScodeAlways(g_szDbgPrefix,lpsz,GetScode(hr))
#define OleDbgOutScode(lpsz,sc) \
OleDbgPrintScodeAlways(g_szDbgPrefix,lpsz,sc)
#define OleDbgOut1(lpsz) \
OleDbgPrint(1,g_szDbgPrefix,lpsz,0)
#define OleDbgOutNoPrefix1(lpsz) \
OleDbgPrint(1,"",lpsz,0)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -