Wx-ActiveX
view release on metacpan or search on metacpan
cpp/wxactivex.h view on Meta::CPAN
{\
delete this;\
return 0;\
};\
return refCount.l;\
}\
else\
return 0;\
}\
ULONG STDMETHODCALLTYPE cls::AddLock()\
{\
WXOLE_TRACEOUT(# cls << "::Add Lock(" << lockCount.l << ")");\
InterlockedIncrement(&lockCount.l);\
return lockCount.l;\
};\
ULONG STDMETHODCALLTYPE cls::ReleaseLock()\
{\
if (lockCount.l > 0)\
{\
InterlockedDecrement(&lockCount.l);\
WXOLE_TRACEOUT(# cls << "::Del Lock(" << lockCount.l << ")");\
return lockCount.l;\
}\
else\
return 0;\
}\
DEFINE_OLE_BASE(cls)
#define DEFINE_OLE_BASE(cls)\
void cls::_GetInterface(cls *self, REFIID iid, void **_interface, const char *&desc)\
{\
*_interface = NULL;\
desc = NULL;
#define OLE_INTERFACE(_iid, _type)\
if (IsEqualIID(iid, _iid))\
{\
WXOLE_TRACE("Found Interface <" # _type ">");\
*_interface = (IUnknown *) (_type *) self;\
desc = # _iid;\
return;\
}
#define OLE_IINTERFACE(_face) OLE_INTERFACE(IID_##_face, _face)
#define OLE_INTERFACE_CUSTOM(func)\
if (func(self, iid, _interface, desc))\
{\
return;\
}
#define END_OLE_TABLE\
}
/// Main class for embedding a ActiveX control.
/// Use by itself or derive from it
/// \note The utility program (wxie) can generate a list of events, methods & properties
/// for a control.
/// First display the control (File|Display),
/// then get the type info (ActiveX|Get Type Info) - these are copied to the clipboard.
/// Eventually this will be expanded to autogenerate
/// wxWindows source files for a control with all methods etc encapsulated.
/// \par Usage:
/// construct using a ProgId or class id
/// \code new wxActiveX(parent, CLSID_WebBrowser, id, pos, size, style, name)\endcode
/// \code new wxActiveX(parent, "ShockwaveFlash.ShockwaveFlash", id, pos, size, style, name)\endcode
/// \par Properties
/// Properties can be set using \c SetProp() and set/retrieved using \c Prop()
/// \code SetProp(name, wxVariant(x)) \endcode or
/// \code wxString Prop("<name>") = x\endcode
/// \code wxString result = Prop("<name>")\endcode
/// \code flash_ctl.Prop("movie") = "file:///movies/test.swf";\endcode
/// \code flash_ctl.Prop("Playing") = false;\endcode
/// \code wxString current_movie = flash_ctl.Prop("movie");\endcode
/// \par Methods
/// Methods are invoked with \c CallMethod()
/// \code wxVariant result = CallMethod("<name>", args, nargs = -1)\endcode
/// \code wxVariant args[] = {0L, "file:///e:/dev/wxie/bug-zap.swf"};
/// wxVariant result = X->CallMethod("LoadMovie", args);\endcode
/// \par events
/// respond to events with the
/// \c EVT_ACTIVEX(controlId, eventName, handler) &
/// \c EVT_ACTIVEX_DISPID(controlId, eventDispId, handler) macros
/// \code
/// BEGIN_EVENT_TABLE(wxIEFrame, wxFrame)
/// EVT_ACTIVEX_DISPID(ID_MSHTML, DISPID_STATUSTEXTCHANGE, OnMSHTMLStatusTextChangeX)
/// EVT_ACTIVEX(ID_MSHTML, "BeforeNavigate2", OnMSHTMLBeforeNavigate2X)
/// EVT_ACTIVEX(ID_MSHTML, "TitleChange", OnMSHTMLTitleChangeX)
/// EVT_ACTIVEX(ID_MSHTML, "NewWindow2", OnMSHTMLNewWindow2X)
/// EVT_ACTIVEX(ID_MSHTML, "ProgressChange", OnMSHTMLProgressChangeX)
/// END_EVENT_TABLE()\endcode
class wxActiveX : public wxWindow {
public:
/// General parameter and return type infoformation for Events, Properties and Methods.
/// refer to ELEMDESC, IDLDESC in MSDN
IDispatch* GetOLEDispatch() { return m_Dispatch; };
class ParamX
{
public:
USHORT flags;
bool isPtr, isSafeArray;
VARTYPE vt;
wxString name;
ParamX() : vt(VT_EMPTY) {}
inline bool IsIn() const {return (flags & IDLFLAG_FIN) != 0;}
inline bool IsOut() const {return (flags & IDLFLAG_FOUT) != 0;}
inline bool IsRetVal() const {return (flags & IDLFLAG_FRETVAL) != 0;}
};
typedef vector<ParamX> ParamXArray;
/// Type & Parameter info for Events and Methods.
/// refer to FUNCDESC in MSDN
class FuncX
{
public:
wxString name;
( run in 0.675 second using v1.01-cache-2.11-cpan-84e82930d8c )