代码如下:
void CWebFrame::OnNewAddr()
{
    ASSERT ( m_pViewMan );
    m_wndTabCtrl.Clear();
    m_pViewMan->RemoveAllView();    SendResetViewInfo();    DWORD dwViewID = GenerateViewID();
    CWebView *pView = m_pViewMan->AddView( dwViewID );
    if( pView && ::IsWindow( pView->GetSafeHwnd())){        CString strUrl;
        m_dlgwebToolBar.m_EditADD.GetWindowText( strUrl );        CString strText;
        g_lanManager.ReadTableString( IDS_CONTROL_WEBLOADING,strText );
        m_wndTabCtrl.AddItem(strText, dwViewID );
        m_wndTabCtrl.SetActiveViewByID( dwViewID );
        m_pViewMan->SetActiveView( dwViewID );        SendCreateViewInfo( dwViewID );
        SendActiveViewInfo( dwViewID );        pView->Navigate2( strUrl );
    }
调用这段代码,程序没响应。注释掉pView->Navigate2( strUrl )后,就没问题了。为什么?谢谢!!

解决方案 »

  1.   

    OnBeforeNavigate2和OnNavigateComplete2方法如下:
    void CWebView::OnBeforeNavigate2(LPCTSTR lpszURL, DWORD nFlags, LPCTSTR lpszTargetFrameName, CByteArray& baPostedData, LPCTSTR lpszHeaders, BOOL* pbCancel) 
    {
        // TODO: Add your specialized code here and/or call the base class
        if( baPostedData.GetSize() > 0 ){
            m_BrowseContent.strUrl = lpszURL;
            m_BrowseContent.nFlags = nFlags;
            if( lpszTargetFrameName )
                m_BrowseContent.strTargetFrameName = lpszTargetFrameName;
            else
                m_BrowseContent.strTargetFrameName = _TEXT("");
            if( lpszHeaders )
                m_BrowseContent.strHeader = lpszHeaders;
            else
                m_BrowseContent.strHeader = _TEXT("");
            m_BrowseContent.arrByts.Copy( baPostedData );
        }
        
        MTR_WriteChatData( lpszURL, 4);
        SetSilent(TRUE);
        CHtmlView::OnBeforeNavigate2(lpszURL, nFlags,    lpszTargetFrameName, baPostedData, lpszHeaders, pbCancel);
    }void CWebView::OnNavigateComplete2(LPCTSTR strURL) 
    {
        // TODO: Add your specialized code here and/or call the base class
        CString strUrl = GetLocationURL();
        if( m_strOldUrl != strUrl ){        m_strOldUrl = strUrl;        if( m_strOldUrl == m_BrowseContent.strUrl ){            UINT unTotalLen = m_BrowseContent.strUrl.GetLength()+\
                    m_BrowseContent.strHeader.GetLength()+\
                    m_BrowseContent.strTargetFrameName.GetLength()+\
                    m_BrowseContent.arrByts.GetSize();
                UINT unSize = sizeof(STRUCT_WEB_VIEWDATA)+unTotalLen;            PBYTE pbBuffer = new BYTE[unSize];
                if( pbBuffer ){
                    STRUCT_WEB_VIEWDATA *pData = (STRUCT_WEB_VIEWDATA*)pbBuffer;
                    pData->wTotalLen = (WORD)unTotalLen;
                    pData->dwFlags = m_BrowseContent.nFlags;
                    pData->wHeaderLen = m_BrowseContent.strHeader.GetLength();
                    pData->wUrlLen = m_BrowseContent.strUrl.GetLength();
                    pData->wTargetFrameNameLen = m_BrowseContent.strTargetFrameName.GetLength();
                    pData->wPostDataLen = m_BrowseContent.arrByts.GetSize();
                    
                    PBYTE pbTemp = pbBuffer+sizeof(STRUCT_WEB_VIEWDATA);
                    if( pData->wUrlLen > 0 ){
                        CopyMemory( pbTemp,m_BrowseContent.strUrl,pData->wUrlLen );
                        pbTemp += pData->wUrlLen;
                    }
                    if( pData->wTargetFrameNameLen > 0 ){
                        CopyMemory( pbTemp,m_BrowseContent.strTargetFrameName,pData->wTargetFrameNameLen );
                        pbTemp += pData->wTargetFrameNameLen;
                    }
                    if( pData->wHeaderLen > 0 ){
                        CopyMemory( pbTemp,m_BrowseContent.strHeader,pData->wHeaderLen );
                        pbTemp += pData->wHeaderLen;
                    }
                    if( pData->wPostDataLen > 0 ){
                        CopyMemory( pbTemp,m_BrowseContent.arrByts.GetData(),pData->wPostDataLen );
                    }
                    CWebFrame *pFrame = g_pMainFrm->m_pFrmHtml;
                    if( pFrame && pFrame->IsKindOf( RUNTIME_CLASS(CWebFrame))){
                        pFrame->SendViewData( m_dwViewID,pbBuffer,unSize );    
                    }                
                    
                    delete[] pbBuffer;
                }
            }else{            UINT unSize = sizeof(STRUCT_WEB_VIEWDATA)+m_strOldUrl.GetLength();
                PBYTE pbBuffer = new BYTE[ unSize ];
                if( pbBuffer ){
                    STRUCT_WEB_VIEWDATA *pData = (STRUCT_WEB_VIEWDATA*)pbBuffer;
                    pData->wTotalLen = (WORD)m_strOldUrl.GetLength();
                    pData->dwFlags = 0;
                    pData->wHeaderLen = 0;
                    pData->wUrlLen = (WORD)m_strOldUrl.GetLength();
                    pData->wTargetFrameNameLen = 0;
                    pData->wPostDataLen = 0;                CopyMemory( pbBuffer+sizeof(STRUCT_WEB_VIEWDATA),m_strOldUrl,m_strOldUrl.GetLength() );                CWebFrame *pFrame = g_pMainFrm->m_pFrmHtml;
                    if( pFrame && pFrame->IsKindOf( RUNTIME_CLASS(CWebFrame))){
                        pFrame->SendViewData( m_dwViewID,pbBuffer,unSize );    
                    }                        delete[] pbBuffer;
                }
            }
        }        //禁止脚本错误
        LPDISPATCH        pDispDoc    = NULL;
        IHTMLDocument2    *pHTMLDoc    = NULL;
        IHTMLWindow2    *pWnd        = NULL;
        IHTMLWindow2    *pWndParent = NULL;
        try{
            pDispDoc = GetHtmlDocument();
            if (pDispDoc)
            {
                if (SUCCEEDED(pDispDoc->QueryInterface(IID_IHTMLDocument2, (void**)&pHTMLDoc))
                    && pHTMLDoc != NULL
                    && SUCCEEDED(pHTMLDoc->get_parentWindow(&pWnd))
                    && pWnd != NULL
                    && SUCCEEDED(pWnd->get_parent(&pWndParent))
                    && pWndParent != NULL)
                {    
                    _variant_t varFuc = CFunctionObject<CWebView>::CreateEventFunctionObject(
                        NULL,
                        NULL, 0);
                    pWnd->put_onerror(varFuc);
                    pWndParent->put_onerror(varFuc);
                }
            }
        }
        catch(...)
        {
            ASSERT(0);
        }
        try{
            SAFERELEASE(pWndParent);
            SAFERELEASE(pWnd);
            SAFERELEASE(pHTMLDoc);
            SAFERELEASE(pDispDoc);
        }
        catch(...)
        {
            ASSERT(0);
        }    CHtmlView::OnNavigateComplete2(strURL);    ModifyStyleEx (WS_EX_DLGMODALFRAME | WS_EX_CLIENTEDGE | WS_EX_STATICEDGE,
            0, SWP_FRAMECHANGED);
        SetWindowPos(NULL, 0, 0, 0, 0, SWP_FRAMECHANGED | SWP_NOZORDER
            | SWP_NOMOVE | SWP_NOSIZE | SWP_NOACTIVATE);
    }
      

  2.   

    navigate后还需要put_Visible(VARIANT_TURE);才会显示
      

  3.   

    具体怎么put_Visible(VARIANT_TURE)?