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);
}