|
|
import "oleidl.idl"; import "shobjidl.idl"; import "propidl.idl";
interface IShellImageDataFactory; interface IShellImageData; interface IShellImageDataAbort; interface IHWEventHandler;
// external definitions cpp_quote("#if !defined(_GDIPLUSPIXELFORMATS_H)") typedef DWORD PixelFormat; cpp_quote("#endif")
cpp_quote("#if !defined(_GDIPLUSENUMS_H)") typedef DWORD InterpolationMode; cpp_quote("#endif")
cpp_quote("#if !defined(_GDIPLUSHEADERS_H)") typedef BYTE EncoderParameters; typedef BYTE Image; cpp_quote("#endif")
// property bag strings for SetEncoderParams cpp_quote("#define SHIMGKEY_QUALITY L\"Compression\"") cpp_quote("#define SHIMGKEY_RAWFORMAT L\"RawDataFormat\"") cpp_quote("")
// Decode() flags (bit fields) cpp_quote("#define SHIMGDEC_DEFAULT 0x00000000") // creates a full Image cpp_quote("#define SHIMGDEC_THUMBNAIL 0x00000001") // decodes only thumbnail image cpp_quote("#define SHIMGDEC_LOADFULL 0x00000002") // load the whole file into memory
// Some custom error codes cpp_quote("#define E_NOTVALIDFORANIMATEDIMAGE MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, 0x01)") // operation is not valid for animated images, for example IShellImageData::Rotate will fail for animated images with this code
[ helpstring("IShellImageDataFactory"), uuid(9be8ed5c-edab-4d75-90f3-bd5bdbb21c82), object, pointer_default(unique) ] interface IShellImageDataFactory : IUnknown { HRESULT CreateIShellImageData( [out] IShellImageData **ppshimg);
// Easy functions for loading and saving from a file or stream
HRESULT CreateImageFromFile( [in] LPCWSTR pszPath, [out] IShellImageData **ppshimg);
HRESULT CreateImageFromStream( [in] IStream *pStream, [out] IShellImageData **ppshimg); // looks up the extension in the registry, gets the content type, and looks up the appropriate IMGFMT_* // value. HRESULT GetDataFormatFromPath( [in] LPCWSTR pszPath, [out] GUID *pDataFormat); }
[ helpstring("IShellImageData"), uuid(bfdeec12-8040-4403-a5ea-9e07dafcf530), object, pointer_default(unique) ] interface IShellImageData : IUnknown { // Start the decode process setting state (for thumbnails etc)
HRESULT Decode( [in] DWORD dwFlags, [in] ULONG cxDesired, [in] ULONG cyDesired);
// Draw the current image to the screen
HRESULT Draw( [in] HDC hdc, [in] LPRECT prcDest, [in] LPRECT prcSrc);
// Multipage support
// switches to next frame if it's available // starts decoder and returns E_PENDING if next frame is not available yet // will loop or return E_NOMOREDATA based on the image contents
HRESULT NextFrame();
// dumps any animation data, switchs to the next page, and resets the animation data for that page. // Returns E_NOMOREDATA if there is no next page.
HRESULT NextPage(); HRESULT PrevPage(); // // Query functions. They return S_OK if condition is true, S_FALSE if not. Use should be // self-explanatory from function name... // HRESULT IsTransparent(); HRESULT IsAnimated(); HRESULT IsVector(); HRESULT IsMultipage(); HRESULT IsEditable(); HRESULT IsPrintable(); HRESULT IsDecoded();
// step through the pages in the image
HRESULT GetCurrentPage( [out] ULONG *pnPage);
HRESULT GetPageCount( [out] ULONG *pcPages);
HRESULT SelectPage( [in] ULONG iPage);
// Fetch information on image HRESULT GetSize( [out] SIZE *pSize);
HRESULT GetRawDataFormat( [out] GUID *pDataFormat);
HRESULT GetPixelFormat( [out] PixelFormat *pFormat);
HRESULT GetDelay( [out] DWORD *pdwDelay); // delay can be different for every frame
// dwMode is STGM_* flags HRESULT GetProperties( [in] DWORD dwMode, [out] IPropertySetStorage **ppPropSet); // // Rotate with specified angle in 90 degree increments //
HRESULT Rotate( [in] DWORD dwAngle); // Scale with aspect correction when one of the scale factors is 0. // Scale to specified dimensions if both values are non-zero // examples: Scale(300, 0) sets X to 300 and Y to the correct scaled value based on X // Scale(0, 200) sets Y to 200 and X to the correct scaled value based on Y // Scale(150, 75) sets X to 150 and Y to 75 HRESULT Scale( [in] ULONG cx, [in] ULONG cy, [in] InterpolationMode hints); HRESULT DiscardEdit();
// // KENSY // Instead of Commit we will depend on people to do IPersistFile::Save, IPersistStream::Save, // etc. Need to give them control over output format and quality among other things... //
HRESULT SetEncoderParams( [in] IPropertyBag *pbagEnc);
HRESULT DisplayName( [in, out] LPWSTR wszName, [in] UINT cch);
HRESULT GetResolution( // DPI [out] ULONG *puResolutionX, [out] ULONG *puResolutionY);
HRESULT GetEncoderParams( // possible values for encoder params, given a format [in] GUID *pguidFmt, [out] EncoderParameters **ppEncParams);
// Set a callback abort object; optionally returns previous HRESULT RegisterAbort( [in] IShellImageDataAbort *pAbort, [out,optional] IShellImageDataAbort **ppAbortPrev);
HRESULT CloneFrame( // return a clone of the GDI+ Image being worked on [out] Image **ppImg);
HRESULT ReplaceFrame( // replace the current frame with a new Image [in] Image *pImg); }
[ helpstring("IShellImageDataAbort"), uuid(53fb8e58-50c0-4003-b4aa-0c8df28e7f3a), object, pointer_default(unique) ] interface IShellImageDataAbort : IUnknown { HRESULT QueryAbort(); // S_OK = continue; S_FALSE = abort }
[ uuid(0b8aff06-8df0-4f13-8e25-25b2319c436a), // LIBID_ShellImageData helpstring("Microsoft Shell Image library"), lcid(0x0000), version(1.0) ] library ShellImageData { // CLSID_ShellImageDataFactory [ uuid(66e4e4fb-f385-4dd0-8d74-a2efd1bc6178) ] coclass ShellImageDataFactory { [default] interface IShellImageDataFactory; }
// CLSID_AutoplayForSlideShow [ uuid(00E7B358-F65B-4dcf-83DF-CD026B94BFD4) ] coclass AutoplayForSlideShow { [default] interface IHWEventHandler; } };
|