【发布时间】:2016-04-22 15:51:54
【问题描述】:
我已按照 Microsoft 的有关创建设备上下文的教程进行操作,并尝试在 Internet 上寻找合适的来源(显然,MFC 是一个神秘的东西)。下面成功打印出“Hello, World!”;除了它非常小。
如何向打印机发送 CImage 而不是文本? 我怎样才能让文本的大小大于几毫米? 我已经搜索了 MSDN,但所有内容要么已经过时(例如我正在使用的示例代码),要么没有很好的文档记录。
// get the default printer
CPrintDialog dlg(FALSE);
dlg.GetDefaults();
// is a default printer set up?
HDC hdcPrinter = dlg.GetPrinterDC();
if (hdcPrinter == NULL)
{
//MessageBox(_T("Buy a printer!"));
}
else
{
// create a CDC and attach it to the default printer
CDC dcPrinter;
dcPrinter.Attach(hdcPrinter);
// call StartDoc() to begin printing
DOCINFO docinfo;
memset(&docinfo, 0, sizeof(docinfo));
docinfo.cbSize = sizeof(docinfo);
docinfo.lpszDocName = _T("CDC::StartDoc() Code Fragment");
// if it fails, complain and exit gracefully
if (dcPrinter.StartDoc(&docinfo) < 0)
{
//MessageBox(_T("Printer wouldn't initalize"));
}
else
{
// start a page
if (dcPrinter.StartPage() < 0)
{
//MessageBox(_T("Could not start page"));
dcPrinter.AbortDoc();
}
else
{
// actually do some printing
//CGdiObject* pOldFont = dcPrinter.SelectStockObject(SYSTEM_FONT);
dcPrinter.SetMapMode(MM_HIENGLISH);
auto font = CreateFont(
3'000, // nHeight
1'500, // nWidth
0, // nEscapement
0, // nOrientation
FW_NORMAL, // nWeight
FALSE, // bItalic
FALSE, // bUnderline
0, // cStrikeOut
ANSI_CHARSET, // nCharSet
OUT_DEFAULT_PRECIS, // nOutPrecision
CLIP_DEFAULT_PRECIS, // nClipPrecision
DEFAULT_QUALITY, // nQuality
DEFAULT_PITCH | FF_SWISS, // nPitchAndFamily
_T("Arial")); // lpszFacename
dcPrinter.SelectObject(&font);
dcPrinter.TextOut(450, 450, _T("Hello World!"), 12);
dcPrinter.EndPage();
dcPrinter.EndDoc();
//dcPrinter.SelectObject(pOldFont);
}
}
}
【问题讨论】:
-
这是常见的 win32 打印优先问题。如果您要花费超过几个小时来添加打印支持,我建议您花一个小时左右阅读 Petzold 中的相关章节。它牵着你的手,非常清楚地解释了它的一切;您稍后要做的就是将其映射到微不足道的 MFC 概念。您可以花几美元购买二手副本,或下载它。不过,我仍然建议您购买硬拷贝 - 这是为数不多的几本书之一,您经常会因为这些小细节而翻阅。
-
我周五早上订购了几本书,但我不反对再添加一本书!我用谷歌搜索了
Petzold MFC和this is what came up;这是“The Petzold”吗? -
不,实际上是这样的:charlespetzold.com/pw5。它不适用于 MFC,它是 win32,但您的问题本质上是关于 win32 概念的。 MFC 打印支持只是其上的一个薄 OO 层。这本书有一整章是关于打印的(确切地说是第 13 章):什么是打印设备上下文、什么是 DEVCAPS、打印对话框等。Adrian 解释了这个问题,这本书描述了将所有内容组合在一起的基础知识。