LPDISPATCH pDisp = NULL; LPOLECOMMANDTARGET pCmdTarg = NULL; pDisp = m_pBrowser.get_Document(); ASSERT(pDisp); pDisp->QueryInterface(IID_IOleCommandTarget, (LPVOID*)&pCmdTarg); ASSERT(pCmdTarg); VARIANT vaZoomFactor; // input arguments VariantInit(&vaZoomFactor); V_VT(&vaZoomFactor) = VT_I4; V_I4(&vaZoomFactor) = fontSize; pCmdTarg->Exec(NULL, OLECMDID_ZOOM, OLECMDEXECOPT_DONTPROMPTUSER, &vaZoomFactor, NULL); VariantClear(&vaZoomFactor); if (pCmdTarg) pCmdTarg->Release(); // release document's command target if (pDisp) pDisp->Release(); // release document's dispatch interfacewell the C code isn't real easy to read but it ends up being equivalent to this one line of VFP code *g*
thisform.oIE.ExecWB( 19, 2, 2, null ) && 3rd arg values 1..5 inclusivewhere do those numbers come from? well searching the VC++ .h files for OLECMDID_ZOOM finds them in docobj.h (I'm not sure if these .h files are online or not, but I have VC++ installed so that's where I look first)
typedef enum OLECMDEXECOPT { OLECMDEXECOPT_DODEFAULT = 0, OLECMDEXECOPT_PROMPTUSER = 1, OLECMDEXECOPT_DONTPROMPTUSER = 2, OLECMDEXECOPT_SHOWHELP = 3 } OLECMDEXECOPT; /* OLECMDID_STOPDOWNLOAD is supported for QueryStatus Only */ typedef enum OLECMDID { OLECMDID_OPEN = 1, OLECMDID_NEW = 2, OLECMDID_SAVE = 3, OLECMDID_SAVEAS = 4, OLECMDID_SAVECOPYAS = 5, OLECMDID_PRINT = 6, OLECMDID_PRINTPREVIEW = 7, OLECMDID_PAGESETUP = 8, OLECMDID_SPELL = 9, OLECMDID_PROPERTIES = 10, OLECMDID_CUT = 11, OLECMDID_COPY = 12, OLECMDID_PASTE = 13, OLECMDID_PASTESPECIAL = 14, OLECMDID_UNDO = 15, OLECMDID_REDO = 16, OLECMDID_SELECTALL = 17, OLECMDID_CLEARSELECTION = 18, OLECMDID_ZOOM = 19, OLECMDID_GETZOOMRANGE = 20, OLECMDID_UPDATECOMMANDS = 21, OLECMDID_REFRESH = 22, OLECMDID_STOP = 23, OLECMDID_HIDETOOLBARS = 24, OLECMDID_SETPROGRESSMAX = 25, OLECMDID_SETPROGRESSPOS = 26, OLECMDID_SETPROGRESSTEXT = 27, OLECMDID_SETTITLE = 28, OLECMDID_SETDOWNLOADSTATE = 29, OLECMDID_STOPDOWNLOAD = 30, OLECMDID_ONTOOLBARACTIVATED = 31, OLECMDID_FIND = 32, OLECMDID_DELETE = 33, OLECMDID_HTTPEQUIV = 34, OLECMDID_HTTPEQUIV_DONE = 35, OLECMDID_ENABLE_INTERACTION = 36, OLECMDID_ONUNLOAD = 37, OLECMDID_PROPERTYBAG2 = 38, OLECMDID_PREREFRESH = 39 } OLECMDID;Or if you want to be a bit cleaner in VFP
* docobj.h #define OLECMDEXECOPT_DODEFAULT 0 #define OLECMDEXECOPT_PROMPTUSER 1 #define OLECMDEXECOPT_DONTPROMPTUSER 2 #define OLECMDEXECOPT_SHOWHELP 3 #define ... #define OLECMDID_ZOOM 19 #define ... * your form #include docobj.h thisform.oIE.ExecWB( OLECMDID_ZOOM, OLECMDEXECOPT_DONTPROMPTUSER, 2, null )>I'am taming the IE activeX on vfp forms. A few documented quirks (the refresh method has to be NODEFAULTed, the beast is better fed with temp resources than with a string) but all in all it works acceptably fine.