首页 > 解决方案 > MFC:如何打印 CRichEditView 的内容?

问题描述

我有一个简单的任务,我需要打印 CRichEditView 的内容。无需缩放,无需打印范围,只需打印内容。为简单起见,我尝试将其添加到消息映射中:

ON_COMMAND(ID_FILE_PRINT, &CRichEditView::OnFilePrint)

并实现虚函数:

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

但是当它打印时(这实际上是要打印的):

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

在返回“eturn DoPreparePrinting(pInfo);”时我只得到了一半的“r”。所以它似乎必须与边距或CRichEditView不处理自身的东西有关?

我错过了什么?

蒂亚!!

编辑:

我尝试将其更改为

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);
}

标签: printingmfcrichedit

解决方案


答案是:

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);
}

推荐阅读