Ignore:
Timestamp:
Nov 14, 1999, 10:07:18 PM (26 years ago)
Author:
davidr
Message:

Tidy up IPicture implentation - now handles fOwn.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/oleaut32/iPicture.h

    r1729 r1743  
    1 /* $Id: iPicture.h,v 1.1 1999-11-14 01:26:36 davidr Exp $ */
     1/* $Id: iPicture.h,v 1.2 1999-11-14 21:04:43 davidr Exp $ */
    22/*
    33 * OLE Picture functions private header
     
    1414#define IPICTURE_INCLUDED
    1515
    16 #define PICTYPE_UNINITIALIZED (-1)
    17 #define PICTYPE_NONE            0
    18 #define PICTYPE_BITMAP          1
    19 #define PICTYPE_METAFILE        2
    20 #define PICTYPE_ICON            3
    21 #define PICTYPE_ENHMETAFILE     4
    22 
    23 typedef struct tagPICTDESC
    24 {
    25     UINT cbSizeofstruct;
    26     UINT picType;
     16class IPictureStrat;    // Forward defn.
     17
     18typedef struct IPictureImpl {
     19
     20    // IUnknown, IPicture
     21    ICOM_VTABLE(IPicture) *             lpvtbl1;
     22
     23    // IDispatch, IPictureDisp
     24    ICOM_VTABLE(IDispatch) *            lpvtbl2;
     25
     26    // IPersistStream
     27    ICOM_VTABLE(IPersistStream) *       lpvtbl3;
     28
     29    ULONG               ref;            // Reference counter...
     30
     31    IPictureStrat *     pStrat;         // Current object strategy.
     32
    2733    union
    2834    {
     
    5157    } u;
    5258
    53 } PICTDESC, * LPPICTDESC;
     59    BOOL                fKeepOriginalFormat;
     60    BOOL                fOwn;
     61    HDC                 hCurDC;
     62    DWORD               lAttrib;
     63
     64} IPictureImpl;
     65
     66class IPictureStrat
     67{
     68public:
     69    virtual HRESULT get_Handle(OLE_HANDLE * pHandle) = 0;
     70    virtual HRESULT get_hPal(OLE_HANDLE * phPal) = 0;
     71    virtual HRESULT get_Type(SHORT * pType) = 0;
     72    virtual HRESULT get_Width(OLE_XSIZE_HIMETRIC * pWidth) = 0;
     73    virtual HRESULT get_Height(OLE_YSIZE_HIMETRIC * pHeight) = 0;
     74    virtual HRESULT Render(HDC hdc, LONG x, LONG y, LONG cx, LONG cy,
     75                                    OLE_XPOS_HIMETRIC xSrc, OLE_YPOS_HIMETRIC ySrc,
     76                                    OLE_XSIZE_HIMETRIC cxSrc, OLE_YSIZE_HIMETRIC cySrc,
     77                                    LPCRECT pRcWBounds) = 0;
     78    virtual HRESULT set_hPal(OLE_HANDLE hPal) = 0;
     79    virtual HRESULT SaveAsFile(LPSTREAM pStream, BOOL fSaveMemCopy, LONG * pCbSize) = 0;
     80    virtual HRESULT get_Attributes(DWORD * pDwAttr) = 0;
     81
     82    virtual ~IPictureStrat() {};
     83
     84protected:
     85    IPictureStrat(IPictureImpl * a_pPicture) {pPicture = a_pPicture; }
     86
     87    IPictureImpl *      pPicture;
     88
     89private:
     90
     91};
     92
     93// ======================================================================
     94// Uninitialised Picture
     95// ======================================================================
     96
     97class IPictureNone : public IPictureStrat
     98{
     99public:
     100    IPictureNone(IPictureImpl * a_pPicture) : IPictureStrat(a_pPicture) {}
     101    HRESULT get_Handle(OLE_HANDLE * pHandle);
     102    HRESULT get_hPal(OLE_HANDLE * phPal);
     103    HRESULT get_Type(SHORT * pType);
     104    HRESULT get_Width(OLE_XSIZE_HIMETRIC * pWidth);
     105    HRESULT get_Height(OLE_YSIZE_HIMETRIC * pHeight);
     106    HRESULT Render(HDC hdc, LONG x, LONG y, LONG cx, LONG cy,
     107                                    OLE_XPOS_HIMETRIC xSrc, OLE_YPOS_HIMETRIC ySrc,
     108                                    OLE_XSIZE_HIMETRIC cxSrc, OLE_YSIZE_HIMETRIC cySrc,
     109                                    LPCRECT pRcWBounds);
     110    HRESULT set_hPal(OLE_HANDLE hPal);
     111    HRESULT SaveAsFile(LPSTREAM pStream, BOOL fSaveMemCopy, LONG * pCbSize);
     112    HRESULT get_Attributes(DWORD * pDwAttr);
     113
     114protected:
     115
     116private:
     117
     118};
     119
     120
     121// ======================================================================
     122// Bitmap Picture
     123// ======================================================================
     124
     125class IPictureBmp : public IPictureStrat
     126{
     127public:
     128    IPictureBmp(IPictureImpl * a_pPicture, HBITMAP hBitmap, HPALETTE hpal);
     129    ~IPictureBmp();
     130    HRESULT get_Handle(OLE_HANDLE * pHandle);
     131    HRESULT get_hPal(OLE_HANDLE * phPal);
     132    HRESULT get_Type(SHORT * pType);
     133    HRESULT get_Width(OLE_XSIZE_HIMETRIC * pWidth);
     134    HRESULT get_Height(OLE_YSIZE_HIMETRIC * pHeight);
     135    HRESULT Render(HDC hdc, LONG x, LONG y, LONG cx, LONG cy,
     136                                    OLE_XPOS_HIMETRIC xSrc, OLE_YPOS_HIMETRIC ySrc,
     137                                    OLE_XSIZE_HIMETRIC cxSrc, OLE_YSIZE_HIMETRIC cySrc,
     138                                    LPCRECT pRcWBounds);
     139    HRESULT set_hPal(OLE_HANDLE hPal);
     140    HRESULT SaveAsFile(LPSTREAM pStream, BOOL fSaveMemCopy, LONG * pCbSize);
     141    HRESULT get_Attributes(DWORD * pDwAttr);
     142
     143protected:
     144
     145private:
     146
     147};
     148
     149
     150// ======================================================================
     151// Icon Picture
     152// ======================================================================
     153
     154class IPictureIcon : public IPictureStrat
     155{
     156public:
     157    IPictureIcon(IPictureImpl * a_pPicture, HICON hicon);
     158    ~IPictureIcon();
     159    HRESULT get_Handle(OLE_HANDLE * pHandle);
     160    HRESULT get_hPal(OLE_HANDLE * phPal);
     161    HRESULT get_Type(SHORT * pType);
     162    HRESULT get_Width(OLE_XSIZE_HIMETRIC * pWidth);
     163    HRESULT get_Height(OLE_YSIZE_HIMETRIC * pHeight);
     164    HRESULT Render(HDC hdc, LONG x, LONG y, LONG cx, LONG cy,
     165                                    OLE_XPOS_HIMETRIC xSrc, OLE_YPOS_HIMETRIC ySrc,
     166                                    OLE_XSIZE_HIMETRIC cxSrc, OLE_YSIZE_HIMETRIC cySrc,
     167                                    LPCRECT pRcWBounds);
     168    HRESULT set_hPal(OLE_HANDLE hPal);
     169    HRESULT get_CurDC(HDC * phDC);
     170    HRESULT put_KeepOriginalFormat(BOOL Keep);
     171    HRESULT SaveAsFile(LPSTREAM pStream, BOOL fSaveMemCopy, LONG * pCbSize);
     172    HRESULT get_Attributes(DWORD * pDwAttr);
     173
     174protected:
     175
     176private:
     177
     178};
     179
     180// ======================================================================
     181// Metafile Picture
     182// ======================================================================
     183
     184class IPictureMeta : public IPictureStrat
     185{
     186public:
     187    IPictureMeta(IPictureImpl * a_pPicture, HMETAFILE hmeta, int xExt, int yExt);
     188    ~IPictureMeta();
     189    HRESULT get_Handle(OLE_HANDLE * pHandle);
     190    HRESULT get_hPal(OLE_HANDLE * phPal);
     191    HRESULT get_Type(SHORT * pType);
     192    HRESULT get_Width(OLE_XSIZE_HIMETRIC * pWidth);
     193    HRESULT get_Height(OLE_YSIZE_HIMETRIC * pHeight);
     194    HRESULT Render(HDC hdc, LONG x, LONG y, LONG cx, LONG cy,
     195                                    OLE_XPOS_HIMETRIC xSrc, OLE_YPOS_HIMETRIC ySrc,
     196                                    OLE_XSIZE_HIMETRIC cxSrc, OLE_YSIZE_HIMETRIC cySrc,
     197                                    LPCRECT pRcWBounds);
     198    HRESULT set_hPal(OLE_HANDLE hPal);
     199    HRESULT SaveAsFile(LPSTREAM pStream, BOOL fSaveMemCopy, LONG * pCbSize);
     200    HRESULT get_Attributes(DWORD * pDwAttr);
     201
     202protected:
     203
     204private:
     205
     206};
     207
     208// ======================================================================
     209// Enhanced Metafile Picture
     210// ======================================================================
     211
     212class IPictureEmf : public IPictureStrat
     213{
     214public:
     215    IPictureEmf(IPictureImpl * a_pPicture, HENHMETAFILE hemf);
     216    ~IPictureEmf();
     217    HRESULT get_Handle(OLE_HANDLE * pHandle);
     218    HRESULT get_hPal(OLE_HANDLE * phPal);
     219    HRESULT get_Type(SHORT * pType);
     220    HRESULT get_Width(OLE_XSIZE_HIMETRIC * pWidth);
     221    HRESULT get_Height(OLE_YSIZE_HIMETRIC * pHeight);
     222    HRESULT Render(HDC hdc, LONG x, LONG y, LONG cx, LONG cy,
     223                                    OLE_XPOS_HIMETRIC xSrc, OLE_YPOS_HIMETRIC ySrc,
     224                                    OLE_XSIZE_HIMETRIC cxSrc, OLE_YSIZE_HIMETRIC cySrc,
     225                                    LPCRECT pRcWBounds);
     226    HRESULT set_hPal(OLE_HANDLE hPal);
     227    HRESULT SaveAsFile(LPSTREAM pStream, BOOL fSaveMemCopy, LONG * pCbSize);
     228    HRESULT get_Attributes(DWORD * pDwAttr);
     229
     230protected:
     231
     232private:
     233
     234};
     235
     236IPictureEmf::IPictureEmf(IPictureImpl * a_pPicture, HENHMETAFILE hemf)
     237    : IPictureStrat(a_pPicture)
     238{
     239    pPicture->u.emf.hemf = hemf;
     240}
     241
     242IPictureEmf::~IPictureEmf()
     243{
     244    if (pPicture->fOwn)
     245    {
     246        // Free metafile...
     247        DeleteEnhMetaFile(pPicture->u.emf.hemf);
     248    }
     249}
     250
     251HRESULT IPictureEmf::get_Handle(OLE_HANDLE * pHandle)
     252{
     253    *pHandle = pPicture->u.emf.hemf;
     254    return S_OK;
     255}
     256
     257HRESULT IPictureEmf::get_hPal(OLE_HANDLE * phPal)
     258{
     259    *phPal = 0;
     260    return S_OK;
     261}
     262
     263HRESULT IPictureEmf::get_Type(SHORT * pType)
     264{
     265    *pType = PICTYPE_ENHMETAFILE;
     266    return S_OK;
     267}
     268
     269HRESULT IPictureEmf::get_Width(OLE_XSIZE_HIMETRIC * pWidth)
     270{
     271    *pWidth = 0;
     272    return E_FAIL;
     273}
     274
     275HRESULT IPictureEmf::get_Height(OLE_YSIZE_HIMETRIC * pHeight)
     276{
     277    *pHeight = 0;
     278    return E_FAIL;
     279}
     280
     281HRESULT IPictureEmf::Render(HDC hdc, LONG x, LONG y, LONG cx, LONG cy,
     282                                OLE_XPOS_HIMETRIC xSrc, OLE_YPOS_HIMETRIC ySrc,
     283                                OLE_XSIZE_HIMETRIC cxSrc, OLE_YSIZE_HIMETRIC cySrc,
     284                                LPCRECT pRcWBounds)
     285{
     286    return E_FAIL;
     287}
     288
     289HRESULT IPictureEmf::set_hPal(OLE_HANDLE hPal)
     290{
     291    return E_FAIL;
     292}
     293
     294HRESULT IPictureEmf::SaveAsFile(LPSTREAM pStream, BOOL fSaveMemCopy, LONG * pCbSize)
     295{
     296    return E_FAIL;
     297}
     298
     299HRESULT IPictureEmf::get_Attributes(DWORD * pDwAttr)
     300{
     301    *pDwAttr = PICTURE_SCALEABLE | PICTURE_TRANSPARENT;
     302    return S_OK;
     303}
     304
     305// Access macros
     306#define _ICOM_THIS(class, name) class* This = (class*)name;
     307#define _ICOM_THIS_From_IDispatch(class, name) class * This = (class*)(((char*)name)-sizeof(void*));
     308#define _ICOM_THIS_From_IPersistStream(class, name) class * This = (class*)(((char*)name)-2*sizeof(void*));
    54309
    55310#endif /* IPICTURE_INCLUDED */
Note: See TracChangeset for help on using the changeset viewer.