⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 hcosmo.h

📁 英文版的 想要的话可以下载了 为大家服务
💻 H
字号:
/*
 * HCOSMO.H
 * Cosmo Handler Chapter 19
 *
 * Definitions and function prototypes for the Cosmo Handler.
 *
 * Copyright (c)1993-1995 Microsoft Corporation, All Rights Reserved
 *
 * Kraig Brockschmidt, Microsoft
 * Internet  :  kraigb@microsoft.com
 * Compuserve:  >INTERNET:kraigb@microsoft.com
 */


#ifndef _HCOSMO_H_
#define _HCOSMO_H_

#define CHAPTER19
#include <inole.h>
#include <ipoly10.h>      //For POLYLINEDATA definitions


#define HIMETRIC_PER_INCH           2540

//Stream name in the object storage
#define SZSTREAM                    OLETEXT("CONTENTS")


//HCOSMO.CPP

class CFigureClassFactory : public IClassFactory
    {
    protected:
        ULONG           m_cRef;         //Reference count on object

    public:
        CFigureClassFactory(void);
        ~CFigureClassFactory(void);

        //IUnknown members
        STDMETHODIMP QueryInterface(REFIID, PPVOID);
        STDMETHODIMP_(ULONG) AddRef(void);
        STDMETHODIMP_(ULONG) Release(void);

        //IClassFactory members
        STDMETHODIMP    CreateInstance(LPUNKNOWN, REFIID, PPVOID);
        STDMETHODIMP    LockServer(BOOL);
    };

typedef CFigureClassFactory *PCFigureClassFactory;


//Magic number to add to aspects returned from IViewObject::Freeze
#define FREEZE_KEY_OFFSET       0x0723



//Forward class references
class CImpIOleObject;
typedef class CImpIOleObject *PCImpIOleObject;
class CImpIViewObject2;
typedef class CImpIViewObject2 *PCImpIViewObject2;
class CImpIPersistStorage;
typedef class CImpIPersistStorage *PCImpIPersistStorage;
class CImpIAdviseSink;
typedef class CImpIAdviseSink *PCImpIAdviseSink;


//HCOSMO.CPP

class CFigure : public IUnknown
    {
    friend class CImpIOleObject;
    friend class CImpIViewObject2;
    friend class CImpIPersistStorage;
    friend class CImpIAdviseSink;

    protected:
        ULONG                m_cRef;
        LPUNKNOWN            m_pUnkOuter;
        PFNDESTROYED         m_pfnDestroy;

        POLYLINEDATA         m_pl;          //Our actual data.
        UINT                 m_cf;          //Obj clipboard format.
        CLSID                m_clsID;       //Current CLSID

        //These are default handler interfaces we use
        LPUNKNOWN            m_pDefIUnknown;
        LPOLEOBJECT          m_pDefIOleObject;
        LPVIEWOBJECT2        m_pDefIViewObject2;
        LPPERSISTSTORAGE     m_pDefIPersistStorage;
        LPDATAOBJECT         m_pDefIDataObject;

        //Implemented interfaces
        PCImpIOleObject      m_pImpIOleObject;
        PCImpIViewObject2    m_pImpIViewObject2;
        PCImpIPersistStorage m_pImpIPersistStorage;
        PCImpIAdviseSink     m_pImpIAdviseSink;

        //Advise sink we get in IViewObject
        LPADVISESINK         m_pIAdvSinkView;
        DWORD                m_dwAdviseFlags;
        DWORD                m_dwAdviseAspects;
        DWORD                m_dwFrozenAspects;

        //Copies of frozen aspects
        POLYLINEDATA         m_plContent;
        POLYLINEDATA         m_plThumbnail;


    protected:
        void      Draw(HDC, LPRECT, DWORD, DVTARGETDEVICE *
                      , HDC, PPOLYLINEDATA);
        void      PointScale(LPRECT, LPPOINTS, BOOL);

    public:
        CFigure(LPUNKNOWN, PFNDESTROYED, HINSTANCE);
        ~CFigure(void);

        BOOL      Init(void);

        //Non-delegating object IUnknown
        STDMETHODIMP QueryInterface(REFIID, PPVOID);
        STDMETHODIMP_(ULONG) AddRef(void);
        STDMETHODIMP_(ULONG) Release(void);
    };

typedef CFigure *PCFigure;



class CImpIPersistStorage : public IPersistStorage
    {
    protected:
        ULONG               m_cRef;
        PCFigure            m_pObj;
        LPUNKNOWN           m_pUnkOuter;
        PSSTATE             m_psState;   //Storage state
        BOOL                m_fConvert;  //Are we Converting?

    public:
        CImpIPersistStorage(PCFigure, LPUNKNOWN);
        ~CImpIPersistStorage(void);

        STDMETHODIMP QueryInterface(REFIID, PPVOID);
        STDMETHODIMP_(ULONG) AddRef(void);
        STDMETHODIMP_(ULONG) Release(void);

        STDMETHODIMP GetClassID(LPCLSID);

        STDMETHODIMP IsDirty(void);
        STDMETHODIMP InitNew(LPSTORAGE);
        STDMETHODIMP Load(LPSTORAGE);
        STDMETHODIMP Save(LPSTORAGE, BOOL);
        STDMETHODIMP SaveCompleted(LPSTORAGE);
        STDMETHODIMP HandsOffStorage(void);
    };



