当前位置:C++技术网 > 资讯 > MFC打印学习之打印输出图像实例

MFC打印学习之打印输出图像实例

更新时间:2016-01-26 15:56:44浏览次数:1+次

随着多媒体技术的发展,图片处理设备也得到了广泛的应用,图片的浏览和打印已经成为用户的重要需求之一,下面,我们通过一个简单的实例介绍如何输出图像

在对话框头文件中:

CStatic	m_Image;
加载一个位图,ID号为IDB_BITMAP1

在实现文件中:

void CPrintImageDlg::OnButprint() 
{
	CRect m_rect;
	//获取图像的大小
	m_Image.GetClientRect(m_rect);
	CDC* pImageDC = m_Image.GetDC();					//获得控件画布
	int formx,formy;
	//获得屏幕分辨率
	formx =	pImageDC->GetDeviceCaps(LOGPIXELSX);
	formy = pImageDC->GetDeviceCaps(LOGPIXELSY);
	ReleaseDC(pImageDC);
	CPrintDialog m_printdlg(FALSE);		//构造打印对话框
	if (m_printdlg.DoModal() == IDOK)
	{
		CDC pdc;
		pdc.Attach(m_printdlg.GetPrinterDC());
		//获取打印机与屏幕的分辨率比率
		int printerx,printery;
		printerx = pdc.GetDeviceCaps(LOGPIXELSX);
		printery = pdc.GetDeviceCaps(LOGPIXELSY);
		double ratex,ratey;
		ratex = (double)printerx/formx;
		ratey = (double)printery/formy;
		CClientDC dc(this);
		CBitmap bmp;
		bmp.CreateCompatibleBitmap(&dc,m_rect.Width(),m_rect.Height());	//创建位图
		CDC imagedc;
		imagedc.CreateCompatibleDC(&dc);					//创建兼容的画布
		imagedc.SelectObject(&bmp);						//选入位图
		imagedc.BitBlt(0,0,m_rect.Width(),m_rect.Height(),&dc,0,0,SRCCOPY);	//绘制位图
		//打印图像
	 	pdc.StartDoc("ceshi");
		pdc.StretchBlt(0,0,(int)(m_rect.Width()*ratex),(int)(m_rect.Height()*
			ratey),&imagedc,0,0,m_rect.Width(),m_rect.Height(),SRCCOPY);

		pdc.EndDoc();
	}
}