2014-03-26 4 views
0

Visual Studio 2010 Professional Edition에서 만든 간단한 텍스트 편집기가 있습니다. 기본적으로 VS2010 마법사가 자동으로 생성 한 MFC MDI 프로그램을 수정했습니다. 문제는 내가 인쇄 할 때 viewrich.cpp 줄 294에 디버그 어설 션 오류가 발생한다는 것입니다. 인쇄 할 때 코드에서 아무 것도 수정하지 않았지만 Rich Edit를 사용한 방법에 문제가있을 수 있습니다. 이것은 내가 가진 모든 정보입니다. 미리 감사드립니다.인쇄시 어설 션 오류가 발생했습니다.

Viewrich.cpp

BOOL CRichEditView::PaginateTo(CDC* pDC, CPrintInfo* pInfo) 
// attempts pagination to pInfo->m_nCurPage, TRUE == success 
{ 
ASSERT_VALID(this); 
ASSERT_VALID(pDC); 

CRect rectSave = pInfo->m_rectDraw; 
UINT nPageSave = pInfo->m_nCurPage; 
ASSERT(nPageSave > 1); // LINE 294 
ASSERT(nPageSave >= (UINT)m_aPageStart.GetSize()); 
VERIFY(pDC->SaveDC() != 0); 
pDC->IntersectClipRect(0, 0, 0, 0); 
pInfo->m_nCurPage = (int)m_aPageStart.GetSize(); 
while (pInfo->m_nCurPage < nPageSave) 
{ 
    ASSERT(pInfo->m_nCurPage == (UINT)m_aPageStart.GetSize()); 
    OnPrepareDC(pDC, pInfo); 
    ASSERT(pInfo->m_bContinuePrinting); 
    pInfo->m_rectDraw.SetRect(0, 0, 
     pDC->GetDeviceCaps(HORZRES), pDC->GetDeviceCaps(VERTRES)); 
    pDC->DPtoLP(&pInfo->m_rectDraw); 
    OnPrint(pDC, pInfo); 
    if (pInfo->m_nCurPage == (UINT)m_aPageStart.GetSize()) 
     break; 
    ++pInfo->m_nCurPage; 
} 
BOOL bResult = pInfo->m_nCurPage == nPageSave; 
pDC->RestoreDC(-1); 
pInfo->m_nCurPage = nPageSave; 
pInfo->m_rectDraw = rectSave; 
ASSERT_VALID(this); 
return bResult; 
} 

EmergenceView.cpp는

IMPLEMENT_DYNCREATE(CEmergenceView, CRichEditView) 

BEGIN_MESSAGE_MAP(CEmergenceView, CRichEditView) 
// Standard printing commands 
ON_COMMAND(ID_FILE_PRINT, &CRichEditView::OnFilePrint) 
ON_COMMAND(ID_FILE_PRINT_DIRECT, &CRichEditView::OnFilePrint) 
ON_COMMAND(ID_FILE_PRINT_PREVIEW, &CEmergenceView::OnFilePrintPreview) 
ON_WM_CONTEXTMENU() 
ON_WM_RBUTTONUP() 
ON_COMMAND(ID_MUTATE_GROUP, &CEmergenceView::OnMutateGroup) 
ON_UPDATE_COMMAND_UI(ID_MUTATE_GROUP, &CEmergenceView::OnUpdateMutateGroup) 
ON_COMMAND(ID_MUTATE_RANDOMISE, &CEmergenceView::OnMutateRandomise) 
ON_UPDATE_COMMAND_UI(ID_MUTATE_RANDOMISE, &CEmergenceView::OnUpdateMutateRandomise) 
ON_COMMAND(ID_HELP_STATISTICS, &CEmergenceView::OnHelpStatistics) 
ON_UPDATE_COMMAND_UI(ID_HELP_STATISTICS, &CEmergenceView::OnUpdateHelpStatistics) 
ON_COMMAND(ID_MUTATE_POETRIZE, &CEmergenceView::OnMutatePoetrize) 
ON_COMMAND(ID_EDIT_SELECTALL, &CEmergenceView::OnEditSelectall) 
END_MESSAGE_MAP() 

// CEmergenceView construction/destruction 

CEmergenceView::CEmergenceView() 
{ 
// TODO: add construction code here 

} 

CEmergenceView::~CEmergenceView() 
{ 
} 

BOOL CEmergenceView::PreCreateWindow(CREATESTRUCT& cs) 
{ 
// TODO: Modify the Window class or styles here by modifying 
// the CREATESTRUCT cs 

return CRichEditView::PreCreateWindow(cs); 
} 

// CEmergenceView drawing 

void CEmergenceView::OnDraw(CDC* /*pDC*/) 
{ 
CEmergenceDoc* pDoc = GetDocument(); 
ASSERT_VALID(pDoc); 
if (!pDoc) 
    return; 

// TODO: add draw code for native data here 
} 


// CEmergenceView printing 


void CEmergenceView::OnFilePrintPreview() 
{ 
    #ifndef SHARED_HANDLERS 
AFXPrintPreview(this); 
    #endif 
} 

BOOL CEmergenceView::OnPreparePrinting(CPrintInfo* pInfo) 
{ 
// default preparation 
return DoPreparePrinting(pInfo); 
} 

void CEmergenceView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/) 
{ 
// TODO: add extra initialization before printing 
} 

void CEmergenceView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/) 
{ 
// TODO: add cleanup after printing 
} 
+0

어설 션 된 MFC 코드와 함께 인쇄를 시작하는 코드를 게시 할 수 있습니까? – user1793036

+0

추가 사항. 고마워. – user3396028

+0

'OnPreparePrinting' (http://msdn.microsoft.com/en-us/library/a59dff1e.aspx)에 대한 문서를 보면'pInfo-> SetMaxPage()'를 호출해야합니다. – user1793036

답변

0

어설 모두를 말한다 :

UINT nPageSave = pInfo->m_nCurPage; 
ASSERT(nPageSave > 1); 

이 현재 페이지가/PAGINATE를 인쇄 할 수있는 값입니다. CPrintInfo의 생성자에서 1로 설정됩니다. 그러나 무언가가 그것을 바꿔서 0 또는 부정으로 만들었습니다. 일반적으로이 값은 RTF 인쇄물에 의해 완전히 제어됩니다. 그래서 당신은 그것을 조작하는 것을해야만합니다.

CPrintInfo에서 최소 페이지 및 최대 페이지 값 (SetMinPage 및 SetMaxPage)을 설정해야합니다.

+0

최소 페이지와 최대 페이지를 모두 설정했지만 여전히 같은 오류가 발생합니다 ... – user3396028