用MFC AvtiveX ControlWizard 创建了一个ActiveX控件,该控件要在网页上用,并且该控件的方法中需要使用到浏览该网页的IE的地址栏中的地址串。
那请问如何如何在ActiveX控件中获得IE地址栏中的地址呢??
谢谢!

解决方案 »

  1.   

    http://support.microsoft.com/kb/181678
      

  2.   

    谢谢!
    加了:
    STDMETHOD(SetClientSite)(IOleClientSite *pClientSite);STDMETHODIMP CVC404PCtrl::SetClientSite(IOleClientSite *pClientSite)
    {
      if (pClientSite != NULL)
       {
          // Obtain URL from container moniker.
          CComPtr<IMoniker> spmk;
          LPOLESTR pszDisplayName;      if (SUCCEEDED(pClientSite->GetMoniker(
                                        OLEGETMONIKER_TEMPFORUSER,
                                        OLEWHICHMK_CONTAINER,
                                        &spmk)))
          {
             if (SUCCEEDED(spmk->GetDisplayName(
                                     NULL, NULL, &pszDisplayName)))
             {
                USES_CONVERSION;            CComBSTR bstrURL;
                bstrURL = pszDisplayName;            ATLTRACE("The current URL is %s\n", OLE2T(bstrURL));
                CoTaskMemFree((LPVOID)pszDisplayName);
             }
          }
       }   return S_OK;
    //   return IOleObject_SetClientSite(pClientSite);
    }但是不行啊,该控件是继承于COleControl,而COleControl继承于CWnd,是一个窗口型的ActiveX控件,调试运行根本不能进入该函数.
      

  3.   

    重载COleControl的OnSetClientSite
    用GetClientSite获得LPOLECLIENTSITE即IOleClientSite*,其它一样。
      

  4.   

    谢谢各位老大,搞定!void CVC404PCtrl::OnSetClientSite() 
    {
    // TODO: Add your specialized code here and/or call the base class if (m_pControlSite != NULL)
    {
    // Obtain URL from container moniker.
    CComPtr<IMoniker> spmk;
    LPOLESTR pszDisplayName;
    IOleClientSite *pClientSite = NULL;
    m_pControlSite->QueryInterface(IID_IOleClientSite, (void**)&pClientSite);
    if (SUCCEEDED(pClientSite->GetMoniker(
    OLEGETMONIKER_TEMPFORUSER,
    OLEWHICHMK_CONTAINER,
    &spmk)))
    {
    if (SUCCEEDED(spmk->GetDisplayName(
    NULL, NULL, &pszDisplayName)))
    {
    USES_CONVERSION;

    CComBSTR bstrURL;
    bstrURL = pszDisplayName;

    ATLTRACE("The current URL is %s\n", OLE2T(bstrURL));
    CoTaskMemFree((LPVOID)pszDisplayName);
    CString strServerIP = OLE2T(bstrURL);
    g_strServerIP = strServerIP.Mid(7);
    int nPos = g_strServerIP.Find('/', 0);
    if(nPos > 0)
    g_strServerIP = g_strServerIP.Left(nPos);
    }
    }
    } COleControl::OnSetClientSite();
    }