打印小问题 请帮助
duxin 2011-01-13 11:14:39 函数本意是将一个已经画好的 CDC* SDC 进行打印,因VC经验欠缺 调试许久未成功,希望得到各位帮住。
////////////////////////////////////////////////////////////////////////
CDC* pDC;
CPrintDialog dlg(FALSE);
if (dlg.DoModal() == IDOK)
{
HDC hDC = dlg.GetPrinterDC();
if (hDC == NULL)
{
return;
}
pDC = CDC::FromHandle(hDC);
if (pDC == NULL)
{
return;
}
}
CDC memDC;
CRect rectClient;
GetClientRect(rectClient) ;
CBitmap* oldBitmap,memBitmap;
memDC.CreateCompatibleDC(SDC) ;//->SDC 是已经画好的一个CDC 波形 跟踪发现memDC为空
memBitmap.CreateCompatibleBitmap(SDC, rectClient.Width(), rectClient.Height()) ;
pDC->SetMapMode( MM_ANISOTROPIC );
CSize size = CSize( 6000, 5000 );
pDC->SetWindowExt( size );
int xLogPixPerInch = pDC->GetDeviceCaps( LOGPIXELSX );
int yLogPixPerInch = pDC->GetDeviceCaps( LOGPIXELSY );
long xExt = ( long )size.cx * xLogPixPerInch / 96;
long yExt = ( long )size.cy * yLogPixPerInch / 96;
pDC->SetViewportExt( ( int )xExt,( int )yExt);
memDC.DPtoLP(rectClient);
oldBitmap = (CBitmap *)memDC.SelectObject(&memBitmap) ;
if (memDC.GetSafeHdc() != NULL)
{
pDC->BitBlt(0, 0, rectClient.Width(), rectClient.Height(),
&memDC, 0, 0, SRCCOPY) ;
}
memDC.SelectObject(oldBitmap) ;
memBitmap.DeleteObject();
memDC.DeleteDC();