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,
&
amp;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);
}
转载于:https://www.cnblogs.com/luyuxibaby/p/5217305.html
相关资源:在Android中动态添加Panel框架的实现代码