我想像Document/View在对话框中加入一个html的页面..行么???怎么实现??

解决方案 »

  1.   

    where I can find it...I found a CHtmlCtrl..and use it easily
      

  2.   

    project->add to project->components and controls...->
    Registered ActiveX Controls->Microsoft Web 浏览器
      

  3.   

    CHTMLCtrl.h////////////////////////////////////////////////////////////////
    // If this code works, it was written by Paul DiLascia.
    // If not, I don't know who wrote it.
    // Compiles with Visual C++ 6.0, runs on Windows 98 and probably NT too.
    //
    #include <afxhtml.h>
    class CHtmlCtrl : public CHtmlView {
    public:
    CHtmlCtrl() { }
    ~CHtmlCtrl() { } BOOL CreateFromStatic(UINT nID, CWnd* pParent); // Normally, CHtmlView destroys itself in PostNcDestroy,
    // but we don't want to do that for a control since a control
    // is usually implemented as a stack object in a dialog.
    //
    virtual void PostNcDestroy() {  } // overrides to bypass MFC doc/view frame dependencies
    afx_msg void OnDestroy();
    afx_msg int  OnMouseActivate(CWnd* pDesktopWnd, UINT nHitTest, UINT msg); // override to trap "app:" pseudo protocol
    virtual void OnBeforeNavigate2( LPCTSTR lpszURL,
    DWORD nFlags,
    LPCTSTR lpszTargetFrameName,
    CByteArray& baPostedData,
    LPCTSTR lpszHeaders,
    BOOL* pbCancel ); // override to handle links to "app:mumble...". lpszWhere will be "mumble"
    virtual void OnAppCmd(LPCTSTR lpszWhere);
    afx_msg BOOL OnEraseBkgnd(CDC* pDC);
    DECLARE_MESSAGE_MAP();
    DECLARE_DYNAMIC(CHtmlCtrl)
    };CHTMLCtrl.cpp////////////////////////////////////////////////////////////////
    // If this code works, it was written by Paul DiLascia.
    // If not, I don't know who wrote it.
    // Compiles with Visual C++ 6.0, runs on Windows 98 and probably NT too.
    //
    #include "StdAfx.h"
    #include "HtmlCtrl.h"#ifdef _DEBUG
    #define new DEBUG_NEW
    #undef THIS_FILE
    static char THIS_FILE[] = __FILE__;
    #endifIMPLEMENT_DYNAMIC(CHtmlCtrl, CHtmlView)
    BEGIN_MESSAGE_MAP(CHtmlCtrl, CHtmlView)
    ON_WM_DESTROY()
    ON_WM_MOUSEACTIVATE()
    END_MESSAGE_MAP()/////////////////////////////////////////////////////////////////////////////
    // Create control in same position as an existing static control with
    // the same ID (could be any kind of control, really)
    //
    BOOL CHtmlCtrl::CreateFromStatic(UINT nID, CWnd* pParent)
    {
    CStatic wndStatic;
    if (!wndStatic.SubclassDlgItem(nID, pParent))
    return FALSE; // Get static control rect, convert to parent's client coords.
    CRect rc;
    wndStatic.GetWindowRect(&rc);
    pParent->ScreenToClient(&rc);
    wndStatic.DestroyWindow(); // create HTML control (CHtmlView)
    return Create(NULL,  // class name
    NULL,  // title
    (WS_CHILD | WS_VISIBLE ),  // style
    rc,  // rectangle
    pParent,  // parent
    nID,  // control ID
    NULL);  // frame/doc context not used
    }/////////////////////////////////////////////////////////////////////
    // Override to avoid CView stuff that assumes a frame.
    //
    void CHtmlCtrl::OnDestroy()
    {
    // This is probably unnecessary since ~CHtmlView does it, but
    // safer to mimic CHtmlView::OnDestroy.
    if (m_pBrowserApp) {
    m_pBrowserApp->Release();
    m_pBrowserApp = NULL;
    }
    CWnd::OnDestroy(); // bypass CView doc/frame stuff
    }////////////////////////////////////////////////////////////////////////
    // Override to avoid CView stuff that assumes a frame.
    //
    int CHtmlCtrl::OnMouseActivate(CWnd* pDesktopWnd, UINT nHitTest, UINT msg)
    {
    // bypass CView doc/frame stuff
    return CWnd::OnMouseActivate(pDesktopWnd, nHitTest, msg);
    }//////////////////////////////////////////////////////////////////////////
    // Override navigation handler to pass to "app:" links to virtual handler.
    // Cancels the navigation in the browser, since app: is a pseudo-protocol.
    //
    void CHtmlCtrl::OnBeforeNavigate2( LPCTSTR lpszURL,
    DWORD nFlags,
    LPCTSTR lpszTargetFrameName,
    CByteArray& baPostedData,
    LPCTSTR lpszHeaders,
    BOOL* pbCancel )
    {
    const char APP_PROTOCOL[] = "app:";
    int len = _tcslen(APP_PROTOCOL);
    if (_tcsnicmp(lpszURL, APP_PROTOCOL, len)==0) {
    OnAppCmd(lpszURL + len);
    *pbCancel = TRUE;
    }
    }//////////////////
    // Called when the browser attempts to navigate to "app:foo"
    // with "foo" as lpszWhere. Override to handle app commands.
    //
    void CHtmlCtrl::OnAppCmd(LPCTSTR lpszWhere)
    {
    // default: do nothing
    }BOOL CHtmlCtrl::OnEraseBkgnd(CDC* pDC) 
    {
    return TRUE; 
    //return CHtmlView::OnEraseBkgnd(pDC);
    }