MF C: Как вы печатаете содержимое CRichEditView? - PullRequest
1 голос
/ 07 февраля 2020

У меня есть простая задача, где мне нужно распечатать содержимое CRichEditView. Нет необходимости масштабирования, нет диапазона печати, просто печатайте содержимое. Проще говоря, я попытался добавить это к карте сообщений:

ON_COMMAND(ID_FILE_PRINT, &CRichEditView::OnFilePrint)

И реализовать виртуальную функцию:

BOOL CMyRichView::OnPreparePrinting(CPrintInfo* pInfo)
{
  return DoPreparePrinting(pInfo);
}

Но когда она печаталась (это то, что на самом деле должно было быть напечатано ):

BOOL CMyRichView::OnPreparePrinting(CPrintInfo* pInfo)
{
  return DoPreparePrinting(pInfo);
}

Я получил только половину 'r' при возврате "eturn DoPreparePrinting (pInfo);". Так что, похоже, это связано с полями или с чем-то, что CRichEditView не справляется сам?

Что мне не хватает?

TIA !!

РЕДАКТИРОВАТЬ :

Я пытался изменить его на

BOOL CMyRichView::OnPreparePrinting(CPrintInfo* pInfo)
{
  // note a MM_TWIPS is 1/1440 of an inch.

  // create 1/2" margin which most printers support
  CSize sizepaper = GetPaperSize();
  CRect rectmargins(720, 720, sizepaper.cx - 720, sizepaper.cy - 720);

  // Need to set the margins when printing from CRichEditView
  SetMargins(rectmargins);

  // per SetMargins API reference, call wrapchanged 
  if (m_nWordWrap==WrapToTargetDevice) {
    WrapChanged();
  }

  return DoPreparePrinting(pInfo);
}

Но теперь он просто выплевывает тонны чистых кусочков бумаги. Я также попробовал это в виртуальной функции OnPrint(CDC* pDC, CPrintInfo* pInfo) до вызова базового класса. Тот же результат, поэтому удалил OnPrint() (не используя его).

РЕДАКТИРОВАТЬ:

Так что я взял этот пример выше из документации GetPaperSize(). Но это было неправильно. Это работает, используя это (которое использует документация для SetPaperSize()).

BOOL CMyRichView::OnPrint(CDC* pDC, CPrintInfo* pInfo)
{
  // note a MM_TWIPS is 1/1440 of an inch.

  // Need to set the margins when printing from CRichEditView
  SetMargins(CRect(720, 720, 720, 720));

  // per SetMargins API reference, call wrapchanged 
  if (m_nWordWrap==WrapToTargetDevice) {
    WrapChanged();
  }

  return __super::OnPrint(pDC, pInfo);
}

1 Ответ

0 голосов
/ 16 февраля 2020

Ответ:

ON_COMMAND(ID_FILE_PRINT, &CRichEditView::OnFilePrint)


BOOL CMyRichView::OnPreparePrinting(CPrintInfo* pInfo)
{
  return DoPreparePrinting(pInfo);
}

BOOL CMyRichView::OnPrint(CDC* pDC, CPrintInfo* pInfo)
{
  // note a MM_TWIPS is 1/1440 of an inch.

  // Need to set the margins when printing from CRichEditView
  SetMargins(CRect(720, 720, 720, 720));

  // per SetMargins API reference, call wrapchanged 
  if (m_nWordWrap==WrapToTargetDevice) {
    WrapChanged();
  }

  return __super::OnPrint(pDC, pInfo);
}
...