15,980
社区成员
发帖
与我相关
我的任务
分享
void CAllPrintView::OnEndPrintPreview(CDC* pDC, CPrintInfo* pInfo, POINT point, CPreviewView* pView)
{
CView::OnEndPrintPreview(pDC, pInfo, point, pView);
// 显示原始框架
m_pOldFrame->ShowWindow(SW_SHOW);
// 保存主框架指针
AfxGetApp()->m_pMainWnd = m_pOldFrame;
m_pDlg->m_bPrintPreview = FALSE;
CFrameWnd *pFrameWnd = GetParentFrame();
GetParentFrame()->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);
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);
}
}
// 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);
}
}
下面想想解决办法吧。
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);
}
}
void CPrintView::OnEndPrintPreview(CDC* pDC, CPrintInfo* pInfo, POINT point, CPreviewView* pView)
{
CView::OnEndPrintPreview(pDC, pInfo, point, pView);
if(m_bPrint)
GetParent()->DestroyWindow();
//GetParent()->DestroyWindow();
}