Re: Help determine the numbers of pages with CPrintInfo
In your OnPreparePrinting(), you need to get a Device Context for your
printer:
CPrintInfo pi;
if (AfxGetApp()->GetPrinterDeviceDefaults(&pi.m_pPD->m_pd)) {
HDC hDC = pi.m_pPD->m_pd.hDC;
if (hDC == NULL)
hDC = pi.m_pPD->CreatePrinterDC();
if (hDC != NULL) {
CDC dc;
dc.Attach (hDC);
int nMaxPages = CalcNbrPages(&dc);
pInfo->SetMaxPage(nMaxPages);
::DeleteDC(dc.Detach());
}
}
---------
You can then get your page size using GetDevice caps:
// allow logical inch for each top and bottom margins
int nVertMargin = (pDC->GetDeviceCaps(LOGPIXELSY) * 3) / 4;
int nPgHt = pDC->GetDeviceCaps(VERTRES) - (2 * nVertMargin);
int nHorzMargin = (pDC->GetDeviceCaps(LOGPIXELSX) * 3) / 4;
int nPgWidth = pDC->GetDeviceCaps(HORZRES) - (2 * nHorzMargin);
--
---------------------------------------------------------------------
DataGet? & PocketLog? www.dataget.com
Data Collectors www.baxcode.com
--------------------------------------------------------------------
"anastasiA" <none@devnull.net> wrote in message
news:gtSdncCXvfeZr77YnZ2dnUVZ_tGdnZ2d@magma.ca...
Hello.
I've read the CPrintInfo API in my Visual C++ help file and I'm still
having this problem in determining the number of pages before printing a
document using CPrintInfo.
I override OnPrepareDC(), OnPreparePrinting() and OnBeginPrinting() but
the relevant CPrintInfo doesn't give information on the paper's size.
All four corners of the m_rectDraw member are set to -802150451. Only
after I overide OnPrint can I actually have a valid rectangle in this
function only (0,3075,0,2400). But, at this point, it's too late to
call SetMaxPage() and the print preview interface goes all quircky.
My hack is currently to try to (over)evaluate the number of pages and
set SetMaxPage() at OnPreparePrinting(), then I limit my printing to the
relevant pages (or else I print a bunch of blank pages) The output is
great but this is not a good solution for the long run.
What am I doing wrong ?
Any help appreciated.
a.