Print preview problem..
Hello!
I'm trying to write application with print preview. It's dialog based
aplication, but it's using my CViewPrintPreview class based on CView class.
I don't know why, but my print preview doesn't work. Aplication crash, when
i create my view. Here's code:
#if
!defined(AFX_VIEWPRINTPREVIEW_H__137FC880_1607_11D3_9317_8F51A5F9742F__INCLUDED_)
#define
AFX_VIEWPRINTPREVIEW_H__137FC880_1607_11D3_9317_8F51A5F9742F__INCLUDED_
#if _MSC_VER >= 1000
#pragma once
#endif // _MSC_VER >= 1000
// ViewPrintPreview.h : header file
//
#include "afxpriv.h"
/////////////////////////////////////////////////////////////////////////////
// CViewPrintPreview view
class CViewPrintPreview : public CView
{
protected:
CViewPrintPreview(); // protected constructor used by dynamic
creation
DECLARE_DYNCREATE(CViewPrintPreview)
// Attributes
public:
CPrint *m_pCtrl;
CFrameWnd *m_pOldFrame;
// Operations
public:
virtual void OnFilePrintPreview();
// Overrides
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CViewPrintPreview)
protected:
virtual void OnDraw(CDC* pDC); // overridden to draw this view
virtual void OnBeginPrinting(CDC* pDC, CPrintInfo* pInfo);
virtual void OnPrint(CDC* pDC, CPrintInfo* pInfo);
virtual void OnEndPrinting(CDC* pDC, CPrintInfo* pInfo);
virtual BOOL OnPreparePrinting(CPrintInfo* pInfo);
virtual void OnEndPrintPreview(CDC* pDC, CPrintInfo* pInfo, POINT point,
CPreviewView* pView);
//}}AFX_VIRTUAL
// Implementation
protected:
virtual ~CViewPrintPreview();
#ifdef _DEBUG
virtual void AssertValid() const;
virtual void Dump(CDumpContext& dc) const;
#endif
// Generated message map functions
protected:
//{{AFX_MSG(CViewPrintPreview)
//}}AFX_MSG
afx_msg void OnPreviewPrint();
afx_msg void OnPreviewClose();
DECLARE_MESSAGE_MAP()
};
/////////////////////////////////////////////////////////////////////////////
//{{AFX_INSERT_LOCATION}}
// Microsoft Developer Studio will insert additional declarations
immediately before the previous line.
#endif //
!defined(AFX_VIEWPRINTPREVIEW_H__137FC880_1607_11D3_9317_8F51A5F9742F__INCLUDED_)
// ViewPrintPreview.cpp : implementation file
//
#include "stdafx.h"
#include "ViewPrintPreview.h"
#include "afxpriv.h"
#include "./afxprint.rc"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CViewPrintPreview
IMPLEMENT_DYNCREATE(CViewPrintPreview, CView)
CViewPrintPreview::CViewPrintPreview()
{
m_pOldFrame=NULL;
}
CViewPrintPreview::~CViewPrintPreview()
{
}
BEGIN_MESSAGE_MAP(CViewPrintPreview, CView)
//{{AFX_MSG_MAP(CViewPrintPreview)
ON_COMMAND(ID_FILE_PRINT_PREVIEW, OnFilePrintPreview)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CViewPrintPreview drawing
void CViewPrintPreview:: OnPreviewClose()
{
MessageBox("Closing?!");
// CPreviewView:: OnPreviewClose();
}
void CViewPrintPreview::OnPreviewPrint()
{
MessageBox("Printing?!");
// CPreviewView::OnPreviewPrint();
}
void CViewPrintPreview::OnDraw(CDC* pDC)
{
CDocument* pDoc = GetDocument();
// TODO: add draw code here
}
/////////////////////////////////////////////////////////////////////////////
// CViewPrintPreview diagnostics
#ifdef _DEBUG
void CViewPrintPreview::AssertValid() const
{
CView::AssertValid();
}
void CViewPrintPreview::Dump(CDumpContext& dc) const
{
CView::Dump(dc);
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CViewPrintPreview message handlers
void CViewPrintPreview::OnFilePrintPreview()
{
CPrintPreviewState* pState = new CPrintPreviewState;
if (!DoPrintPreview(AFX_IDD_PREVIEW_TOOLBAR, this,
RUNTIME_CLASS(CViewPrintPreview), pState))
{
// In derived classes, reverse special window handling here for
// Preview failure case.
TRACE0("Error: DoPrintPreview failed.\n");
AfxMessageBox(AFX_IDP_COMMAND_FAILURE);
delete pState; // Preview failed to initialize, delete State now.
}
}
BOOL CViewPrintPreview::OnPreparePrinting(CPrintInfo* pInfo)
{
return DoPreparePrinting(pInfo);
}
void CViewPrintPreview::OnBeginPrinting(CDC* pDC, CPrintInfo* pInfo)
{
m_pCtrl->OnBeginPrinting(pDC, pInfo);
}
void CViewPrintPreview::OnPrint(CDC* pDC, CPrintInfo* pInfo)
{
m_pCtrl->OnPrint(pDC, pInfo);
}
void CViewPrintPreview::OnEndPrinting(CDC* pDC, CPrintInfo* pInfo)
{
m_pCtrl->OnEndPrinting(pDC, pInfo);
}
void CViewPrintPreview::OnEndPrintPreview(CDC* pDC, CPrintInfo* pInfo, POINT
point, CPreviewView* pView)
{
CView::OnEndPrintPreview(pDC, pInfo, point, pView);
// Show the original frame
m_pOldFrame->ShowWindow(SW_SHOW);
m_pOldFrame->GetParent()->ShowWindow(SW_SHOW);
m_pCtrl->m_bPrintPreview=FALSE;
GetParent()->DestroyWindow();
}
If my OnFilePrintPreview() looks like that:
CView::OnFilePrintPreview();
print preview working, but crash when i click Print button. How can i fix it
and use my own print function?