BOOL PrintBitmap(LPCTSTR filename)
{
CPrintDialog printDlg(FALSE);
// printDlg.GetDefaults();
if (printDlg.DoModal() == IDCANCEL)
return FALSE;
CDC dc;
if (!dc.Attach(printDlg.GetPrinterDC()))
{
AfxMessageBox(_T("未发现发打印设备"));
return FALSE;
}
dc.m_bPrinting = TRUE;
DOCINFO di;
// 初始化打印信息
::ZeroMemory(&di, sizeof(DOCINFO));
di.cbSize = sizeof(DOCINFO);
di.lpszDocName = filename;
BOOL bPrintingOK = dc.StartDoc(&di); // 开始打印
CPrintInfo Info;
Info.SetMaxPage(1); // 只打印一页
int maxw = dc.GetDeviceCaps(HORZRES);
int maxh = dc.GetDeviceCaps(VERTRES);
Info.m_rectDraw.SetRect(0, 0, maxw, maxh);
for (UINT page = Info.GetMinPage(); page <=Info.GetMaxPage() && bPrintingOK; page++)
{
dc.StartPage(); // 开始打印新的一页
Info.m_nCurPage = page;
CBitmap bitmap;
// 加载位图
if (!bitmap.Attach(::LoadImage(::GetModuleHandle(NULL), filename, IMAGE_BITMAP, 0, 0,LR_LOADFROMFILE | LR_CREATEDIBSECTION | LR_DEFAULTSIZE)))
{
AfxMessageBox(_T("位图加载失败!"));
return FALSE;
}
BITMAP bm;
bitmap.GetBitmap(&bm);
int w = bm.bmWidth;
int h = bm.bmHeight;
// 创建内存设备上下文
CDC memDC;
memDC.CreateCompatibleDC(&dc);
CBitmap *pBmp = memDC.SelectObject(&bitmap);
memDC.SetMapMode(dc.GetMapMode());
dc.SetStretchBltMode(HALFTONE);
// 拉伸打印
dc.StretchBlt(0, 0, maxw, maxh, &memDC, 0, 0, w, h, SRCCOPY);
// clean up
memDC.SelectObject(pBmp);
// end page
bPrintingOK = (dc.EndPage() > 0);
}
if (bPrintingOK)
dc.EndDoc(); // 打印完成
else
dc.AbortDoc(); // 终止打印
return TRUE;
}
void CPrintDemoDlg::OnBnClickedOk()
{
BOOL bRet = PrintBitmap(_T("1.bmp"));
if (bRet)
AfxMessageBox(_T("打印完成"));
}
本文为“老吴笔记”的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。