class CImpIOleObject : public IOleObject
    {
    private:
        ULONG           m_cRef;
        PCFigure        m_pObj;
        LPUNKNOWN       m_pUnkOuter;

    public:
        CImpIOleObject(PCFigure, LPUNKNOWN);
        ~CImpIOleObject(void);

        //IUnknown members that delegate to m_pUnkOuter.
        STDMETHODIMP         QueryInterface(REFIID, PPVOID);
        STDMETHODIMP_(ULONG) AddRef(void);
        STDMETHODIMP_(ULONG) Release(void);

        //IOleObject members
        STDMETHODIMP SetClientSite(LPOLECLIENTSITE);
        STDMETHODIMP GetClientSite(LPOLECLIENTSITE *);
        STDMETHODIMP SetHostNames(LPCOLESTR, LPCOLESTR);
        STDMETHODIMP Close(DWORD);
        STDMETHODIMP SetMoniker(DWORD, LPMONIKER);
        STDMETHODIMP GetMoniker(DWORD, DWORD, LPMONIKER *);
        STDMETHODIMP InitFromData(LPDATAOBJECT, BOOL, DWORD);
        STDMETHODIMP GetClipboardData(DWORD, LPDATAOBJECT *);
        STDMETHODIMP DoVerb(LONG, LPMSG, LPOLECLIENTSITE, LONG
                         , HWND, LPCRECT);
        STDMETHODIMP EnumVerbs(LPENUMOLEVERB *);
        STDMETHODIMP Update(void);
        STDMETHODIMP IsUpToDate(void);
        STDMETHODIMP GetUserClassID(CLSID *);
        STDMETHODIMP GetUserType(DWORD, LPOLESTR *);
        STDMETHODIMP SetExtent(DWORD, LPSIZEL);
        STDMETHODIMP GetExtent(DWORD, LPSIZEL);
        STDMETHODIMP Advise(LPADVISESINK, DWORD *);
        STDMETHODIMP Unadvise(DWORD);
        STDMETHODIMP EnumAdvise(LPENUMSTATDATA *);
        STDMETHODIMP GetMiscStatus(DWORD, DWORD *);
        STDMETHODIMP SetColorScheme(LPLOGPALETTE);
    };


class CImpIViewObject2 : public IViewObject2
    {
    private:
        ULONG           m_cRef;
        PCFigure        m_pObj;
        LPUNKNOWN       m_pUnkOuter;

    public:
        CImpIViewObject2(PCFigure, LPUNKNOWN);
        ~CImpIViewObject2(void);

        //IUnknown members that delegate to m_pUnkOuter.
        STDMETHODIMP         QueryInterface(REFIID, PPVOID);
        STDMETHODIMP_(ULONG) AddRef(void);
        STDMETHODIMP_(ULONG) Release(void);

        //IViewObject2 members
        STDMETHODIMP Draw(DWORD, LONG, LPVOID, DVTARGETDEVICE *
            , HDC, HDC, LPCRECTL, LPCRECTL
            , BOOL (CALLBACK *)(DWORD), DWORD);
        STDMETHODIMP GetColorSet(DWORD, LONG, LPVOID
            , DVTARGETDEVICE *, HDC, LPLOGPALETTE *);
        STDMETHODIMP Freeze(DWORD, LONG, LPVOID, LPDWORD);
        STDMETHODIMP Unfreeze(DWORD);
        STDMETHODIMP SetAdvise(DWORD, DWORD, LPADVISESINK);
        STDMETHODIMP GetAdvise(LPDWORD, LPDWORD, LPADVISESINK *);
        STDMETHODIMP GetExtent(DWORD, LONG, DVTARGETDEVICE *
            , LPSIZEL);
    };


class CImpIAdviseSink : public IAdviseSink
    {
    protected:
        ULONG           m_cRef;
        PCFigure        m_pObj;
        LPUNKNOWN       m_pUnkOuter;

    public:
        CImpIAdviseSink(PCFigure, LPUNKNOWN);
        ~CImpIAdviseSink(void);

        STDMETHODIMP QueryInterface(REFIID, PPVOID);
        STDMETHODIMP_(ULONG) AddRef(void);
        STDMETHODIMP_(ULONG) Release(void);

        STDMETHODIMP_(void)  OnDataChange(LPFORMATETC, LPSTGMEDIUM);
        STDMETHODIMP_(void)  OnViewChange(DWORD, LONG);
        STDMETHODIMP_(void)  OnRename(LPMONIKER);
        STDMETHODIMP_(void)  OnSave(void);
        STDMETHODIMP_(void)  OnClose(void);
    };


#endif  //_HCOSMO_H_

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -