| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635 | 
							- /////////////////////////////////////////////////////////////////////////////
 
- // Name:        msw/ole/automtn.h
 
- // Purpose:     interface of wxAutomationObject
 
- // Author:      wxWidgets team
 
- // Licence:     wxWindows licence
 
- /////////////////////////////////////////////////////////////////////////////
 
- /**
 
-     Automation object creation flags.
 
-     These flags can be used with wxAutomationObject::GetInstance().
 
-     @since 2.9.2
 
- */
 
- enum wxAutomationInstanceFlags
 
- {
 
-     /**
 
-         Only use the existing instance, never create a new one.
 
-         This flag can be used to forbid the creation of a new instance if none
 
-         is currently running.
 
-      */
 
-     wxAutomationInstance_UseExistingOnly = 0,
 
-     /**
 
-         Create a new instance if there are no existing ones.
 
-         This flag corresponds to the default behaviour of
 
-         wxAutomationObject::GetInstance() and means that if getting an existing
 
-         instance failed, we should call wxAutomationObject::CreateInstance() to
 
-         create a new one.
 
-      */
 
-     wxAutomationInstance_CreateIfNeeded = 1,
 
-     /**
 
-         Do not show an error message if no existing instance is currently
 
-         running.
 
-         All other errors will still be reported as usual.
 
-      */
 
-     wxAutomationInstance_SilentIfNone = 2
 
- };
 
- /**
 
-     Flags used for conversions between wxVariant and OLE VARIANT.
 
-     These flags are used by wxAutomationObject for its wxConvertOleToVariant()
 
-     calls. They can be obtained by wxAutomationObject::GetConvertVariantFlags()
 
-     and set by wxAutomationObject::SetConvertVariantFlags().
 
-     @since 3.0
 
-     @header{wx/msw/ole/oleutils.h}
 
- */
 
- enum wxOleConvertVariantFlags
 
- {
 
-     /**
 
-         Default value.
 
-     */
 
-     wxOleConvertVariant_Default = 0,
 
-     /**
 
-         If this flag is used, SAFEARRAYs contained in OLE VARIANTs will be
 
-         returned as wxVariants with wxVariantDataSafeArray type instead of
 
-         wxVariants with the list type containing the (flattened) SAFEARRAY's
 
-         elements.
 
-     */
 
-     wxOleConvertVariant_ReturnSafeArrays = 1
 
- };
 
- /**
 
-     @class wxVariantDataCurrency
 
-     This class represents a thin wrapper for Microsoft Windows CURRENCY type.
 
-     It is used for converting between wxVariant and OLE VARIANT
 
-     with type set to VT_CURRENCY. When wxVariant stores
 
-     wxVariantDataCurrency, it returns "currency" as its type.
 
-     An example of setting and getting CURRENCY value to and from wxVariant:
 
-     @code
 
-     CURRENCY cy;
 
-     wxVariant variant;
 
-     // set wxVariant to currency type
 
-     if ( SUCCEEDED(VarCyFromR8(123.45, &cy)) )  // set cy to 123.45
 
-     {
 
-         variant.SetData(new wxVariantDataCurrency(cy));
 
-         // or instead of the line above you could write:
 
-         // wxVariantDataCurrency wxCy;
 
-         // wxCy.SetValue(cy);
 
-         // variant.SetData(wxCy.Clone());
 
-     }
 
-     // get CURRENCY value from wxVariant
 
-     if ( variant.GetType() == "currency" )
 
-     {
 
-         wxVariantDataCurrency*
 
-             wxCy = wxDynamicCastVariantData(variant.GetData(), wxVariantDataCurrency);
 
-         cy = wxCy->GetValue();
 
-     }
 
-     @endcode
 
-     @onlyfor{wxmsw}
 
-     @since 2.9.5
 
-     @library{wxcore}
 
-     @category{data}
 
-     @see wxAutomationObject, wxVariant, wxVariantData, wxVariantDataErrorCode
 
-     @header{wx/msw/ole/oleutils.h}
 
- */
 
- class wxVariantDataCurrency : public wxVariantData
 
- {
 
- public:
 
-     /**
 
-         Default constructor initializes the object to 0.0.
 
-     */
 
-     wxVariantDataCurrency();
 
-     /**
 
-         Constructor from CURRENCY.
 
-     */
 
-     wxVariantDataCurrency(CURRENCY value);
 
-     /**
 
-         Returns the stored CURRENCY value.
 
-     */
 
-     CURRENCY GetValue() const;
 
-     /**
 
-         Sets the stored value to @a value.
 
-     */
 
-     void SetValue(CURRENCY value);
 
-     /**
 
-         Returns true if @a data is of wxVariantDataCurency type
 
-         and contains the same CURRENCY value.
 
-     */
 
-     virtual bool Eq(wxVariantData& data) const;
 
-     /**
 
-         Fills the provided string with the textual representation of this
 
-         object.
 
-         The implementation of this method using @c VarBstrFromCy() Windows API
 
-         function with LOCALE_USER_DEFAULT.
 
-     */
 
-     virtual bool Write(wxString& str) const;
 
-     /**
 
-         Returns a copy of itself.
 
-     */
 
-     wxVariantData* Clone() const;
 
-     /**
 
-         Returns "currency".
 
-     */
 
-     virtual wxString GetType() const;
 
-     /**
 
-         Converts the value of this object to wxAny.
 
-     */
 
-     virtual bool GetAsAny(wxAny* any) const;
 
- };
 
- /**
 
-     @class wxVariantDataErrorCode
 
-     This class represents a thin wrapper for Microsoft Windows SCODE type
 
-     (which is the same as HRESULT).
 
-     It is used for converting between a wxVariant and OLE VARIANT with type set
 
-     to VT_ERROR. When wxVariant stores wxVariantDataErrorCode, it returns
 
-     "errorcode" as its type. This class can be used for returning error codes
 
-     of automation calls or exchanging values with other applications: e.g.
 
-     Microsoft Excel returns VARIANTs with VT_ERROR type for cell values with
 
-     errors (one of XlCVError constants, displayed as e.g. "#DIV/0!" or "#REF!"
 
-     there) etc. See wxVariantDataCurrency for an example of how to  exchange
 
-     values between wxVariant and a native type not directly supported by it.
 
-     @onlyfor{wxmsw}
 
-     @since 2.9.5
 
-     @library{wxcore}
 
-     @category{data}
 
-     @see wxAutomationObject, wxVariant, wxVariantData, wxVariantDataCurrency
 
-     @header{wx/msw/ole/oleutils.h}
 
- */
 
- class wxVariantDataErrorCode : public wxVariantData
 
- {
 
- public:
 
-     /**
 
-         Constructor initializes the object to @a value or S_OK if no value was
 
-         passed.
 
-     */
 
-     wxVariantDataErrorCode(SCODE value = S_OK);
 
-     /**
 
-         Returns the stored SCODE value.
 
-     */
 
-     SCODE GetValue() const;
 
-     /**
 
-         Set the stored value to @a value.
 
-     */
 
-     void SetValue(SCODE value);
 
-     /**
 
-         Returns true if @a data is of wxVariantDataErrorCode type
 
-         and contains the same SCODE value.
 
-     */
 
-     virtual bool Eq(wxVariantData& data) const;
 
-     /**
 
-         Fills the provided string with the textual representation of this
 
-         object.
 
-         The error code is just a number, so it's output as such.
 
-     */
 
-     virtual bool Write(wxString& str) const;
 
-     /**
 
-         Returns a copy of itself.
 
-     */
 
-     wxVariantData* Clone() const;
 
-     /**
 
-         Returns "errorcode".
 
-     */
 
-     virtual wxString GetType() const { return wxS("errorcode"); }
 
-     /**
 
-         Converts the value of this object to wxAny.
 
-     */
 
-     virtual bool GetAsAny(wxAny* any) const;
 
- };
 
- /**
 
-     @class wxVariantDataSafeArray
 
-     This class represents a thin wrapper for Microsoft Windows SAFEARRAY type.
 
-     It is used for converting between wxVariant and OLE VARIANT
 
-     with type set to VT_ARRAY, which has more than one dimension.
 
-     When wxVariant stores wxVariantDataSafeArray, it returns "safearray" as its type.
 
-     wxVariantDataSafeArray does NOT manage the SAFEARRAY it points to.
 
-     If you want to pass it to a wxAutomationObject as a parameter:
 
-         -# Assign a SAFEARRAY pointer to it and store it in a wxVariant.
 
-         -# Call the wxAutomationObject method (CallMethod(), SetProperty() or Invoke())
 
-         -# wxAutomationObject will destroy the array after the approapriate automation call.
 
-     An example of creating a 2-dimensional SAFEARRAY containing VARIANTs
 
-     and storing it in a wxVariant
 
-     @code
 
-     SAFEARRAYBOUND bounds[2]; // 2 dimensions
 
-     wxSafeArray<VT_VARIANT> safeArray;
 
-     unsigned rowCount = 1000;
 
-     unsigned colCount = 20;
 
-     bounds[0].lLbound = 0; // elements start at 0
 
-     bounds[0].cElements = rowCount;
 
-     bounds[1].lLbound = 0; // elements start at 0
 
-     bounds[1].cElements = colCount;
 
-     if ( !safeArray.Create(bounds, 2) )
 
-         return false;
 
-     long indices[2];
 
-     for ( unsigned row = 0; row < rowCount; row++ )
 
-     {
 
-         indices[0] = row;
 
-         for ( unsigned col = 0; col < colCount; col++ )
 
-         {
 
-             indices[1] = col;
 
-             if ( !safeArray.SetElement(indices, wxString::Format("R%u C%u", row+1, col+1)) )
 
-                return false;
 
-         }
 
-     }
 
-     range.PutProperty("Value", wxVariant(new wxVariantDataSafeArray(sa.Detach())));
 
-     @endcode
 
-     If you you received wxVariantDataSafeArray as a result of wxAutomationObject method call:
 
-     (1) Get the data out of the array.
 
-     (2) Destroy the array.
 
-     @code
 
-     wxVariant result;
 
-     result = range.GetProperty("Value");
 
-     if ( result.GetType() == "safearray" )
 
-     {
 
-         wxSafeArray<VT_VARIANT> safeArray;
 
-         wxVariantDataSafeArray* const
 
-             sa = wxStaticCastVariantData(variant.GetData(), wxVariantDataSafeArray);
 
-         if ( !safeArray.Attach(sa.GetValue() )
 
-         {
 
-             if ( !safeArray.HasArray() )
 
-                 SafeArrayDestroy(sa.GetValue()); // we have to dispose the SAFEARRAY ourselves
 
-             return false;
 
-         }
 
-         // get the data from the SAFEARRAY using wxSafeArray::GetElement()
 
-         // SAFEARRAY will be disposed by safeArray's dtor
 
-     }
 
-     @endcode
 
-     @onlyfor{wxmsw}
 
-     @since 2.9.5
 
-     @library{wxcore}
 
-     @category{data}
 
-     @see wxAutomationObject, wxVariant, wxVariantData, wxVariantDataErrorCode
 
-     @header{wx/msw/ole/oleutils.h}
 
- */
 
- class wxVariantDataSafeArray : public wxVariantData
 
- {
 
- public:
 
-     /**
 
-         Constructor initializes the object to @a value.
 
-     */
 
-     explicit wxVariantDataSafeArray(SAFEARRAY* value = NULL);
 
-     /**
 
-         Returns the stored array.
 
-     */
 
-     SAFEARRAY* GetValue() const;
 
-     /**
 
-         Set the stored array.
 
-     */
 
-     void SetValue(SAFEARRAY* value);
 
-     /**
 
-         Returns true if @a data is of wxVariantDataSafeArray type
 
-         and contains the same SAFEARRAY* value.
 
-     */
 
-     virtual bool Eq(wxVariantData& data) const;
 
-     /**
 
-         Fills the provided string with the textual representation of this
 
-         object.
 
-         Only the address of SAFEARRAY pointer is output.
 
-     */
 
-     virtual bool Write(wxString& str) const;
 
-     /**
 
-         Returns a copy of itself.
 
-     */
 
-     wxVariantData* Clone() const;
 
-     /**
 
-         Returns "safearray".
 
-     */
 
-     virtual wxString GetType() const;
 
-     /**
 
-         Converts the value of this object to wxAny.
 
-     */
 
-     virtual bool GetAsAny(wxAny* any) const;
 
- };
 
