Nu, trebuie sa fac eu orice este de facut ... doar de indrumari as avea nevoieOvidiu Cucu wrote:...daca n-as avea alta treaba de facut, in maxim doua luni ar fi gata.

Nu, trebuie sa fac eu orice este de facut ... doar de indrumari as avea nevoieOvidiu Cucu wrote:...daca n-as avea alta treaba de facut, in maxim doua luni ar fi gata.
Pentru mine, si atata ar fi arhi-suficient ...Chestia cu CPrintInfo n-ar fi o asa mare problema. I-am putea gasi noi un loc unde sa fie instantiat, apoi umplut cu ce trebuie si in cele din urma de "mimat" tot flow-ul pentru print (preview) la fel ca la alte view-uri din framework.
Code: Select all
CPrintDialog pdlg(FALSE);
pdlg.GetDefaults();
HDC hDC = pdlg.CreatePrinterDC();
if(NULL != hDC)
{
m_pPreviewInfo = new CPrintInfo;
m_dcPrint.CreateCompatibleDC(CDC::FromHandle(hDC));
m_pPreviewInfo->m_rectDraw.left = 0;
m_pPreviewInfo->m_rectDraw.top = 0;
m_pPreviewInfo->m_rectDraw.right = m_dcPrint.GetDeviceCaps(HORZRES);
m_pPreviewInfo->m_rectDraw.bottom = m_dcPrint.GetDeviceCaps(VERTRES);
m_pPreviewInfo->m_bContinuePrinting = TRUE;
m_pPreviewInfo->m_bDirect = TRUE;
m_pPreviewInfo->m_bDocObject = FALSE;
m_pPreviewInfo->m_bPreview = TRUE;
m_pPreviewInfo->m_lpUserData = NULL;
m_pPreviewInfo->m_pPD = &pdlg;
m_pPreviewInfo->SetMinPage(1);
m_pPreviewInfo->SetMaxPage(2); // just for testing purpose
m_nPages = m_pPreviewInfo->m_nNumPreviewPages;
Code: Select all
_AFXEXT_INLINE UINT CPrintInfo::GetMaxPage() const
{ return m_pPD->m_pd.nMaxPage; }
Code: Select all
IMPLEMENT_DYNCREATE(CPrintPreview, CScrollView)
CPrintPreview::CPrintPreview()
{
m_pOldFrame = NULL;
m_pPreviewInfo = NULL;
m_nPages = 0;
m_nCurrentPage = 0;
m_pPreviewDC = NULL;
m_pPageInfo = m_pageInfoArray;
m_nZoomState = ZOOM_OUT;
m_nMaxPages = 2;
m_pPrintDlg = new CPrintDialog(FALSE);
m_pPrintDlg->GetDefaults();
}
Code: Select all
CPrintPreview::~CPrintPreview()
{
m_dcPrint.Detach(); // print DC is deleted by CPrintInfo destructor
if(NULL != m_pPreviewInfo)
delete m_pPreviewInfo;
if(NULL != m_pPreviewDC)
delete m_pPreviewDC;
if(NULL != m_pPrintDlg)
delete m_pPrintDlg; // <-- crash
}
Code: Select all
if(p != NULL)
{
delete p;
}
Code: Select all
CTestExploreDoc::CTestExploreDoc()
{
// TODO: add one-time construction code here
m_pPrintDlg = new CPrintDialog(FALSE);
m_pPrintDlg->GetDefaults();
}
CTestExploreDoc::~CTestExploreDoc()
{
if(NULL != m_pPrintDlg)
delete m_pPrintDlg;
}
Code: Select all
m_pPreviewInfo->m_pPD = m_pPrintDlg;
Code: Select all
m_pPreviewInfo->m_pPD = m_pPrintDlg;
Code: Select all
CPrintPreview::CPrintPreview()
: m_pPreviewInfo(NULL),
m_pPreviewDC(NULL),
m_pPrintDlg(NULL),
// ...
{
// ...
}
{
Code: Select all
CPrintPreview::~CPrintPreview()
{
m_dcPrint.Detach(); // print DC is deleted by CPrintInfo destructor
// if(NULL != m_pPreviewInfo) // TO BE DELETED; frectie la picior de lemn
delete m_pPreviewInfo;
// if(NULL != m_pPreviewDC) // TO BE DELETED; frectie la picior de lemn
delete m_pPreviewDC;
//if(NULL != m_pPrintDlg) // TO BE DELETED; frectie la picior de lemn
// delete m_pPrintDlg; // TO BE DELETED; NU-i nevoie, e deja dezalocat.
}
Code: Select all
Detected memory leaks!
Dumping objects ->
{596} client block at 0x003F5410, subtype 0, 168 bytes long.
a CPrintDialog object at $003F5410, 168 bytes long
Object dump complete.