X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/13baae2c95ae2e0eb01736b7d1fac6be4a2e6a3f..b7c75283f2144469e8fa6a24ca285b42fab69a6b:/wxPython/contrib/activex/wxie/doxydoc/wxactivex_8h-source.html diff --git a/wxPython/contrib/activex/wxie/doxydoc/wxactivex_8h-source.html b/wxPython/contrib/activex/wxie/doxydoc/wxactivex_8h-source.html new file mode 100644 index 0000000000..3191ba03b0 --- /dev/null +++ b/wxPython/contrib/activex/wxie/doxydoc/wxactivex_8h-source.html @@ -0,0 +1,477 @@ + + +wxactivex.h Source File + + + +
+Main Page   Namespace List   Class Hierarchy   Alphabetical List   Data Structures   File List   Data Fields   Globals  
+

wxactivex.h

Go to the documentation of this file.
00001 
+00005 #ifndef WX_ACTIVE_X
+00006 #define WX_ACTIVE_X
+00007 #pragma warning( disable : 4101 4786)
+00008 #pragma warning( disable : 4786)
+00009 
+00010 
+00011 #include <wx/setup.h>
+00012 #include <wx/wx.h>
+00013 #include <wx/variant.h>
+00014 #include <wx/datetime.h>
+00015 #include <oleidl.h>
+00016 #include <exdisp.h>
+00017 #include <docobj.h>
+00018 #include <iostream>
+00019 #include <vector>
+00020 #include <map>
+00021 using namespace std;
+00022 
+00024 namespace NS_wxActiveX
+00025 {
+00029         struct less_wxStringI
+00030         {
+00031                 bool operator()(const wxString& x, const wxString& y) const
+00032                 {
+00033                         return x.CmpNoCase(y) < 0;
+00034                 };
+00035         };
+00036 };
+00037 
+00038 
+00045 template <class I> class wxAutoOleInterface
+00046 {
+00047         protected:
+00048     I *m_interface;
+00049 
+00050         public:
+00053     explicit wxAutoOleInterface(I *pInterface = NULL) : m_interface(pInterface) {}
+00054 
+00056     wxAutoOleInterface(REFIID riid, IUnknown *pUnk) : m_interface(NULL)
+00057         {
+00058                 QueryInterface(riid, pUnk);
+00059         };
+00061     wxAutoOleInterface(REFIID riid, IDispatch *pDispatch) : m_interface(NULL)
+00062         {
+00063                 QueryInterface(riid, pDispatch);
+00064         };
+00065 
+00067         wxAutoOleInterface(REFCLSID clsid, REFIID riid) : m_interface(NULL)
+00068         {
+00069                 CreateInstance(clsid, riid);
+00070         };
+00071 
+00073     wxAutoOleInterface(const wxAutoOleInterface<I>& ti) : m_interface(NULL)
+00074     {
+00075                 operator = (ti);
+00076     }
+00077 
+00079     wxAutoOleInterface<I>& operator = (const wxAutoOleInterface<I>& ti)
+00080     {
+00081                 if (ti.m_interface)
+00082                         ti.m_interface->AddRef();
+00083         Free();
+00084         m_interface = ti.m_interface;
+00085         return *this;
+00086     }
+00087 
+00090     wxAutoOleInterface<I>& operator = (I *&ti)
+00091     {
+00092         Free();
+00093         m_interface = ti;
+00094         return *this;
+00095     }
+00096 
+00098     ~wxAutoOleInterface()
+00099     {
+00100         Free();
+00101     };
+00102 
+00103 
+00105     inline void Free()
+00106     {
+00107         if (m_interface)
+00108                 m_interface->Release();
+00109         m_interface = NULL;
+00110     };
+00111 
+00113     HRESULT QueryInterface(REFIID riid, IUnknown *pUnk)
+00114         {
+00115                 Free();
+00116                 wxASSERT(pUnk != NULL);
+00117             return pUnk->QueryInterface(riid, (void **) &m_interface);
+00118         };
+00119 
+00121     HRESULT CreateInstance(REFCLSID clsid, REFIID riid)
+00122     {
+00123                 Free();
+00124             return CoCreateInstance(clsid, NULL, CLSCTX_ALL, riid, (void **) &m_interface);
+00125     };
+00126 
+00127 
+00129     inline operator I *() const {return m_interface;}
+00130 
+00132     inline I* operator ->() {return m_interface;}
+00134         inline I** GetRef()     {return &m_interface;}
+00136         inline bool Ok() const  {return m_interface != NULL;}
+00137 };
+00138 
+00139 
+00142 wxString OLEHResultToString(HRESULT hr);
+00145 wxString GetIIDName(REFIID riid);
+00146 
+00147 //#define __WXOLEDEBUG
+00148 
+00149 
+00150 #ifdef __WXOLEDEBUG
+00151     #define WXOLE_TRACE(str) {OutputDebugString(str);OutputDebugString("\r\n");}
+00152     #define WXOLE_TRACEOUT(stuff)\
+00153     {\
+00154         wxString os;\
+00155         os << stuff << "\r\n";\
+00156         WXOLE_TRACE(os.mb_str());\
+00157     }
+00158 
+00159     #define WXOLE_WARN(__hr,msg)\
+00160     {\
+00161         if (__hr != S_OK)\
+00162         {\
+00163             wxString s = "*** ";\
+00164             s += msg;\
+00165             s += " : "+ OLEHResultToString(__hr);\
+00166             WXOLE_TRACE(s.c_str());\
+00167         }\
+00168     }
+00169 #else
+00170     #define WXOLE_TRACE(str)
+00171     #define WXOLE_TRACEOUT(stuff)
+00172     #define WXOLE_WARN(_proc,msg) {_proc;}
+00173 #endif
+00174 
+00175 class wxOleInit
+00176 {
+00177         public:
+00178     static IMalloc *GetIMalloc();
+00179 
+00180     wxOleInit();
+00181     ~wxOleInit();
+00182 };
+00183 
+00184 #define DECLARE_OLE_UNKNOWN(cls)\
+00185         private:\
+00186     class TAutoInitInt\
+00187     {\
+00188         public:\
+00189         LONG l;\
+00190         TAutoInitInt() : l(0) {}\
+00191     };\
+00192     TAutoInitInt refCount, lockCount;\
+00193     wxOleInit oleInit;\
+00194         static void _GetInterface(cls *self, REFIID iid, void **_interface, const char *&desc);\
+00195     public:\
+00196     LONG GetRefCount();\
+00197         HRESULT STDMETHODCALLTYPE QueryInterface(REFIID iid, void ** ppvObject);\
+00198         ULONG STDMETHODCALLTYPE AddRef();\
+00199         ULONG STDMETHODCALLTYPE Release();\
+00200     ULONG STDMETHODCALLTYPE AddLock();\
+00201         ULONG STDMETHODCALLTYPE ReleaseLock()
+00202 
+00203 #define DEFINE_OLE_TABLE(cls)\
+00204         LONG cls::GetRefCount() {return refCount.l;}\
+00205     HRESULT STDMETHODCALLTYPE cls::QueryInterface(REFIID iid, void ** ppvObject)\
+00206     {\
+00207         if (! ppvObject)\
+00208         {\
+00209             WXOLE_TRACE("*** NULL POINTER ***");\
+00210             return E_FAIL;\
+00211         };\
+00212         const char *desc = NULL;\
+00213         cls::_GetInterface(this, iid, ppvObject, desc);\
+00214         if (! *ppvObject)\
+00215         {\
+00216             WXOLE_TRACEOUT("<" << GetIIDName(iid).c_str() << "> Not Found");\
+00217             return E_NOINTERFACE;\
+00218         };\
+00219         WXOLE_TRACEOUT("QI : <" << desc <<">");\
+00220         ((IUnknown * )(*ppvObject))->AddRef();\
+00221         return S_OK;\
+00222     };\
+00223     ULONG STDMETHODCALLTYPE cls::AddRef()\
+00224     {\
+00225         WXOLE_TRACEOUT(# cls << "::Add ref(" << refCount.l << ")");\
+00226         InterlockedIncrement(&refCount.l);\
+00227         return refCount.l;\
+00228     };\
+00229     ULONG STDMETHODCALLTYPE cls::Release()\
+00230     {\
+00231         if (refCount.l > 0)\
+00232         {\
+00233                 InterlockedDecrement(&refCount.l);\
+00234                 WXOLE_TRACEOUT(# cls << "::Del ref(" << refCount.l << ")");\
+00235             if (refCount.l == 0)\
+00236                 {\
+00237                 delete this;\
+00238                     return 0;\
+00239                 };\
+00240                 return refCount.l;\
+00241         }\
+00242         else\
+00243                 return 0;\
+00244     }\
+00245     ULONG STDMETHODCALLTYPE cls::AddLock()\
+00246     {\
+00247         WXOLE_TRACEOUT(# cls << "::Add Lock(" << lockCount.l << ")");\
+00248         InterlockedIncrement(&lockCount.l);\
+00249         return lockCount.l;\
+00250     };\
+00251     ULONG STDMETHODCALLTYPE cls::ReleaseLock()\
+00252     {\
+00253         if (lockCount.l > 0)\
+00254         {\
+00255                 InterlockedDecrement(&lockCount.l);\
+00256                 WXOLE_TRACEOUT(# cls << "::Del Lock(" << lockCount.l << ")");\
+00257             return lockCount.l;\
+00258         }\
+00259         else\
+00260                 return 0;\
+00261     }\
+00262     DEFINE_OLE_BASE(cls)
+00263 
+00264 #define DEFINE_OLE_BASE(cls)\
+00265         void cls::_GetInterface(cls *self, REFIID iid, void **_interface, const char *&desc)\
+00266         {\
+00267                 *_interface = NULL;\
+00268             desc = NULL;
+00269 
+00270 #define OLE_INTERFACE(_iid, _type)\
+00271     if (IsEqualIID(iid, _iid))\
+00272     {\
+00273         WXOLE_TRACE("Found Interface <" # _type ">");\
+00274         *_interface = (IUnknown *) (_type *) self;\
+00275         desc = # _iid;\
+00276         return;\
+00277     }
+00278 
+00279 #define OLE_IINTERFACE(_face) OLE_INTERFACE(IID_##_face, _face)
+00280 
+00281 #define OLE_INTERFACE_CUSTOM(func)\
+00282     if (func(self, iid, _interface, desc))\
+00283         {\
+00284         return;\
+00285         }
+00286 
+00287 #define END_OLE_TABLE\
+00288         }
+00289 
+00290 
+00328 
+00329 class wxActiveX : public wxWindow {
+00330 public:
+00333         class ParamX 
+00334         {
+00335         public:
+00336                 USHORT      flags;
+00337         bool isPtr, isSafeArray;
+00338                 VARTYPE     vt;
+00339         wxString    name;
+00340 
+00341         ParamX() : vt(VT_EMPTY) {}
+00342                 inline bool IsIn() const                {return (flags & IDLFLAG_FIN) != 0;}
+00343                 inline bool IsOut() const               {return (flags & IDLFLAG_FOUT) != 0;}
+00344                 inline bool IsRetVal() const    {return (flags & IDLFLAG_FRETVAL) != 0;}
+00345         };
+00346         typedef vector<ParamX>  ParamXArray;
+00347 
+00350     class FuncX 
+00351     {
+00352     public:
+00353         wxString    name;
+00354         MEMBERID    memid;
+00355                 bool            hasOut;
+00356 
+00357         ParamX      retType;
+00358                 ParamXArray     params;
+00359     };
+00360 
+00362         class PropX
+00363         {
+00364         public:
+00365                 wxString        name;
+00366         MEMBERID    memid;
+00367         ParamX      type;
+00368         ParamX      arg;
+00369                 bool            putByRef;
+00370 
+00371                 PropX() : putByRef (false) {}
+00372                 inline bool CanGet() const {return type.vt != VT_EMPTY;}
+00373                 inline bool CanSet() const {return arg.vt != VT_EMPTY;}
+00374         };
+00375 
+00377     wxActiveX(wxWindow * parent, REFCLSID clsid, wxWindowID id = -1,
+00378         const wxPoint& pos = wxDefaultPosition,
+00379         const wxSize& size = wxDefaultSize,
+00380         long style = 0,
+00381         const wxString& name = wxPanelNameStr);
+00383     wxActiveX(wxWindow * parent, wxString progId, wxWindowID id = -1,
+00384         const wxPoint& pos = wxDefaultPosition,
+00385         const wxSize& size = wxDefaultSize,
+00386         long style = 0,
+00387         const wxString& name = wxPanelNameStr);
+00388         virtual ~wxActiveX();
+00389 
+00391     inline int GetEventCount() const {return m_events.size();}
+00394     const FuncX& GetEventDesc(int idx) const;
+00395 
+00397     inline int GetPropCount() const {return m_props.size();}
+00400     const PropX& GetPropDesc(int idx) const;
+00403     const PropX& GetPropDesc(wxString name) const;
+00404 
+00406     inline int GetMethodCount() const {return m_methods.size();}
+00409     const FuncX& GetMethodDesc(int idx) const;
+00412     const FuncX& GetMethodDesc(wxString name) const;
+00413 
+00415     void SetProp(MEMBERID name, VARIANTARG& value);
+00417     void SetProp(const wxString &name, const wxVariant &value);
+00418     
+00419     class wxPropertySetter
+00420     {
+00421     public:
+00422         wxActiveX *m_ctl;
+00423         wxString m_propName;
+00424 
+00425         wxPropertySetter(wxActiveX *ctl, wxString propName) : 
+00426             m_ctl(ctl), m_propName(propName) {}
+00427         
+00428         inline const wxPropertySetter& operator = (wxVariant v) const
+00429         {
+00430             m_ctl->SetProp(m_propName, v);
+00431             return *this;
+00432         };
+00433 
+00434         inline operator wxVariant() const   {return m_ctl->GetPropAsWxVariant(m_propName);};
+00435         inline operator wxString() const    {return m_ctl->GetPropAsString(m_propName);};
+00436         inline operator char() const        {return m_ctl->GetPropAsChar(m_propName);};
+00437         inline operator long() const        {return m_ctl->GetPropAsLong(m_propName);};
+00438         inline operator bool() const        {return m_ctl->GetPropAsBool(m_propName);};
+00439         inline operator double() const      {return m_ctl->GetPropAsDouble(m_propName);};
+00440         inline operator wxDateTime() const  {return m_ctl->GetPropAsDateTime(m_propName);};
+00441         inline operator void *() const      {return m_ctl->GetPropAsPointer(m_propName);};
+00442     };
+00443 
+00458     inline wxPropertySetter Prop(wxString name) {return wxPropertySetter(this, name);}
+00459 
+00460     VARIANT GetPropAsVariant(MEMBERID name);
+00461     VARIANT GetPropAsVariant(const wxString& name);
+00462     wxVariant GetPropAsWxVariant(const wxString& name);
+00463     wxString GetPropAsString(const wxString& name);
+00464     char GetPropAsChar(const wxString& name);
+00465     long GetPropAsLong(const wxString& name);
+00466     bool GetPropAsBool(const wxString& name);
+00467     double GetPropAsDouble(const wxString& name);
+00468     wxDateTime GetPropAsDateTime(const wxString& name);
+00469     void *GetPropAsPointer(const wxString& name);
+00470 
+00471     // methods
+00472     // VARIANTARG form is passed straight to Invoke, 
+00473     // so args in *REVERSE* order
+00474     VARIANT CallMethod(MEMBERID name, VARIANTARG args[], int argc);
+00475     VARIANT CallMethod(wxString name, VARIANTARG args[] = NULL, int argc = -1);
+00476     // args are in *NORMAL* order
+00477     // args can be a single wxVariant or an array
+00493     wxVariant CallMethod(wxString name, wxVariant args[], int nargs = -1);
+00494 
+00495         HRESULT ConnectAdvise(REFIID riid, IUnknown *eventSink);
+00496 
+00497         void OnSize(wxSizeEvent&);
+00498     void OnPaint(wxPaintEvent& event);
+00499     void OnMouse(wxMouseEvent& event);
+00500         void OnSetFocus(wxFocusEvent&);
+00501     void OnKillFocus(wxFocusEvent&);
+00502 
+00503         DECLARE_EVENT_TABLE();
+00504 
+00505 protected:
+00506     friend class FrameSite;
+00507     friend class wxActiveXEvents;
+00508 
+00509         typedef map<MEMBERID, FuncX>    FuncXMap;
+00510     typedef map<wxString, FuncX, NS_wxActiveX::less_wxStringI>  FuncXStringMap;
+00511         typedef map<wxString, PropX, NS_wxActiveX::less_wxStringI> PropXMap;
+00512         typedef wxAutoOleInterface<IConnectionPoint>    wxOleConnectionPoint;
+00513         typedef pair<wxOleConnectionPoint, DWORD>               wxOleConnection;
+00514         typedef vector<wxOleConnection>                                 wxOleConnectionArray;
+00515 
+00516         wxAutoOleInterface<IDispatch>                   m_Dispatch;
+00517     wxAutoOleInterface<IOleClientSite>      m_clientSite;
+00518     wxAutoOleInterface<IUnknown>            m_ActiveX;
+00519         wxAutoOleInterface<IOleObject>                  m_oleObject;
+00520         wxAutoOleInterface<IOleInPlaceObject>   m_oleInPlaceObject;
+00521     wxAutoOleInterface<IOleInPlaceActiveObject>
+00522 
+00523                                             m_oleInPlaceActiveObject;
+00524     wxAutoOleInterface<IOleDocumentView>        m_docView;
+00525     wxAutoOleInterface<IViewObject>             m_viewObject;
+00526         HWND m_oleObjectHWND;
+00527     bool m_bAmbientUserMode;
+00528     DWORD m_docAdviseCookie;
+00529         wxOleConnectionArray                                    m_connections;
+00530 
+00531         void CreateActiveX(REFCLSID clsid);
+00532     void CreateActiveX(LPOLESTR progId);
+00533     HRESULT AmbientPropertyChanged(DISPID dispid);
+00534 
+00535         void GetTypeInfo();
+00536         void GetTypeInfo(ITypeInfo *ti, bool defInterface, bool defEventSink);
+00537 
+00538 
+00539     // events
+00540     FuncXMap            m_events;
+00541 
+00542         // properties
+00543         PropXMap                m_props;
+00544 
+00545     // Methods
+00546     FuncXStringMap  m_methods;
+00547 
+00548     long MSWWindowProc(WXUINT nMsg, WXWPARAM wParam, WXLPARAM lParam);
+00549 };
+00550 
+00551 // events
+00552 class wxActiveXEvent : public wxCommandEvent
+00553 {
+00554 private:
+00555     friend class wxActiveXEvents;
+00556 
+00557     wxVariant m_params;
+00558 
+00559 public:
+00560 
+00561     virtual wxEvent *Clone() const { return new wxActiveXEvent(*this); }
+00562 
+00563     wxString EventName();
+00564     int ParamCount() const;
+00565     wxString ParamType(int idx);
+00566     wxString ParamName(int idx);
+00567     wxVariant& operator[] (int idx);
+00568     wxVariant& operator[] (wxString name);
+00569 };
+00570 
+00571 const wxEventType& RegisterActiveXEvent(const wxChar *eventName);
+00572 const wxEventType& RegisterActiveXEvent(DISPID event);
+00573 
+00574 typedef void (wxEvtHandler::*wxActiveXEventFunction)(wxActiveXEvent&);
+00575 
+00578 #define EVT_ACTIVEX(id, eventName, fn) DECLARE_EVENT_TABLE_ENTRY(RegisterActiveXEvent(wxT(eventName)), id, -1, (wxObjectEventFunction) (wxEventFunction) (wxActiveXEventFunction) & fn, (wxObject *) NULL ),
+00581 #define EVT_ACTIVEX_DISPID(id, eventDispId, fn) DECLARE_EVENT_TABLE_ENTRY(RegisterActiveXEvent(eventDispId), id, -1, (wxObjectEventFunction) (wxEventFunction) (wxActiveXEventFunction) & fn, (wxObject *) NULL ),
+00582 
+00583 //util
+00584 bool wxDateTimeToVariant(wxDateTime dt, VARIANTARG& va);
+00585 bool VariantToWxDateTime(VARIANTARG va, wxDateTime& dt);
+00596 bool MSWVariantToVariant(VARIANTARG& va, wxVariant& vx);
+00607 bool VariantToMSWVariant(const wxVariant& vx, VARIANTARG& va);
+00608 
+00609 #endif /* _IEHTMLWIN_H_ */
+

Generated on Tue Apr 1 14:51:12 2003 for wxActiveX by + +doxygen1.3-rc3
+ +