m_ctrlWeb.Navigate(_T("about:blank"), NULL, NULL, NULL,NULL);
m_ctrlWeb.SetDesignMode(TRUE);......LPDISPATCH lpDisp = NULL;
IWebBrowser2* lpWB = NULL;
......
if(SUCCEEDED(lpDisp->QueryInterface(IID_IWebBrowser2, (void**)&lpWB)))
{
     lpWB->ExecWB(OLECMDID_SAVEAS, OLECMDEXECOPT_DODEFAULT,NULL, NULL);
}保存不了在编辑状态加进去的内容,仍然是blank的内容。请高手指点。

解决方案 »

  1.   

    给你一段代码,可以获取编辑框的内容
    typedef void* HHTMLWND;
    typedefvoid* HHTMLSEL;
    //得到CHtmlView中具有焦点的Input Text,hWnd是WebBroswer控件的窗口句柄
    HHTMLWND GetActiveHtmlTextCtrlHandle(HWND hWnd)
    {
    IHTMLDocument2* pDoc2 = NULL;
    LRESULT lRes;
    HINSTANCE hInst = ::LoadLibrary( _T("OLEACC.DLL") );UINT nMsg = ::RegisterWindowMessage( _T("WM_HTML_GETOBJECT") );
    ::SendMessageTimeout(hWnd, nMsg, 0L, 0L, SMTO_ABORTIFHUNG, 1000, (DWORD*)&lRes );
    LPFNOBJECTFROMLRESULT pfObjectFromLresult = (LPFNOBJECTFROMLRESULT)::GetProcAddress( hInst, _T("ObjectFromLresult") );
    if ( pfObjectFromLresult != NULL )
    {
    HRESULT hr;
    IHTMLDocument2* pDoc;
    hr = (*pfObjectFromLresult)( lRes, IID_IHTMLDocument, 0, (void**)&pDoc);
    if ( SUCCEEDED(hr) )
    {
    CComPtr<IDispatch> spDisp;
    CComQIPtr<IHTMLWindow2> spWin;
    pDoc->get_Script( &spDisp );
    pDoc->Release();
    spWin = spDisp;
    spWin->get_document( &pDoc2);
    while(pDoc2)
    {
    IHTMLElement* pElement;
    if(SUCCEEDED(pDoc2->get_activeElement(&pElement)))
    {
    pDoc2->Release();
    pDoc2 = NULL;CComBSTR tagName;
    pElement->get_tagName(&tagName);
    CString str = tagName;
    str.MakeUpper();
    if (str == "FRAME" || str == "IFRAME")
    {
    HRESULT hr; 
    IHTMLWindow2 *pHTMLWindow;
    IHTMLFrameBase2* pHTMLFrameBase2;
    hr =pElement->QueryInterface(IID_IHTMLFrameBase2, (void**)&pHTMLFrameBase2);
    pElement->Release();
    hr = pHTMLFrameBase2->get_contentWindow(&pHTMLWindow);
    pHTMLFrameBase2->Release();
    hr = pHTMLWindow->get_document(&pDoc2);}
    else
    {
    VARIANT_BOOL bText;
    pElement->get_isTextEdit(&bText);
    if (bText == VARIANT_TRUE)
    {
    return pElement;}
    else
    pElement->Release();
    }
    }
    }
    }
    }
    ::FreeLibrary( hInst );
    return NULL;
    }
    //得到input text的文本
    INT GetActiveHtmlText(HHTMLWND hWnd, LPTSTR& lpText, BOOL& bDel)
    {
    IHTMLElement* pElement = (IHTMLElement* )hWnd;
    HRESULT hr; 
    BSTR value;
    IHTMLInputTextElement* pHTMLInputTextElement;
    hr = pElement->QueryInterface(IID_IHTMLInputTextElement, (void**)&pHTMLInputTextElement);
    if (SUCCEEDED(hr))
    {
    pHTMLInputTextElement->get_value(&value);
    pHTMLInputTextElement->Release();
    }
    else
    {
    IHTMLTextAreaElement* pHTMLTextAreaElement;
    hr = pElement->QueryInterface(IID_IHTMLTextAreaElement, 
    (void**)&pHTMLTextAreaElement);
    if (SUCCEEDED(hr))
    {
    pHTMLTextAreaElement->get_value(&value);
    pHTMLTextAreaElement->Release();
    }
    }
    INT nLen = SysStringLen(value);
    #ifdef _UNICODE
    lpText = new WCHAR[nLen+1];
    wcscpy(lpText, value);
    #else
    lpText = new CHAR[2*nLen+1];
    WideCharToMultiByte(936, 0, value, -1, lpText, 2*nLen+1, NULL, NULL);
    #endif
    SysFreeString(value);
    bDel = TRUE;
    return 0;
    }
      

  2.   

    上面那个是获得具有当前焦点的编辑框的文本,如果你要获得任何一个编辑框的文本,用这个
    LPDISPATCH lpDispatch = m_pHtml->GetHtmlDocument();
    IHTMLDocument2* pDoc2 = NULL;
     IHTMLElementCollection* pElementCol=NULL;
    lpDispatch->QueryInterface(IID_HTMLDocument2, (VOID**)&pDoc2);
    pDoc2 ->get_all(&pElementCol); LONG iCount=0;
     if ( pElementCol->get_length(&iCount)<0 )
         return FALSE; for ( int i=0; i<iCount; i++ )
     {
          VARIANT  id, index;
          V_VT(&id)    = VT_I4;
          V_I4(&id)    = i;
          V_VT(&index) = VT_I4;
          V_I4(&index) = 0;      IDispatch* pDispatch=NULL;
          if ( pElementCol->item(id, index, &pDispatch)==0 )
          {
              IHTMLElement* pElement=NULL;
              pDispatch->QueryInterface(IID_IHTMLElement,(void**)&pElement);
              
     BSTR value;
              IHTMLInputTextElement* pInputElement=NULL;
              if ( pDispatch->QueryInterface(IID_IHTMLInputTextElement,(void**)&pInputElement)==0)
              {
    pHTMLInputTextElement->get_value(&value);
    pHTMLInputTextElement->Release();
                      这个就是
                      CString strVulue = value;
                 
              }
          }
     }
      

  3.   

    光保存文本没有用,html中有图片时,应该把图片文件也保存。