//+---------------------------------------------------------------------------
//
// Microsoft Windows
// Copyright (C) Microsoft Corporation, 1992 - 1993.
//
// File: ddeint.h
//
// Contents: This file contains shared macros/state between the server
// and client directories
// Classes:
//
// Functions:
//
// History: 5-04-94 kevinro Commented/cleaned
//
//----------------------------------------------------------------------------
//
// BUGBUG: (KevinRo) The new definition of DVTARGETDEVICE uses an unsized array
// of bytes at the end. Therefore, the sizeof operator no longer works. So, I
// have calculated the size of the cbHeader by accounting for each member of
// the structure independently. I am not too proud of this at the moment,
// but need to move on.
//
#define DEB_DDE_INIT (DEB_ITRACE|DEB_USER1)
// global OLE class used to create windows in OLE.
extern LPTSTR gOleWindowClass;
extern HINSTANCE g_hinst;
// names of the DDE window classes
#ifdef _CHICAGO_
// Note: we have to create a unique string so that we
// register a unique class for each 16 bit app.
// The class space is global on chicago.
//
extern LPSTR szOLE_CLASSA;
extern LPSTR szSYS_CLASSA;
#define OLE_CLASSA szOLE_CLASSA
#define SRVR_CLASSA szSRVR_CLASSA
#define DDEWNDCLASS WNDCLASSA
#define DdeRegisterClass RegisterClassA
#define DdeUnregisterClass UnregisterClassA
#define DdeCreateWindowEx SSCreateWindowExA
#else
#define OLE_CLASS L"Ole2WndClass"
#define OLE_CLASSA "Ole2WndClass"
#define SRVR_CLASS (OLESTR("SrvrWndClass"))
#define SRVR_CLASSA ("SrvrWndClass")
#define DDEWNDCLASS WNDCLASS
#define DdeRegisterClass RegisterClass
#define DdeUnregisterClass UnregisterClass
#define DdeCreateWindowEx CreateWindowEx
#endif // !_CHICAGO_
STDAPI_(LRESULT) DocWndProc (HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam);
STDAPI_(LRESULT) SrvrWndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam);
STDAPI_(LRESULT) SysWndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam);
STDAPI_(LRESULT) ClientDocWndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam);
BOOL SendMsgToChildren (HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam);
#define SIZEOF_DVTARGETDEVICE_HEADER (sizeof(DWORD) + (sizeof(WORD) * 4))
// forward declarations
class CDefClient;
typedef CDefClient FAR *LPCLIENT;
class CDDEServer;
typedef CDDEServer FAR *LPSRVR;
typedef CDDEServer FAR *HDDE; // used by ClassFactory table
typedef struct tagDISPATCHDATA
{
SCODE scode; // might be no necessary
LPVOID pData; // pointer to channel data
} DISPATCHDATA, *PDISPATCHDATA;
// SERVERCALLEX is an extension of SERVERCALL and represents the set of
// valid responses from IMessageFilter::HandleIncoming Call.
typedef enum tagSERVERCALLEX
{
SERVERCALLEX_ISHANDLED = 0, // server can handle the call now
SERVERCALLEX_REJECTED = 1, // server can not handle the call
SERVERCALLEX_RETRYLATER = 2, // server suggests trying again later
SERVERCALLEX_ERROR = 3, // error?
SERVERCALLEX_CANCELED = 5 // client suggests canceling
} SERVERCALLEX;
//
// The wire representation of STDDOCDIMENSIONS is a 16-bit
// format. This means instead of 4 longs, there are
// 4 shorts. This structure is used below to pick the data
// from the wire representation. Amazingly stupid, but
// backward compatible is the name of the game.
//
typedef struct tagRECT16
{
SHORT left;
SHORT top;
SHORT right;
SHORT bottom;
} RECT16, *LPRECT16;
//+---------------------------------------------------------------------------
//
// Function: ConvertToFullHWND
//
// Synopsis: This function is used to convert a 16-bit HWND into a 32-bit
// hwnd
//
// Effects: When running in a VDM, depending on who dispatches the message
// we can end up with either a 16 or 32 bit window message. This
// routine is used to make sure we always deal with a 32bit
// HWND. Otherwise, some of our comparisions are incorrect.
//
// Arguments: [hwnd] -- HWND to convert. 16 or 32 bit is fine
//
// Returns: Always returns a 32 bit HWND
//
// History: 8-03-94 kevinro Created
//
// Notes:
// This routine calls a private function given to use by OLETHK32
//
//----------------------------------------------------------------------------
inline
HWND ConvertToFullHWND(HWND hwnd)
{
if (IsWOWThreadCallable() &&
((((ULONG)hwnd & 0xFFFF0000) == 0) ||
(((ULONG)hwnd & 0xFFFF0000) == 0xFFFF0000)))
{
return(g_pOleThunkWOW->ConvertHwndToFullHwnd(hwnd));
}
return(hwnd);
}
inline
void OleDdeDeleteMetaFile(HANDLE hmf)
{
intrDebugOut((DEB_ITRACE,
"OleDdeDeleteMetaFile(%x)\n",
hmf));
if (IsWOWThreadCallable())
{
intrDebugOut((DEB_ITRACE,
"InWow: calling WOWFreeMetafile(%x)\n",
hmf));
if (!g_pOleThunkWOW->FreeMetaFile(hmf))
{
return;
}
intrDebugOut((DEB_ITRACE,
"WOWFreeMetafile(%x) FAILED\n",
hmf));
}
intrDebugOut((DEB_ITRACE,
"Calling DeleteMetaFile(%x)\n",
hmf));
DeleteMetaFile((HMETAFILE)hmf);
}