HRESULT __stdcall DWebBrowserEventsImpl::Invoke(DISPID dispIdMember,
            REFIID riid,
            LCID lcid,
            WORD wFlags,
            DISPPARAMS __RPC_FAR *pDispParams,
            VARIANT __RPC_FAR *pVarResult,
            EXCEPINFO __RPC_FAR *pExcepInfo,
            UINT __RPC_FAR *puArgErr)
{ 
	// proces OnBeforeNavigate
	if (dispIdMember == DISPID_BEFORENAVIGATE)
	{
		BeforeNavigate( _bstr_t( pDispParams->rgvarg[5].bstrVal ),
						0,
						_bstr_t( pDispParams->rgvarg[3].bstrVal ),
						NULL,
						_bstr_t(""),
						NULL);
		
	}
	else if (dispIdMember == DISPID_NAVIGATECOMPLETE)
	{
		NavigateComplete( _bstr_t( pDispParams->rgvarg[0].bstrVal ) );
	}

	return NOERROR;
}
示例#2
0
long CLauncherWindow::OnNotify(WPARAM wparam, NMHDR* hdr)
{
	if(CWindow::IsNotifySource(&m_webBrowser, hdr))
	{
		switch(hdr->code)
		{
		case Framework::Win32::CWebBrowser::NOTIFICATION_BEFORENAVIGATE:
			BeforeNavigate(static_cast<Framework::Win32::CWebBrowser::BEFORENAVIGATE_INFO*>(hdr));
			break;
		}
	}
	return FALSE;
}
示例#3
0
// See also:
// http://msdn.microsoft.com/library/default.asp?url=/library/en-us/automat/htm/chap6_7zdz.asp
HRESULT mHpWebClient::Invoke( 
    DISPID             dispIdMember,      
    REFIID             /*riid*/,              
    LCID               /*lcid        */ ,               
    WORD               /*wFlags      */ ,             
    DISPPARAMS FAR*    pDispParams      , 
    VARIANT FAR*       /*pVarResult  */ , 
    EXCEPINFO FAR*     /*pExcepInfo  */ , 
    unsigned int FAR*  /*puArgErr    */
    ) {
      /* 
         _______________
         From ExDispid.h
      ---===============---

      
     The constants passed through dispIdMember seem to be defined in ExDispId.h.
     However, in the MinGw distribution, only a few are defined, much less than
     in Microsofts Platform SDK.
     So, I am defininig those that I need here....
  */
#define DISPID_BEFORENAVIGATE     100   // this is sent before navigation to give a chance to abort
#define DISPID_COMMANDSTATECHANGE 105
#define DISPID_NAVIGATECOMPLETE2    252   // UIActivate new document
#define DISPID_NAVIGATEERROR        271   // Fired to indicate the a binding error has occured
#define DISPID_DOWNLOADCOMPLETE   104
#define DISPID_DOWNLOADBEGIN      106
#define DISPID_PROPERTYCHANGE     112   // sent when the PutProperty method is called
#define DISPID_SETSECURELOCKICON    269   // sent to suggest the appropriate security icon to show
//#define DISPID_PROGRESSCHANGE     108   // sent when download progress is updated
  switch (dispIdMember) {
  case DISPID_BEFORENAVIGATE     :   // this is sent before navigation to give a chance to abort
    ::MessageBox(0, "Before Navigate", 0, 0);
    return S_OK;
    break;
//  case DISPID_NAVIGATECOMPLETE   :   // in async, this is sent when we have enough to show
//
//    ::MessageBox(0, "Download complete", 0, 0);
//  break;
  case DISPID_STATUSTEXTCHANGE   :
  //case DISPID_QUIT               :
  case DISPID_DOWNLOADCOMPLETE: 
    return S_OK;
  case DISPID_COMMANDSTATECHANGE :
    return S_OK;
    break;
  case DISPID_DOWNLOADBEGIN      :
    return S_OK;
  break;
  //case DISPID_NEWWINDOW          :   // sent when a new window should be created
  case DISPID_PROGRESSCHANGE     :   // sent when download progress is updated
  //case DISPID_WINDOWMOVE         :   // sent when main window has been moved
  //case DISPID_WINDOWRESIZE       :   // sent when main window has been sized
  //case DISPID_WINDOWACTIVATE     :   // sent when main window has been activated
  case DISPID_PROPERTYCHANGE: {   // sent when the PutProperty method is called
    VARIANT a = pDispParams->rgvarg[0];
    
    return S_OK;
  }
  case DISPID_TITLECHANGE        :   // sent when the document title changes
  //case DISPID_TITLEICONCHANGE    :   // sent when the top level window icon may have changed.
  //case DISPID_FRAMEBEFORENAVIGATE    :
  //case DISPID_FRAMENAVIGATECOMPLETE  :
  //case DISPID_FRAMENEWWINDOW         :
  return S_OK;
  break;

  // DISPID_BEFORENAVIGATE2 replaces BeforeNavigate and FrameBeforeNavigate. These should not be
  // used anymore.
  case DISPID_BEFORENAVIGATE2: {   // hyperlink clicked on
    TraceFunc("DWebBrowserEvents2::BeforeNavigate2 ");

    VARIANT vURL_p = pDispParams->rgvarg[5];

    VARIANT vURL = *(vURL_p.pvarVal);

    VARIANT  vCANCEL = pDispParams->rgvarg[0];
    std::string type = VariantTypeAsString(vCANCEL);

    std::wstring ws_url = vURL.bstrVal;

    std::string url = ws2s(ws_url);

    Trace2("url=", url);

    if (BeforeNavigate(url, pDispParams)) {
      *(vCANCEL.pboolVal) = VARIANT_FALSE;
    }
    else {
      *(vCANCEL.pboolVal) = VARIANT_TRUE;

      VARIANT vDisp = pDispParams->rgvarg[6];
      IDispatch* disp=vDisp.pdispVal;
      
      IWebBrowser2* webBrowser;
      disp->QueryInterface(IID_IWebBrowser2, reinterpret_cast<void**>(&webBrowser));
      webBrowser->Stop();
    }
    
    return S_OK;
  }
  break;
  case DISPID_NEWWINDOW2:          
    return S_OK;
  case DISPID_NAVIGATECOMPLETE2:       // UIActivate new document
    return S_OK;
    break;
  //case DISPID_ONQUIT               :
  //case DISPID_ONVISIBLE            :   // sent when the window goes visible/hidden
  //case DISPID_ONTOOLBAR            :   // sent when the toolbar should be shown/hidden
  //case DISPID_ONMENUBAR            :   // sent when the menubar should be shown/hidden
  //case DISPID_ONSTATUSBAR          :   // sent when the statusbar should be shown/hidden
  //case DISPID_ONFULLSCREEN         :   // sent when kiosk mode should be on/off
  case DISPID_DOCUMENTCOMPLETE     :   // new document goes ReadyState_Complete
    //AddSink();
    return S_OK;
  //case DISPID_ONTHEATERMODE        :   // sent when theater mode should be on/off
  //case DISPID_ONADDRESSBAR         :   // sent when the address bar should be shown/hidden
  //case DISPID_WINDOWSETRESIZABLE   :   // sent to set the style of the host window frame
  //case DISPID_WINDOWCLOSING        :   // sent before script window.close closes the window 
  //case DISPID_WINDOWSETLEFT        :   // sent when the put_left method is called on the WebOC
  //case DISPID_WINDOWSETTOP         :   // sent when the put_top method is called on the WebOC
  //case DISPID_WINDOWSETWIDTH       :   // sent when the put_width method is called on the WebOC
  //case DISPID_WINDOWSETHEIGHT      :   // sent when the put_height method is called on the WebOC 
  //case DISPID_CLIENTTOHOSTWINDOW   :   // sent during window.open to request conversion of dimensions
  //case DISPID_SETSECURELOCKICON    :   // sent to suggest the appropriate security icon to show
  //case DISPID_FILEDOWNLOAD         :   // Fired to indicate the File Download dialog is opening
  case DISPID_NAVIGATEERROR: {   // Fired to indicate the a binding error has occured
    char buf[200];
    VARIANT StatusCode=*((pDispParams->rgvarg[1]).pvarVal);
    sprintf(buf, "Navigate Error, code is: %d", static_cast<int>(StatusCode.lVal));
    MessageBox(0, buf, 0, 0);
  //case DISPID_PRIVACYIMPACTEDSTATECHANGE   :  // Fired when the user's browsing experience is impacted
   return S_OK;
  }
  default:
    char buf[50];
    sprintf(buf, "invoke, dispid: %d", static_cast<int>(dispIdMember));
    if (TODO_bool) ::MessageBox(0, buf, 0, 0);
    return DISP_E_MEMBERNOTFOUND;
  }
}