📄 tenant.h
字号:
* (overhead).
*/
typedef struct tagTENANTINFO
{
DWORD dwID;
RECTL rcl;
FORMATETC fe; //Excludes ptd
short fSetExtent; //Call IOleObject::SetExtent on Run
} TENANTINFO, *PTENANTINFO;
//CHAPTER24MOD
/*
* Event handling constructs: EVENTACTION is the type of
* action to execute on an event. EVENTMAP is an element of
* an array to hold event mappings.
*/
typedef enum
{
ACTION_NONE=-1,
ACTION_BEEPDEFAULT=MB_OK,
ACTION_BEEPASTERISK=MB_ICONASTERISK,
ACTION_BEEPEXCLAMATION=MB_ICONEXCLAMATION,
ACTION_BEEPHAND=MB_ICONHAND,
ACTION_BEEPQUESTION=MB_ICONQUESTION,
ACTION_TAILING=-2
} EVENTACTION;
typedef struct tagEVENTMAP
{
DISPID id; //Event ID
EVENTACTION iAction; //Action to take
BSTR bstrName; //Event name (function only)
} EVENTMAP, *PEVENTMAP;
class CEventMap
{
public:
UINT m_cEvents;
LPTYPEINFO m_pITypeInfo;
PEVENTMAP m_pEventMap;
public:
CEventMap(LPTYPEINFO);
~CEventMap(void);
BOOL Init(void);
BOOL Set(DISPID, EVENTACTION);
EVENTACTION Get(DISPID);
void Serialize(LPSTREAM);
void Deserialize(LPSTREAM);
};
typedef CEventMap *PCEventMap;
//Events stream in the object storage
#define SZEVENTSSTREAM OLETEXT("\003Event Mappings")
//End CHAPTER24MOD
class CTenant : public IUnknown
{
friend CImpIOleClientSite;
friend CImpIAdviseSink;
friend CImpIOleInPlaceSite;
//CHAPTER24MOD
friend CImpIOleControlSite;
friend CImpIDispatch;
friend CDispatchEvents;
//End CHAPTER24MOD
private:
HWND m_hWnd; //Pages window
DWORD m_dwID; //Persistent DWORD ID
DWORD m_cOpens; //Count calls to Open
BOOL m_fInitialized; //Something here?
LPUNKNOWN m_pObj; //The object here
LPSTORAGE m_pIStorage; //Sub-storage for tenant
FORMATETC m_fe; //Used to create the object
DWORD m_dwState; //State flags
RECTL m_rcl; //Space of this object
CLSID m_clsID; //Object class (for statics)
BOOL m_fSetExtent; //Call SetExtent on next run
class CPages *m_pPG; //Pages window
TENANTTYPE m_tType; //Type identifier
ULONG m_cRef; //We're an object now
LPOLEOBJECT m_pIOleObject; //IOleObject on m_pObj
LPVIEWOBJECT2 m_pIViewObject2; //IViewObject2 on m_pObj
ULONG m_grfMisc; //OLEMISC flags
BOOL m_fRepaintEnabled; //No redundant paints
//Our interfaces
PCImpIOleClientSite m_pImpIOleClientSite;
PCImpIAdviseSink m_pImpIAdviseSink;
LPMONIKER m_pmk; //Relative moniker
LPMONIKER m_pmkFile; //Container document moniker
PCImpIOleInPlaceSite m_pImpIOleIPSite; //Our interface
LPOLEINPLACEOBJECT m_pIOleIPObject; //The object
RECT m_rcPos; //Last object rect
BOOL m_fInRectSet; //Prevent reentrancy
//CHAPTER24MOD
PCImpIOleControlSite m_pImpIOleControlSite; //Implemented
PCImpIDispatch m_pImpIDispatch; //Implemented
PCDispatchEvents m_pDispEvents; //Event Sink
DWORD m_dwConnEvents;
IID m_iidEvents;
PCEventMap m_pEventMap;
//Control interfaces
LPOLECONTROL m_pIOleControl; //Used
LPDISPATCH m_pIDispatchControl; //Used
//Ambient properties
OLE_COLOR m_clrBack;
OLE_COLOR m_clrFore;
IFontDisp *m_pIFont; //Copy from CPages
LCID m_lcid;
BOOL m_fDesignMode;
BOOL m_fUIDead;
BOOL m_fHatchHandles;
//Other state information
BOOL m_fHaveControlInfo;
CONTROLINFO m_ctrlInfo;
ULONG m_cLockInPlace;
BOOL m_fPendingDeactivate;
//End CHAPTER24MOD
/*
* This flag is used exculsively by the implementation of
* IOleUILinkContainer on the page we're in for the Links
* Dialog. Since we never use it ourselves, public here
* is no big deal.
*/
public:
BOOL m_fLinkAvail;
protected:
BOOL ObjectInitialize(LPUNKNOWN, LPFORMATETC, DWORD);
HRESULT CreateStatic(LPDATAOBJECT, LPFORMATETC
, LPUNKNOWN *);
//CHAPTER24MOD
BOOL ControlInitialize(void);
//End CHAPTER24MOD
public:
CTenant(DWORD, HWND, CPages *);
~CTenant(void);
//Gotta have an IUnknown for delegation
STDMETHODIMP QueryInterface(REFIID, PPVOID);
STDMETHODIMP_(ULONG) AddRef(void);
STDMETHODIMP_(ULONG) Release(void);
DWORD GetID(void);
UINT GetStorageName(LPOLESTR);
void StorageGet(LPSTORAGE *);
UINT Create(TENANTTYPE, LPVOID, LPFORMATETC, PPOINTL
, LPSIZEL, LPSTORAGE, PPATRONOBJECT, DWORD);
BOOL Load(LPSTORAGE, PTENANTINFO);
void GetInfo(PTENANTINFO);
BOOL Open(LPSTORAGE);
void Close(BOOL);
BOOL Update(void);
void Destroy(LPSTORAGE);
void Select(BOOL, BOOL);
void ShowAsOpen(BOOL);
void ShowYourself(void);
void AddVerbMenu(HMENU, UINT);
TENANTTYPE TypeGet(void);
void CopyEmbeddedObject(LPDATAOBJECT, LPFORMATETC
, PPOINTL);
void ShowObjectType(BOOL);
void CopyLinkedObject(LPDATAOBJECT, LPFORMATETC
, PPOINTL);
void NotifyOfRename(LPTSTR, LPMONIKER, LPMONIKER);
BOOL Activate(LONG, LPMSG);
void Draw(HDC, DVTARGETDEVICE *, HDC, int, int
, BOOL, BOOL);
void Repaint(void);
void Invalidate(void);
void ObjectClassFormatAndIcon(LPCLSID, LPWORD
, LPTSTR *, HGLOBAL *, LPTSTR *);
BOOL SwitchOrUpdateAspect(HGLOBAL, BOOL);
void EnableRepaint(BOOL);
BOOL FIsSelected(void);
BOOL ConvertToStatic(void);
void ObjectGet(LPUNKNOWN *);
void FormatEtcGet(LPFORMATETC, BOOL);
void SizeGet(LPSIZEL, BOOL);
void SizeSet(LPSIZEL, BOOL, BOOL);
void RectGet(LPRECTL, BOOL);
void RectSet(LPRECTL, BOOL, BOOL);
void DeactivateInPlaceObject(BOOL);
void UpdateInPlaceObjectRects(LPCRECT, BOOL);
HWND ObjectWindow(void);
//CHAPTER24MOD
void ToggleDesignMode(BOOL);
void ToggleUIDead(BOOL);
void ToggleHatchHandles(BOOL);
PCEventMap EventMap(void);
DWORD GetControlFlags();
BOOL TryMnemonic(LPMSG);
void AmbientChange(DISPID);
//End CHAPTER24MOD
};
typedef CTenant *PCTenant;
//Return codes for Create
#define CREATE_FAILED 0
#define CREATE_GRAPHICONLY 1
#define CREATE_PLACEDOBJECT 2
//CHAPTER24MOD
//Helper functions in CONNECT.CPP
BOOL InterfaceConnect(LPUNKNOWN, REFIID, LPUNKNOWN, LPDWORD);
BOOL InterfaceDisconnect(LPUNKNOWN, REFIID, LPDWORD);
BOOL ObjectTypeInfo(LPUNKNOWN, LPTYPEINFO *);
BOOL ObjectTypeInfoEvents(LPUNKNOWN, LPTYPEINFO *);
BOOL ObjectEventsIID(LPUNKNOWN, IID *);
//End CHAPTER24MOD
#endif //_TENANT_H_
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -