本帖最后由 little_sand 于 2012-06-29 10:47:26 编辑

解决方案 »

  1.   

    遇到一样的问题,也是刚接手一个工程,从VC6.0 升级到了VS2010。然后也遇到这个问题。解决了的话LZ  发消息通知一声噻。
      

  2.   

    找到问题了,加一个判断就好了,不过缺陷是预览窗口点了‘打印’不会关闭预览窗口···而且在预览‘打印’还是不激活事件···唉···今天就到这了···你能在预览打印了叫我···void CPrintView::OnEndPrintPreview(CDC* pDC, CPrintInfo* pInfo, POINT point, CPreviewView* pView) 
    { CView::OnEndPrintPreview(pDC, pInfo, point, pView);
    if(m_bPrint)
    GetParent()->DestroyWindow();
    //GetParent()->DestroyWindow();
    }
      

  3.   

    VC6.0的很多错误都没提示,到了VS2010就严格多了GetParent()->DestroyWindow(); 执行了这句话,再到上面的void CPreviewView::OnPreviewPrint()
    {
        // cause print (can be overridden by catching the command)
        CFrameWnd *pOrigFrame = m_pOrigView->EnsureParentFrame();    OnPreviewClose();
        CWinThread *pThread = AfxGetThread();
        ASSERT( pThread );
        CWnd *pMainWnd = pThread->m_pMainWnd;
        ASSERT_VALID(pMainWnd);
        //下面的 pOrigFrame  值就变了,毕竟销毁了嘛
        COleIPFrameWnd *pInPlaceFrame = DYNAMIC_DOWNCAST(COleIPFrameWnd, pOrigFrame);
        if (pInPlaceFrame)
        {
            pInPlaceFrame->SendMessage(WM_COMMAND, ID_FILE_PRINT);
        }
        else
        {
            // ensure we print the correct frame
            pOrigFrame->SendMessage(WM_COMMAND, ID_FILE_PRINT);
        }
    }
      

  4.   

    原因找到了:VC6.0与VS2010中的函数不同了。// VC6.0中的代码
    void CPreviewView::OnPreviewPrint()
    {
    OnPreviewClose();               // force close of Preview // cause print (can be overridden by catching the command)
    CWnd* pMainWnd = AfxGetThread()->m_pMainWnd;
    ASSERT_VALID(pMainWnd);
    pMainWnd->SendMessage(WM_COMMAND, ID_FILE_PRINT);
    }// VS2010中的代码
    void CPreviewView::OnPreviewPrint()
    {
    // cause print (can be overridden by catching the command)
    CFrameWnd *pOrigFrame = m_pOrigView->EnsureParentFrame(); OnPreviewClose();
    CWinThread *pThread = AfxGetThread();
    ASSERT( pThread );
    CWnd *pMainWnd = pThread->m_pMainWnd;
    ASSERT_VALID(pMainWnd); COleIPFrameWnd *pInPlaceFrame = DYNAMIC_DOWNCAST(COleIPFrameWnd, pOrigFrame);
    if (pInPlaceFrame)
    {
    pInPlaceFrame->SendMessage(WM_COMMAND, ID_FILE_PRINT);
    }
    else
    {
    // ensure we print the correct frame
    pOrigFrame->SendMessage(WM_COMMAND, ID_FILE_PRINT);
    }
    }
    下面想想解决办法吧。