工控编程吧
标题:
312上位机VC MFC实现指定控件的打印功能
[打印本页]
作者:
qq263946146
时间:
2016-9-23 21:00
标题:
312上位机VC MFC实现指定控件的打印功能
(, 下载次数: 2)
上传
点击文件名下载附件
指定控件的打印功能
功能展示
程序界面会有很多控件,如图片控件,按钮控件等,有时我们想打印指定控件的界面,我们当前例程实现指定图片控件的打印功能,效果如图,点击<打印右侧图片控件>可以将图片打印出来;
要点提示
在微软的WINDOWS系统中,打印机的的输出与程序 的显示都是通过 设备上下文CDC实现 的,CDC类提供了StretchBlt,Bitblt两个函数用于图片的绘制,控件界面的打印是以图片的形式进行,在涉及图片打印时,一定要使用函数StretchBlt,因为此函数会根据源设置区域与目标设备区域大小的不同,自动调整绘图的比率。我们知道打印机的分辨率与屏幕的通常是不同,所以得用StretchBlt()函数来调整打印比率;
实现功能
1.新建基于对话框的应用程序
2.在对话框界面添加一控件用于打印, 我们当前例程添加一图片控件,ID改为IDC_IMAGECTRL,插入一图片IDB_BITMAP1,设置图片控件的属性;
3.添加一按钮<打印 左侧 图片控件>关联按钮的点击 函数
void CGkbc8Dlg::OnButton1()
{
CStatic *pImageCtrl = (CStatic *)GetDlgItem(IDC_IMAGECTRL);
CDC* imagedc = pImageCtrl->GetDC();//获取图像控件的DC
CRect rect;
pImageCtrl->GetClientRect(rect);//获取图像控件的大小
int formx,formy;
formx = imagedc->GetDeviceCaps(LOGPIXELSX);
formy = imagedc->GetDeviceCaps(LOGPIXELSY);
CPrintDialog printdlg (FALSE);
if (printdlg.DoModal()==IDOK)
{
CDC dc;
dc.Attach(printdlg.GetPrinterDC());
//获取打印机与屏幕的分辨率比率
int printerx,printery;
printerx = dc.GetDeviceCaps(LOGPIXELSX);
printery = dc.GetDeviceCaps(LOGPIXELSY);
double ratex,ratey;
ratex = (double)printerx/formx;
ratey = (double)printery/formy;
//打印图像
dc.StartDoc("print");
dc.StretchBlt(30,40,(int)(rect.Width()*ratex),(int)(rect.Height()*ratey),imagedc,0,0,rect.Width(),rect.Height(),SRCCOPY);
dc.EndDoc();
}
}
我们来演示下功能实现的整个过程
[iqiyi]http://player.video.qiyi.com/4ce966130adb6e589654a4cf7105480d/0/0/w_19rstby9qx.swf-albumId=6359286709-tvId=6359286709-isPurchase=0-cnId=12[/iqiyi]
(, 下载次数: 1)
上传
点击文件名下载附件 [weixinlianxi]1[/weixinlianxi]
[note]1[/note]
欢迎光临 工控编程吧 (https://www.gkbc8.com/)
Powered by Discuz! X3.4