BCB 打印Panel代码
2016-02-25 15:57
162 查看
void PrintAsScreen( TCanvas *CanvasSource,TPrinter *Prntr, TRect RectSource,TRect RectTarget) {//所见即所得打印方式 Prntr->BeginDoc(); int OriginalMapMode = GetMapMode(Prntr->Handle);//当前影射模式 SetMapMode(Prntr->Handle,MM_ISOTROPIC);//设置图形影射模式 SIZE ss; ss.cx = Screen->Width; ss.cy = Screen->Height; SetWindowExtEx( Prntr->Handle, ss.cx, ss.cy, ss);//设置窗口 //获取打印机x方向每英寸象素点数 float xLogPixelsPerInch = GetDeviceCaps(Prntr->Handle,LOGPIXELSX); //获取y方向每英寸象素点数 float yLogPixelsPerInch = GetDeviceCaps(Prntr->Handle,LOGPIXELSY); ss.cx = xLogPixelsPerInch; ss.cy = yLogPixelsPerInch; SetViewportExtEx(//设置视口 Prntr->Handle, Screen->Width * xLogPixelsPerInch/Screen->PixelsPerInch, Screen->Height * yLogPixelsPerInch/Screen->PixelsPerInch, &ss); Prntr->Canvas->CopyRect( RectTarget, //Target Rect CanvasSource, //Source Canvas RectSource ); //Source Rect Prntr->EndDoc(); SetMapMode(Prntr->Handle,OriginalMapMode);//复原影射模式 } void __fastcall TfrmStatusReport::btnPrintClick(TObject *Sender) { //打印panel部分 TPrinter *prt=Printer(); HDC dc=GetWindowDC(Panel1->Handle); Graphics::TBitmap *bmp = new Graphics::TBitmap(); bmp->Width=Panel1->Width; bmp->Height=Panel1->Height; BitBlt(bmp->Canvas->Handle, 0, 0, Panel1->Width, Panel1->Height, dc, 0, 0, SRCCOPY); //不做以下处理打印为空白////////////////////////////////////////// TMemoryStream *pms=new TMemoryStream(); bmp->SaveToStream(pms); pms->Position=0; bmp->LoadFromStream(pms); delete pms; ////////////////////////////////////////////////////// TRect rect = TRect(0,0,Panel1->ClientWidth,Panel1->ClientHeight); PrintAsScreen(bmp->Canvas,prt,rect,rect); delete bmp; ReleaseDC(Panel1->Handle,dc); }
相关文章推荐
- GoogLeNet系列解读
- python根据nagios配置文件将监控的服务联系人等信息导出到excel表格
- MyEclipse 2016 CI 0发布
- Java多线程总结
- java 异常处理方式
- yii框架
- Python数据分析Python库介绍(1)
- asp.net 5 (mvc 6) 获取网站的物理路径
- C++设计模式之工厂模式
- 面试题六 C/C++面试秘笈 之约瑟夫问题的解答--程序员面试题
- C++的运算符重载
- ntp源码解读(一)
- 一步一步教你用 java 生成二维码
- java设计模式学习(-)
- VC调用VB DLL
- struts2+spring+hibernate集成框架的环境搭建
- java学习笔记-继承extends
- c++模板元编程
- 面试题五 C/C++面试秘笈 之链表的正向排序--程序员面试题
- 请问在VC++2010中如何连接用Access2010创建好的accdb数据库?