工控编程吧
标题:
311上位机VC MFC实现整个程序界面的打印功能
[打印本页]
作者:
qq263946146
时间:
2016-9-23 21:30
标题:
311上位机VC MFC实现整个程序界面的打印功能
(, 下载次数: 0)
上传
点击文件名下载附件
整个程序界面的打印功能
功能展示
有时我们得打印整个程序的界面,如果界面上的按钮,编辑框内的数据都得打印出来,我们当前例程实现 这一功能,点击<打印整个界面>会弹出打印对话框,点击对话框内的确认,可以打印出整个例程的界面,包括我们在编辑框手动输入的内容;
要点提示
要实现程序界面的打印,首先得获得打印机的设备上下文CDC对象,再将程序界面存入位图结构中,最后调用打印机CDC对象的StretchBlt函数便可;
打印机CDC对象可以通过打印对话框的GetPrinterDC()获取;
将程序界面存入位图结构中,首先定义创建一与程序设备上下文兼容的CDC对象如果memDC,再创建 与程序设备上下文兼容的位图对象bitmap,将其载入memDC中,最后调用memDC的BitBlt将对话框绘制在位图中;
实现功能
1.新建基于对话框的应用程序
2.添加一些编辑框,文件等控件,作为测试用,再添加 一按钮<打印 整个界面>用于打印整个程序界面用,关联按钮的点击函数
void CGkbc8Dlg::OnButton1()
{
CClientDC dc(this);
CDC memDC;
CRect rect;
memDC.CreateCompatibleDC(&dc);
this->GetClientRect(rect);
CBitmap bitmap;
bitmap.CreateCompatibleBitmap(&dc,rect.Width(),rect.Height());
CBitmap * oldbitmap = memDC.SelectObject(&bitmap);
memDC.BitBlt(0,0,rect.Width(),rect.Height(),&dc,0,0,SRCCOPY);
CPrintDialog m_printdlg( FALSE);//获取打印机DC
if (m_printdlg.DoModal()==IDOK)
{
CDC dc1;
dc1.Attach(m_printdlg.GetPrinterDC());
int screenx,screeny;
int printx,printy;
double ratex,ratey;
//确定打印机与屏幕的像素比率
screenx = dc.GetDeviceCaps(LOGPIXELSX);
screeny = dc.GetDeviceCaps(LOGPIXELSY);
printx = dc1.GetDeviceCaps(LOGPIXELSX);
printy = dc1.GetDeviceCaps(LOGPIXELSY);
ratex = (double)(printx)/screenx;
ratey = (double)(printy)/screeny;
//开始打印
dc1.StartDoc("FirstDoc");
dc1.StretchBlt(0,0,(int)(rect.Width()*ratex),(int)(rect.Height()*ratey),&memDC,0,0,rect.Width(),rect.Height(),SRCCOPY);
dc1.EndDoc();
}
memDC.SelectObject(oldbitmap);
bitmap.Detach();
}
我们来演示下功能实现的整个过程
[iqiyi]http://player.video.qiyi.com/dfc19a8bec370faf8b2016edf0be03af/0/0/w_19rstbxuqt.swf-albumId=6359318409-tvId=6359318409-isPurchase=0-cnId=12[/iqiyi]
(, 下载次数: 0)
上传
点击文件名下载附件 [weixinlianxi]1[/weixinlianxi]
[note]1[/note]
欢迎光临 工控编程吧 (https://www.gkbc8.com/)
Powered by Discuz! X3.4