- /**
 
-     @class wxAutomationObject
 
-     The @b wxAutomationObject class represents an OLE automation object containing
 
-     a single data member,
 
-     an IDispatch pointer. It contains a number of functions that make it easy to
 
-     perform
 
-     automation operations, and set and get properties. The class makes heavy use of
 
-     the wxVariant class.
 
-     The usage of these classes is quite close to OLE automation usage in Visual
 
-     Basic. The API is
 
-     high-level, and the application can specify multiple properties in a single
 
-     string. The following example
 
-     gets the current Excel instance, and if it exists, makes the active cell bold.
 
-     @code
 
-     wxAutomationObject excelObject;
 
-       if (excelObject.GetInstance("Excel.Application"))
 
-           excelObject.PutProperty("ActiveCell.Font.Bold", @true);
 
-     @endcode
 
-     Note that this class obviously works under Windows only.
 
-     @onlyfor{wxmsw}
 
-     @library{wxcore}
 
-     @category{data}
 
-     @see wxVariant, wxVariantDataCurrency, wxVariantDataErrorCode, wxVariantDataSafeArray
 
- */
 
- class wxAutomationObject : public wxObject
 
- {
 
- public:
 
-     /**
 
-         Constructor, taking an optional IDispatch pointer which will be released when
 
-         the
 
-         object is deleted.
 
-     */
 
-     wxAutomationObject(WXIDISPATCH* dispatchPtr = NULL);
 
-     /**
 
-         Destructor. If the internal IDispatch pointer is non-null, it will be released.
 
-     */
 
-     ~wxAutomationObject();
 
-     //@{
 
-     /**
 
-         Calls an automation method for this object. The first form takes a method name,
 
-         number of
 
-         arguments, and an array of variants. The second form takes a method name and
 
-         zero to six
 
-         constant references to variants. Since the variant class has constructors for
 
-         the basic
 
-         data types, and C++ provides temporary objects automatically, both of the
 
-         following lines
 
-         are syntactically valid:
 
-         Note that @a method can contain dot-separated property names, to save the
 
-         application
 
-         needing to call GetProperty several times using several temporary objects. For
 
-         example:
 
-     */
 
-     wxVariant CallMethod(const wxString& method, int noArgs,
 
-                          wxVariant args[]) const;
 
-     const wxVariant  CallMethod(const wxString& method, ... ) const;
 
-     //@}
 
-     /**
 
-         Creates a new object based on the ProgID, returning @true if the object was
 
-         successfully created,
 
-         or @false if not.
 
-     */
 
-     bool CreateInstance(const wxString& progId) const;
 
-     /**
 
-         Checks if the object is in a valid state.
 
-         Returns @true if the object was successfully initialized or @false if
 
-         it has no valid IDispatch pointer.
 
-         @see GetDispatchPtr()
 
-      */
 
-     bool IsOk() const;
 
-     /**
 
-         Gets the IDispatch pointer.
 
-         Notice that the return value of this function is an untyped pointer but
 
-         it can be safely cast to @c IDispatch.
 
-     */
 
-     void* GetDispatchPtr() const;
 
-     /**
 
-         Retrieves the current object associated with the specified ProgID, and
 
-         attaches the IDispatch pointer to this object.
 
-         If attaching to an existing object failed and @a flags includes
 
-         wxAutomationInstance_CreateIfNeeded flag, a new object will be created.
 
-         Otherwise this function will normally log an error message which may be
 
-         undesirable if the object may or may not exist. The
 
-         wxAutomationInstance_SilentIfNone flag can be used to prevent the error
 
-         from being logged in this case.
 
-         Returns @true if a pointer was successfully retrieved, @false
 
-         otherwise.
 
-         Note that this cannot cope with two instances of a given OLE object being
 
-         active simultaneously,
 
-         such as two copies of Excel running. Which object is referenced cannot
 
-         currently be specified.
 
-         @param progId COM ProgID, e.g. "Excel.Application"
 
-         @param flags The creation flags (this parameters was added in wxWidgets
 
-             2.9.2)
 
-     */
 
-     bool GetInstance(const wxString& progId,
 
-                      int flags = wxAutomationInstance_CreateIfNeeded) const;
 
-     /**
 
-         Retrieves a property from this object, assumed to be a dispatch pointer, and
 
-         initialises @a obj with it.
 
-         To avoid having to deal with IDispatch pointers directly, use this function in
 
-         preference
 
-         to GetProperty() when retrieving objects
 
-         from other objects.
 
-         Note that an IDispatch pointer is stored as a void* pointer in wxVariant
 
-         objects.
 
-         @see GetProperty()
 
-     */
 
-     bool GetObject(wxAutomationObject& obj, const wxString& property,
 
-                    int noArgs = 0,
 
-                    wxVariant args[] = NULL) const;
 
-     //@{
 
-     /**
 
-         Gets a property value from this object. The first form takes a property name,
 
-         number of
 
-         arguments, and an array of variants. The second form takes a property name and
 
-         zero to six
 
-         constant references to variants. Since the variant class has constructors for
 
-         the basic
 
-         data types, and C++ provides temporary objects automatically, both of the
 
-         following lines
 
-         are syntactically valid:
 
-         Note that @a property can contain dot-separated property names, to save the
 
-         application
 
-         needing to call GetProperty several times using several temporary objects.
 
-     */
 
-     wxVariant GetProperty(const wxString& property, int noArgs,
 
-                           wxVariant args[]) const;
 
-     const wxVariant  GetProperty(const wxString& property, ... ) const;
 
-     //@}
 
-     /**
 
-         This function is a low-level implementation that allows access to the IDispatch
 
-         Invoke function.
 
-         It is not meant to be called directly by the application, but is used by other
 
-         convenience functions.
 
-         @param member
 
-             The member function or property name.
 
-         @param action
 
-             Bitlist: may contain DISPATCH_PROPERTYPUT, DISPATCH_PROPERTYPUTREF,
 
-             DISPATCH_METHOD.
 
-         @param retValue
 
-             Return value (ignored if there is no return value)
 
-         @param noArgs
 
-             Number of arguments in args or ptrArgs.
 
-         @param args
 
-             If non-null, contains an array of variants.
 
-         @param ptrArgs
 
-             If non-null, contains an array of constant pointers to variants.
 
-         @return @true if the operation was successful, @false otherwise.
 
-         @remarks Two types of argument array are provided, so that when possible
 
-                  pointers are used for efficiency.
 
-     */
 
-     bool Invoke(const wxString& member, int action,
 
-                 wxVariant& retValue, int noArgs,
 
-                 wxVariant args[],
 
-                 const wxVariant* ptrArgs[] = 0) const;
 
-     //@{
 
-     /**
 
-         Puts a property value into this object. The first form takes a property name,
 
-         number of
 
-         arguments, and an array of variants. The second form takes a property name and
 
-         zero to six
 
-         constant references to variants. Since the variant class has constructors for
 
-         the basic
 
-         data types, and C++ provides temporary objects automatically, both of the
 
-         following lines
 
-         are syntactically valid:
 
-         Note that @a property can contain dot-separated property names, to save the
 
-         application
 
-         needing to call GetProperty several times using several temporary objects.
 
-     */
 
-     bool PutProperty(const wxString& property, int noArgs,
 
-                      wxVariant args[]);
 
-     const bool PutProperty(const wxString& property, ... );
 
-     //@}
 
-     /**
 
-         Sets the IDispatch pointer. This function does not check if there is already an
 
-         IDispatch pointer.
 
-         You may need to cast from IDispatch* to WXIDISPATCH* when calling this function.
 
-     */
 
-     void SetDispatchPtr(WXIDISPATCH* dispatchPtr);
 
-     /**
 
-         Returns the locale identifier used in automation calls.
 
-         The default is LOCALE_SYSTEM_DEFAULT but the objects obtained by
 
-         GetObject() inherit the locale identifier from the one that created
 
-         them.
 
-         @since 2.9.5
 
-     */
 
-     LCID GetLCID() const;
 
-     /**
 
-         Sets the locale identifier to be used in automation calls performed by
 
-         this object.
 
-         The default value is LOCALE_SYSTEM_DEFAULT.
 
-         Notice that any automation objects created by this one inherit the same
 
-         LCID.
 
-         @since 2.9.5
 
-     */
 
-     void SetLCID(LCID lcid);
 
-     /**
 
-         Returns the flags used for conversions between wxVariant and OLE
 
-         VARIANT, see wxOleConvertVariantFlags.
 
-         The default value is wxOleConvertVariant_Default for compatibility but
 
-         it can be changed using SetConvertVariantFlags().
 
-         Notice that objects obtained by GetObject() inherit the flags from the
 
-         one that created them.
 
-         @since 3.0
 
-     */
 
-     long GetConvertVariantFlags() const;
 
-     /**
 
-         Sets the flags used for conversions between wxVariant and OLE VARIANT,
 
-         see wxOleConvertVariantFlags.
 
-         The default value is wxOleConvertVariant_Default.
 
-         @since 3.0
 
-     */
 
-     void SetConvertVariantFlags(long flags);
 
- };
 
 
  |