BCB 打印Panel代码
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); }