Changeset 1743 for trunk/src


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

Tidy up IPicture implentation - now handles fOwn.

Location:
trunk/src/oleaut32
Files:
3 edited

Legend:

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

    r1729 r1743  
    1 /* $Id: iPicture.cpp,v 1.1 1999-11-14 01:26:35 davidr Exp $ */
     1/* $Id: iPicture.cpp,v 1.2 1999-11-14 21:05:08 davidr Exp $ */
    22/*
    33 * OLE Picture functions
     
    2020 
    2121#include "oleaut32.h"
     22#include "olectl.h"
    2223#include "ipicture.h"
    2324
    24 typedef struct IPictureImpl {
    25 
    26     // IUnknown, IPictureImpl
    27     ICOM_VTABLE(IPicture) *             lpvtbl1;
    28 
    29     // IDispatch, IPictureImplDisp
    30     ICOM_VTABLE(IDispatch) *            lpvtbl2;
    31 
    32     // IPersistStream
    33     ICOM_VTABLE(IPersistStream) *       lpvtbl3;
    34 
    35     ULONG               ref;            // Reference counter...
    36 
    37 //    PICTDESC          description;
    38 
    39     short               sType;
    40     HANDLE              hPicture;
    41     HANDLE              hPal;
    42     BOOL                fKeepOriginalFormat;
    43     BOOL                fOwn;
    44     HDC                 hdc;
    45     DWORD               lAttrib;
    46 
    47 } IPictureImpl;
    48 
    49 // Access macros
    50 #define _ICOM_THIS(class, name) class* This = (class*)name;
    51 #define _ICOM_THIS_From_IDispatch(class, name) class * This = (class*)(((char*)name)-sizeof(void*));
    52 #define _ICOM_THIS_From_IPersistStream(class, name) class * This = (class*)(((char*)name)-2*sizeof(void*));
    5325
    5426// ======================================================================
     
    190162
    191163// ----------------------------------------------------------------------
     164// Uninitialised Picture
     165// ----------------------------------------------------------------------
     166HRESULT IPictureNone::get_Handle(OLE_HANDLE * pHandle)
     167{
     168    *pHandle = 0;
     169    return E_FAIL;
     170}
     171
     172HRESULT IPictureNone::get_hPal(OLE_HANDLE * phPal)
     173{
     174    *phPal = 0;
     175    return E_FAIL;
     176}
     177
     178HRESULT IPictureNone::get_Type(SHORT * pType)
     179{
     180    *pType = PICTYPE_UNINITIALIZED;
     181    return S_OK;
     182}
     183
     184HRESULT IPictureNone::get_Width(OLE_XSIZE_HIMETRIC * pWidth)
     185{
     186    *pWidth = 0;
     187    return E_FAIL;
     188}
     189
     190HRESULT IPictureNone::get_Height(OLE_YSIZE_HIMETRIC * pHeight)
     191{
     192    *pHeight = 0;
     193    return E_FAIL;
     194}
     195
     196HRESULT IPictureNone::Render(HDC hdc, LONG x, LONG y, LONG cx, LONG cy,
     197                                OLE_XPOS_HIMETRIC xSrc, OLE_YPOS_HIMETRIC ySrc,
     198                                OLE_XSIZE_HIMETRIC cxSrc, OLE_YSIZE_HIMETRIC cySrc,
     199                                LPCRECT pRcWBounds)
     200{
     201    return E_FAIL;
     202}
     203
     204HRESULT IPictureNone::set_hPal(OLE_HANDLE hPal)
     205{
     206    return E_FAIL;
     207}
     208
     209HRESULT IPictureNone::SaveAsFile(LPSTREAM pStream, BOOL fSaveMemCopy, LONG * pCbSize)
     210{
     211    return E_FAIL;
     212}
     213
     214HRESULT IPictureNone::get_Attributes(DWORD * pDwAttr)
     215{
     216    *pDwAttr = 0;
     217    return S_OK;
     218}
     219
     220IPictureBmp::IPictureBmp(IPictureImpl * a_pPicture, HBITMAP hbitmap, HPALETTE hpal)
     221    : IPictureStrat(a_pPicture)
     222{
     223    pPicture->u.bmp.hbitmap = hbitmap;
     224    pPicture->u.bmp.hpal = hpal;
     225}
     226
     227// ----------------------------------------------------------------------
     228// Icon Picture
     229// ----------------------------------------------------------------------
     230IPictureBmp::~IPictureBmp()
     231{
     232    if (pPicture->fOwn)
     233    {
     234        // Free bitmap...
     235        DeleteObject(pPicture->u.bmp.hbitmap);
     236        DeleteObject(pPicture->u.bmp.hpal);
     237    }
     238}
     239
     240HRESULT IPictureBmp::get_Handle(OLE_HANDLE * pHandle)
     241{
     242    *pHandle = pPicture->u.bmp.hbitmap;
     243    return S_OK;
     244}
     245
     246HRESULT IPictureBmp::get_hPal(OLE_HANDLE * phPal)
     247{
     248    *phPal = pPicture->u.bmp.hpal;
     249    return S_OK;
     250}
     251
     252HRESULT IPictureBmp::get_Type(SHORT * pType)
     253{
     254    *pType = PICTYPE_BITMAP;
     255    return S_OK;
     256}
     257
     258HRESULT IPictureBmp::get_Width(OLE_XSIZE_HIMETRIC * pWidth)
     259{
     260    SIZE        size;
     261
     262    if (GetBitmapDimensionEx( pPicture->u.bmp.hbitmap, &size) == 0)
     263    {
     264        *pWidth = 0;
     265        return E_FAIL;
     266    }
     267
     268    *pWidth = size.cx;
     269
     270    return S_OK;
     271}
     272
     273HRESULT IPictureBmp::get_Height(OLE_YSIZE_HIMETRIC * pHeight)
     274{
     275    SIZE        size;
     276
     277    if (GetBitmapDimensionEx( pPicture->u.bmp.hbitmap, &size) == 0)
     278    {
     279        *pHeight = 0;
     280        return E_FAIL;
     281    }
     282
     283    *pHeight = size.cy;
     284
     285    return S_OK;
     286}
     287
     288HRESULT IPictureBmp::Render(HDC hdc, LONG x, LONG y, LONG cx, LONG cy,
     289                                OLE_XPOS_HIMETRIC xSrc, OLE_YPOS_HIMETRIC ySrc,
     290                                OLE_XSIZE_HIMETRIC cxSrc, OLE_YSIZE_HIMETRIC cySrc,
     291                                LPCRECT pRcWBounds)
     292{
     293    return E_FAIL;
     294}
     295
     296HRESULT IPictureBmp::set_hPal(OLE_HANDLE hPal)
     297{
     298    pPicture->u.bmp.hpal = hPal;
     299    return S_OK;
     300}
     301
     302HRESULT IPictureBmp::SaveAsFile(LPSTREAM pStream, BOOL fSaveMemCopy, LONG * pCbSize)
     303{
     304    return E_FAIL;
     305}
     306
     307HRESULT IPictureBmp::get_Attributes(DWORD * pDwAttr)
     308{
     309    // Although bitmaps may be scaled, it is really stretching.
     310    *pDwAttr = 0;
     311    return S_OK;
     312}
     313
     314// ----------------------------------------------------------------------
     315// Metafile Picture
     316// ----------------------------------------------------------------------
     317IPictureIcon::IPictureIcon(IPictureImpl * a_pPicture, HICON hicon)
     318    : IPictureStrat(a_pPicture)
     319{
     320    pPicture->u.icon.hicon = hicon;
     321}
     322
     323IPictureIcon::~IPictureIcon()
     324{
     325    if (pPicture->fOwn)
     326    {
     327        // Free icon...
     328        DestroyIcon(pPicture->u.icon.hicon);
     329    }
     330}
     331
     332HRESULT IPictureIcon::get_Handle(OLE_HANDLE * pHandle)
     333{
     334    *pHandle = pPicture->u.icon.hicon;
     335    return S_OK;
     336}
     337
     338HRESULT IPictureIcon::get_hPal(OLE_HANDLE * phPal)
     339{
     340    *phPal = 0;
     341    return S_OK;
     342}
     343
     344HRESULT IPictureIcon::get_Type(SHORT * pType)
     345{
     346    *pType = PICTYPE_ICON;
     347    return S_OK;
     348}
     349
     350HRESULT IPictureIcon::get_Width(OLE_XSIZE_HIMETRIC * pWidth)
     351{
     352    // FIXME - Read from system constants...
     353    *pWidth = 32;
     354
     355    return S_OK;
     356}
     357
     358HRESULT IPictureIcon::get_Height(OLE_YSIZE_HIMETRIC * pHeight)
     359{
     360    // FIXME - Read from system constants...
     361    *pHeight = 32;
     362
     363    return S_OK;
     364}
     365
     366HRESULT IPictureIcon::Render(HDC hdc, LONG x, LONG y, LONG cx, LONG cy,
     367                                OLE_XPOS_HIMETRIC xSrc, OLE_YPOS_HIMETRIC ySrc,
     368                                OLE_XSIZE_HIMETRIC cxSrc, OLE_YSIZE_HIMETRIC cySrc,
     369                                LPCRECT pRcWBounds)
     370{
     371    return E_FAIL;
     372}
     373
     374HRESULT IPictureIcon::set_hPal(OLE_HANDLE hPal)
     375{
     376    return E_FAIL;
     377}
     378
     379HRESULT IPictureIcon::SaveAsFile(LPSTREAM pStream, BOOL fSaveMemCopy, LONG * pCbSize)
     380{
     381    return E_FAIL;
     382}
     383
     384HRESULT IPictureIcon::get_Attributes(DWORD * pDwAttr)
     385{
     386    *pDwAttr = PICTURE_TRANSPARENT;
     387    return S_OK;
     388}
     389
     390// ----------------------------------------------------------------------
     391// Enhanced Metafile Picture
     392// ----------------------------------------------------------------------
     393
     394IPictureMeta::IPictureMeta(IPictureImpl * a_pPicture, HMETAFILE hmeta, int xExt, int yExt)
     395    : IPictureStrat(a_pPicture)
     396{
     397    pPicture->u.wmf.hmeta = hmeta;
     398    pPicture->u.wmf.xExt = xExt;
     399    pPicture->u.wmf.yExt = yExt;
     400}
     401
     402IPictureMeta::~IPictureMeta()
     403{
     404    if (pPicture->fOwn)
     405    {
     406        // Free metafile...
     407        DeleteMetaFile(pPicture->u.wmf.hmeta);
     408    }
     409}
     410
     411HRESULT IPictureMeta::get_Handle(OLE_HANDLE * pHandle)
     412{
     413    *pHandle = pPicture->u.wmf.hmeta;
     414    return S_OK;
     415}
     416
     417HRESULT IPictureMeta::get_hPal(OLE_HANDLE * phPal)
     418{
     419    *phPal = 0;
     420    return E_FAIL;
     421}
     422
     423HRESULT IPictureMeta::get_Type(SHORT * pType)
     424{
     425    *pType = PICTYPE_METAFILE;
     426    return S_OK;
     427}
     428
     429HRESULT IPictureMeta::get_Width(OLE_XSIZE_HIMETRIC * pWidth)
     430{
     431    *pWidth = pPicture->u.wmf.xExt;
     432    return S_OK;
     433}
     434
     435HRESULT IPictureMeta::get_Height(OLE_YSIZE_HIMETRIC * pHeight)
     436{
     437    *pHeight = pPicture->u.wmf.yExt;
     438    return S_OK;
     439}
     440
     441HRESULT IPictureMeta::Render(HDC hdc, LONG x, LONG y, LONG cx, LONG cy,
     442                                OLE_XPOS_HIMETRIC xSrc, OLE_YPOS_HIMETRIC ySrc,
     443                                OLE_XSIZE_HIMETRIC cxSrc, OLE_YSIZE_HIMETRIC cySrc,
     444                                LPCRECT pRcWBounds)
     445{
     446    return E_FAIL;
     447}
     448
     449HRESULT IPictureMeta::set_hPal(OLE_HANDLE hPal)
     450{
     451    return E_FAIL;
     452}
     453
     454HRESULT IPictureMeta::SaveAsFile(LPSTREAM pStream, BOOL fSaveMemCopy, LONG * pCbSize)
     455{
     456    return E_FAIL;
     457}
     458
     459HRESULT IPictureMeta::get_Attributes(DWORD * pDwAttr)
     460{
     461    *pDwAttr = PICTURE_SCALEABLE | PICTURE_TRANSPARENT;
     462    return S_OK;
     463}
     464
     465// ----------------------------------------------------------------------
    192466// IPictureImpl_QueryInterface
    193467// ----------------------------------------------------------------------
     
    200474        return 0;
    201475
    202     dprintf(("OLEAUT32: IPictureImpl(%p)->Contructor()\n", newObject));
     476    dprintf(("OLEAUT32: IPictureImpl(%p)->Contructor(fOwn = %d)\n", newObject, fOwn));
    203477
    204478    // Initialise the vft's
     
    213487    // If a description is not passed then leave the picture uninitialised...
    214488    if (description == 0)
    215         newObject->sType = PICTYPE_NONE;
     489        newObject->pStrat = new IPictureNone(newObject);
    216490    else
    217491    {
     
    225499        {
    226500            case PICTYPE_BITMAP:
    227                 dprintf(("OLEAUT32: IPictureImpl(%p)->Constructor - Creating bitmap", newObject));
    228 
    229                 newObject->sType = PICTYPE_BITMAP;
    230 
    231                 // Allocate picture from bitmap...
    232 
    233 //              newObject->description.u.bmp.hbitmap = description->u.bmp.hbitmap;
    234 //              newObject->description.u.bmp.hpal = description->u.bmp.hpal;
    235 
     501                newObject->pStrat = new IPictureBmp(
     502                                            newObject,
     503                                            description->u.bmp.hbitmap,
     504                                            description->u.bmp.hpal);
    236505                break;
    237506
    238507            case PICTYPE_METAFILE:
    239                 dprintf(("OLEAUT32: IPictureImpl(%p)->Constructor - Creating metafile", newObject));
    240 
    241                 newObject->sType = PICTYPE_METAFILE;
    242 
    243 //              newObject->description.u.wmf.hmeta = description->u.wmf.hmeta;
    244 //              newObject->description.u.wmf.xExt = description->u.wmf.xExt;
    245 //              newObject->description.u.wmf.yExt = description->u.wmf.yExt;
     508                newObject->pStrat = new IPictureMeta(newObject,
     509                                            description->u.wmf.hmeta,
     510                                            description->u.wmf.xExt,
     511                                            description->u.wmf.yExt);
    246512                break;
    247513
    248514            case PICTYPE_ICON:
    249                 dprintf(("OLEAUT32: IPictureImpl(%p)->Constructor - Creating icon", newObject));
    250 
    251                 newObject->sType = PICTYPE_ICON;
    252 
    253 //              newObject->description.u.icon.hicon = description->u.icon.hicon;
     515                newObject->pStrat = new IPictureIcon(newObject,
     516                                            description->u.icon.hicon);
    254517                break;
    255518
    256519            case PICTYPE_ENHMETAFILE:
    257                 dprintf(("OLEAUT32: IPictureImpl(%p)->Constructor - Creating enh metafile", newObject));
    258                 newObject->sType = PICTYPE_ENHMETAFILE;
    259 
    260 //              newObject->description.u.emf.hemf = description->u.emf.hemf;
     520                newObject->pStrat = new IPictureIcon(newObject,
     521                                            description->u.emf.hemf);
    261522                break;
    262523
    263524            default:
    264525                // assume uninitialised...
    265                 dprintf(("OLEAUT32: IPictureImpl(%p)->Constructor - Creating uninitialised", newObject));
    266                 newObject->sType = PICTYPE_NONE;
     526                newObject->pStrat = new IPictureNone(newObject);
    267527                break;
    268528        }
     
    278538{
    279539    dprintf(("OLEAUT32: IPictureImpl(%p)->Destructor()\n", obj));
     540
     541    delete obj->pStrat;
    280542
    281543    HeapFree(GetProcessHeap(), 0, obj);
     
    362624
    363625    // Return the handle...
    364     *pHandle = This->hPicture;
    365 
    366     return S_OK;
     626    return This->pStrat->get_Handle(pHandle);
    367627}
    368628
     
    382642
    383643    // Return the handle...
    384     *phPal = This->hPal;
    385 
    386     return S_OK;
     644    return This->pStrat->get_hPal(phPal);
    387645}
    388646
     
    402660
    403661    // Return the type...
    404     if (This->sType == PICTYPE_NONE)
    405         *pType = PICTYPE_UNINITIALIZED;
    406     else
    407         *pType = This->sType;
    408 
    409     return S_OK;
    410 }
    411 
    412 // ----------------------------------------------------------------------
    413 //
     662    return This->pStrat->get_Type(pType);
     663}
     664
     665// ----------------------------------------------------------------------
     666// IPictureImpl_get_Width
    414667// ----------------------------------------------------------------------
    415668static HRESULT WIN32API IPictureImpl_get_Width(LPPICTURE iface,
     
    420673    dprintf(("OLEAUT32: IPictureImpl(%p)->get_Width()", This));
    421674
    422     return E_NOTIMPL;
    423 }
    424 
    425 // ----------------------------------------------------------------------
    426 //
     675    // Sanity check...
     676    if (pWidth == 0)
     677        return E_POINTER;
     678
     679    // Return the width...
     680    return This->pStrat->get_Width(pWidth);
     681}
     682
     683// ----------------------------------------------------------------------
     684// IPictureImpl_get_Height
    427685// ----------------------------------------------------------------------
    428686static HRESULT WIN32API IPictureImpl_get_Height(LPPICTURE iface,
     
    433691    dprintf(("OLEAUT32: IPictureImpl(%p)->get_Height()", This));
    434692
    435     return E_NOTIMPL;
    436 }
    437 
    438 // ----------------------------------------------------------------------
    439 //
     693    // Sanity check...
     694    if (pHeight == 0)
     695        return E_POINTER;
     696
     697    // Return the height...
     698    return This->pStrat->get_Height(pHeight);
     699}
     700
     701// ----------------------------------------------------------------------
     702// IPictureImpl_Render
    440703// ----------------------------------------------------------------------
    441704static HRESULT WIN32API IPictureImpl_Render(LPPICTURE iface,
     
    449712    dprintf(("OLEAUT32: IPictureImpl(%p)->Render()", This));
    450713
    451     return E_NOTIMPL;
    452 }
    453 
    454 // ----------------------------------------------------------------------
    455 //
     714    // Delegate...
     715    return This->pStrat->Render(hdc, x, y, cx, cy, xSrc, ySrc, cxSrc, cySrc, pRcWBounds);
     716}
     717
     718// ----------------------------------------------------------------------
     719// IPictureImpl_set_hPal
    456720// ----------------------------------------------------------------------
    457721static HRESULT WIN32API IPictureImpl_set_hPal(LPPICTURE iface,
     
    462726    dprintf(("OLEAUT32: IPictureImpl(%p)->set_hPal()", This));
    463727
    464     return E_NOTIMPL;
    465 }
    466 
    467 // ----------------------------------------------------------------------
    468 //
     728    //Delegate...
     729    return This->pStrat->set_hPal(hPal);
     730}
     731
     732// ----------------------------------------------------------------------
     733// IPictureImpl_get_CurDC
    469734// ----------------------------------------------------------------------
    470735static HRESULT WIN32API IPictureImpl_get_CurDC(LPPICTURE iface,
     
    475740    dprintf(("OLEAUT32: IPictureImpl(%p)->get_CurDC()", This));
    476741
    477     return E_NOTIMPL;
    478 }
    479 
    480 // ----------------------------------------------------------------------
    481 //
     742    // Sanity check
     743    if (phDC == 0)
     744        return E_POINTER;
     745
     746    // Return current hDC
     747    *phDC = This->hCurDC;
     748
     749    return S_OK;
     750}
     751
     752// ----------------------------------------------------------------------
     753// IPictureImpl_SelectPicture
    482754// ----------------------------------------------------------------------
    483755static HRESULT WIN32API IPictureImpl_SelectPicture(LPPICTURE iface,
     
    486758    _ICOM_THIS(IPictureImpl, iface);
    487759
    488     dprintf(("OLEAUT32: IPictureImpl(%p)->SelectPicture()", This));
     760    dprintf(("OLEAUT32: IPictureImpl(%p)->SelectPicture() - Stub", This));
    489761
    490762    return E_NOTIMPL;
     
    492764
    493765// ----------------------------------------------------------------------
    494 //
     766// IPictureImpl_get_KeepOriginalFormat
    495767// ----------------------------------------------------------------------
    496768static HRESULT WIN32API IPictureImpl_get_KeepOriginalFormat(LPPICTURE iface,
     
    512784
    513785// ----------------------------------------------------------------------
    514 //
     786// IPictureImpl_put_KeepOriginalFormat
    515787// ----------------------------------------------------------------------
    516788static HRESULT WIN32API IPictureImpl_put_KeepOriginalFormat(LPPICTURE iface,
     
    528800
    529801// ----------------------------------------------------------------------
    530 //
     802// IPictureImpl_PictureChanged
    531803// ----------------------------------------------------------------------
    532804static HRESULT WIN32API IPictureImpl_PictureChanged(LPPICTURE iface)
     
    540812
    541813// ----------------------------------------------------------------------
    542 //
     814// IPictureImpl_SaveAsFile
    543815// ----------------------------------------------------------------------
    544816static HRESULT WIN32API IPictureImpl_SaveAsFile(LPPICTURE iface,
     
    549821    dprintf(("OLEAUT32: IPictureImpl(%p)->SaveAsFile()", This));
    550822
    551     return E_NOTIMPL;
    552 }
    553 
    554 // ----------------------------------------------------------------------
    555 //
     823    //Delegate...
     824    return This->pStrat->SaveAsFile(pStream, fSaveMemCopy, pCbSize);
     825}
     826
     827// ----------------------------------------------------------------------
     828// IPictureImpl_get_Attributes
    556829// ----------------------------------------------------------------------
    557830static HRESULT WIN32API IPictureImpl_get_Attributes(LPPICTURE iface,
     
    562835    dprintf(("OLEAUT32: IPictureImpl(%p)->get_Attributes()", This));
    563836
    564     return E_NOTIMPL;
    565 }
    566 
    567 
    568 // ----------------------------------------------------------------------
    569 //
     837    // Sanity check
     838    if (pDwAttr == 0)
     839        return E_POINTER;
     840
     841    //Delegate...
     842    return This->pStrat->get_Attributes(pDwAttr);
     843}
     844
     845
     846// ----------------------------------------------------------------------
     847// IPictureImpl_IDispatch_QueryInterface
    570848// ----------------------------------------------------------------------
    571849static HRESULT WINAPI IPictureImpl_IDispatch_QueryInterface(LPDISPATCH iface,
     
    578856
    579857// ----------------------------------------------------------------------
    580 //
     858// IPictureImpl_IDispatch_AddRef
    581859// ----------------------------------------------------------------------
    582860static ULONG   WINAPI IPictureImpl_IDispatch_AddRef(LPDISPATCH iface)
     
    588866
    589867// ----------------------------------------------------------------------
    590 //
     868// IPictureImpl_IDispatch_Release
    591869// ----------------------------------------------------------------------
    592870static ULONG   WINAPI IPictureImpl_IDispatch_Release(LPDISPATCH iface)
  • 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 */
  • trunk/src/oleaut32/makefile

    r1729 r1743  
    1 #/* $Id: makefile,v 1.6 1999-11-14 01:26:36 davidr Exp $ */
     1#/* $Id: makefile,v 1.7 1999-11-14 21:05:23 davidr Exp $ */
    22#
    33# PD-Win32 API
     
    5656typelib.obj:    typelib.cpp oleaut32.h
    5757olefont.obj:    olefont.cpp oleaut32.h
    58 ipicture.obj:   ipicture.cpp oleaut32.h
     58ipicture.obj:   ipicture.cpp ipicture.h oleaut32.h
    5959parsedt.obj:    parsedt.cpp parsedt.h
    6060safearray.obj:  safearray.cpp oleaut32.h
Note: See TracChangeset for help on using the changeset viewer.