本帖最后由 cdner 于 2011-05-07 20:48:40 编辑

解决方案 »

  1.   

    http://topic.csdn.net/u/20100602/22/36e6c6b7-014d-4cc0-8ab9-5e08ab1398f7.html
      

  2.   

    不用那么麻烦 你创建一个CFrameWnd然后再它的OnCrete中创建一个View就行了
      

  3.   


     CPicViewEx  *pView=(CPicViewEx *)((CFrameWnd*)pFrameWnd)->CreateView(&cc);不一样吗?还有这段代码中的 CDlgViewView 和 CDlgViewDoc 都是怎么添加的?
    为了继承CView,加入子类CDlgViewView ,但是 CDlgViewDoc 应该怎么添加呢?思路应该是 在dialog 里重新创建一个框架,已经框架对应的 文档/视图 结构,然后生成 View 吧?其中的文档类和视图类是怎么添加到工程里的? 是直接添加类吗? 它们跟其他类之间有关联的话,怎么处理的?
      

  4.   


    上面说的“这段代码”是这篇文章上的http://blog.csdn.net/mythma/archive/2008/08/29/2848568.aspx
      

  5.   

    可以在对话框中加入VIEW了,在OnInitDialog()函数中写入以下代码: //在dialog中嵌入view, CPicViewEx继承自CScrollView
    CWnd* pPosWnd = GetDlgItem(IDC_PIC);
    CRect rect;
    pPosWnd->GetWindowRect(&rect);
    CRect rectView = rect;
    ScreenToClient(&rect);

    m_pFrame = new CFrameWnd(); //对话框内视图的父窗口
    m_pFrame->Create(NULL, NULL, WS_CHILD | WS_VISIBLE, rect, this);
    //m_pFrame->ScreenToClient(&rectView);
    ASSERT(m_pFrame); m_pView = (CPicViewEx*)RUNTIME_CLASS(CPicViewEx)->CreateObject();
    m_pView->Create(NULL, NULL,WS_CHILD | WS_VISIBLE, rect, m_pFrame, IDC_PIC, NULL);
            m_pView->OnInitialUpdate();
    但是在VIEW中画图的位置不对,上面空出来一大截。void CPicViewEx::OnDraw(CDC* pDC)
    {
    CDocument* pDoc = GetDocument();
    // TODO: 在此添加绘制代码
    CRect rc;
    GetWindowRect(&rc);
    Draw(pDC->m_hDC, rc);
    }
    //重载擦除背景,效果也是上面空出来一部分白色
    BOOL CPicViewEx::OnEraseBkgnd(CDC* pDC)
    {
    // TODO: 在此添加消息处理程序代码和/或调用默认值
    CRect rc;
    GetClientRect(&rc); CBrush m_BrushBackGround;
    COLORREF dlgbkColor = ::GetSysColor(COLOR_3DFACE);
    m_BrushBackGround.CreateSolidBrush(dlgbkColor);
    pDC->FillRect(&rc, &m_BrushBackGround);
    m_BrushBackGround.DeleteObject();
    return TRUE;
    //return CScrollView::OnEraseBkgnd(pDC);
    }
    而且图像放大后并没有滚动条出现。