00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #pragma once
00024
00025 #include "cinder/Cinder.h"
00026 #include "cinder/Vector.h"
00027 #include "cinder/Surface.h"
00028 #include "cinder/Stream.h"
00029
00030 #include <string>
00031 #include <windows.h>
00032
00033
00034 namespace cinder { namespace msw {
00035
00038 Surface8u convertHBitmap( HBITMAP hbitmap );
00039
00040
00042 inline Vec2f toVec2f( const ::POINTFX &p )
00043 { return Vec2f( ( (p.x.value << 16) | p.y.fract ) / 65535.0f, ( (p.y.value << 16) | p.y.fract ) / 65535.0f ); }
00044
00046 void ComDelete( void *p );
00047
00049 template<typename T>
00050 inline shared_ptr<T> makeComShared( T *p )
00051 { return shared_ptr<T>( p, &ComDelete ); }
00052
00054 class ComOStream : public ::IStream
00055 {
00056 public:
00057 ComOStream( cinder::OStreamRef aOStream ) : mOStream( aOStream ), _refcount( 1 ) {}
00058
00059 virtual HRESULT STDMETHODCALLTYPE QueryInterface( REFIID iid, void ** ppvObject );
00060 virtual ULONG STDMETHODCALLTYPE AddRef();
00061 virtual ULONG STDMETHODCALLTYPE Release();
00062
00063
00064 public:
00065 virtual HRESULT STDMETHODCALLTYPE Read( void* pv, ULONG cb, ULONG* pcbRead ) { return E_NOTIMPL; }
00066 virtual HRESULT STDMETHODCALLTYPE Write( void const* pv, ULONG cb, ULONG* pcbWritten );
00067
00068 public:
00069 virtual HRESULT STDMETHODCALLTYPE SetSize( ULARGE_INTEGER ) { return E_NOTIMPL; }
00070 virtual HRESULT STDMETHODCALLTYPE CopyTo( ::IStream*, ULARGE_INTEGER, ULARGE_INTEGER*, ULARGE_INTEGER* ) { return E_NOTIMPL; }
00071 virtual HRESULT STDMETHODCALLTYPE Commit( DWORD ) { return E_NOTIMPL; }
00072 virtual HRESULT STDMETHODCALLTYPE Revert() { return E_NOTIMPL; }
00073 virtual HRESULT STDMETHODCALLTYPE LockRegion( ULARGE_INTEGER, ULARGE_INTEGER, DWORD ) { return E_NOTIMPL; }
00074 virtual HRESULT STDMETHODCALLTYPE UnlockRegion( ULARGE_INTEGER, ULARGE_INTEGER, DWORD ) { return E_NOTIMPL; }
00075 virtual HRESULT STDMETHODCALLTYPE Clone(IStream **) { return E_NOTIMPL; }
00076 virtual HRESULT STDMETHODCALLTYPE Seek( LARGE_INTEGER liDistanceToMove, DWORD dwOrigin, ULARGE_INTEGER* lpNewFilePointer );
00077 virtual HRESULT STDMETHODCALLTYPE Stat( STATSTG* pStatstg, DWORD grfStatFlag) { return E_NOTIMPL; }
00078
00079 private:
00080 cinder::OStreamRef mOStream;
00081 LONG _refcount;
00082 };
00083
00085 void initializeCom( DWORD params = COINIT_APARTMENTTHREADED | COINIT_DISABLE_OLE1DDE );
00086
00087 } }