vc连接打印机,打印图片

来源:互联网 发布:清华土木工程知乎 编辑:程序博客网 时间:2024/06/11 01:30
//  打印按钮
void CDlgPrintDlg::OnPrint() 
{
int err = -1;
CPrintDialog dlg(FALSE);

if (!dlg.GetDefaults())
AfxMessageBox(_T("You have no default printer!"));
else
{
// attach to the DC we were given
CDC dc;
dc.Attach(dlg.m_pd.hDC);

// for StartDoc
DOCINFO di;
ZeroMemory(&di, sizeof(di));
di.cbSize = sizeof(di);
di.fwType = 0;
di.lpszDatatype = NULL;
di.lpszDocName = "Printing";
err = StartDoc( dc, &di);
if(err <= 0)
return;
err = StartPage( dc);
if(err <= 0)
return;
dc.SetMapMode(MM_HIENGLISH);
CRect rectPrint(0, 0,
dc.GetDeviceCaps(HORZRES),//返回设备的.以毫米为单位的物理显示宽度 
dc.GetDeviceCaps(VERTRES));//返回设备的.以毫米为单位的物理显示高度
dc.DPtoLP(&rectPrint);//设备物理单位转化为逻辑单位
dc.SetWindowOrg(-2150, -rectPrint.bottom);//设置原点




// Load picture


HBITMAP hBitmap=(HBITMAP)LoadImage(NULL, "D:\\good.bmp", IMAGE_BITMAP, 0,0,LR_LOADFROMFILE | LR_CREATEDIBSECTION | LR_DEFAULTSIZE);
if(hBitmap == NULL)
{
err = GetLastError();
}
CBitmap bitmap;     
bitmap.Attach(hBitmap); //关联位图对象 
CDC dcimage; 
err = dcimage.CreateCompatibleDC(&dc); //内存DC
if(err == 0)
return;
// dc.CreateCompatibleDC(&dcimage);
BITMAP bmp; 
err = bitmap.GetBitmap(&bmp); //获取位图信息 
if(err == 0)
return;
dcimage.SelectObject(&bitmap); //选取位图对象 
// err = dc.BitBlt(0,0,bmp.bmWidth,bmp.bmHeight,&dcimage,0,0,SRCCOPY); //显示 
err = dc.StretchBlt(/*dc.m_hDC,*/ 100, 1000,4096,4096*1.5, &dcimage, 0, 0, bmp.bmWidth, bmp.bmHeight, SRCCOPY);
if(err == 0)
{
err = GetLastError();
return;
}
//end load picture

// dc.TextOut(500,500, "Printer:张世龙");

dc.EndPage(); //通知打印机驱动程序页结束
dc.EndDoc();//通知打印机驱动程序打印完毕
DeleteDC(dc.Detach()); 
}


}
原创粉丝点击