We help IT Professionals succeed at work.

Printing multiple pages

mwebster
mwebster asked
on
225 Views
Last Modified: 2011-08-18
I'm using Visual C++ and i need to know how to make my program start the next page and continue when i need it to do so e.g i only want x ammount of stuff printed on each page.
thanx in aDvance.

void CMyView::OnBeginPrinting(CDC* pDC, CPrintInfo* pInfo)
{
      CMyDoc * pDoc = GetDocument();
      pInfo->SetMaxPage(3);
}

void CMyView::OnPrint(CDC* pDC, CPrintInfo* pInfo)
{
      CFont font;
      
      pDC->SetMapMode(MM_TWIPS);
      CMyDoc* pDoc = GetDocument();
      ///print text using 10 font
      font.CreateFont(-240,0,0,0,700,FALSE,FALSE,0,
                        ANSI_CHARSET,OUT_DEFAULT_PRECIS,
                CLIP_DEFAULT_PRECIS,                        DEFAULT_QUALITY,DEFAULT_PITCH                      FF_ROMAN,"Times New Roman");

      CFont* pOldFont = (CFont*)pDC->SelectObject(&font);
for(int i=0;i<10;i++)
{
 ////print my stuff
  if(i == 3)
  end the page and start a next page
  here is where i get the problem
  and need help thanx
}
      pDC->SelectObject(pOldFont);
      TRACE("LOGPIXELSX = %d,LOGPIXELSY = %d\n",
            pDC->GetDeviceCaps(LOGPIXELSX),
            pDC->GetDeviceCaps(LOGPIXELSY));
      TRACE("HORZSIZE = %d,VERTSIZE = %d\n",
            pDC->GetDeviceCaps(HORZSIZE),
            pDC->GetDeviceCaps(VERTSIZE));
      
      CRecordView::OnPrint(pDC, pInfo);
}
Comment
Watch Question

Author

Commented:
Edited text of question
Commented:
Unlock this solution and get a sample of our free trial.
(No credit card required)
UNLOCK SOLUTION

Author

Commented:
is there a way to dynamically set the number of pages my program is not printing what is on screen but rather what's on file from my database so some data will be greater than some and i don't want to set an arbitary ammount of pages in the OnPrepareDC function
thanx again

Author

Commented:
this data is being read in a while loop so when the max number of lines i want to start the next page and continue from there
Thanx aGain

Commented:
Hi mwebster,

  Can you try this:

1. Set the max page number to be a reasonably large value.
2. In your OnPrint() method, keep track of number of lines that has been printed on the current page. e.g.

OnPrint() {
while(1) {
//print m lines here
numberOfLinesPrinted += m;
if(numberOfLinesPrinted > maxNumberOfLinesPerPage)
  break;
}
}
 
let me know if there is any further problem. Thanks.

sunj

Author

Commented:
i thought about that but here's the problem
void MyView::OnPrint()
{
while(!m_pSet->IsEOF())
{
 print my stuff
 if(maxlines)
  {
   i want to end the page here
   and start new page
  }
 m_pSet->MoveNext();
}

}
the loop restarts and prints the same thing on the next page
tHanx aGain
Unlock the solution to this question.
Thanks for using Experts Exchange.

Please provide your email to receive a sample view!

*This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

OR

Please enter a first name

Please enter a last name

8+ characters (letters, numbers, and a symbol)

By clicking, you agree to the Terms of Use and Privacy Policy.