MFC打印和打印机设备的关系有关问题
MFC打印和打印机设备的关系问题
正在作打印机的处理,但是发现有如下问题需请教:
在View的OnPrepareDC中设置映射模式如下:
pDC->SetMapMode(MM_ANISOTROPIC);
//一个逻辑单位里有(1/2540)*96个像素
m_xViewExt = pDC->GetDeviceCaps(LOGPIXELSX);
m_yViewExt = pDC->GetDeviceCaps(LOGPIXELSY);
//设置逻辑单位大小
m_Ext = 96;
m_Ext = int(96.0 / m_fRate);
pDC->SetWindowExt(m_Ext, -(m_Ext));
我的文档大小是设置的A4那么大的。在文档的最右边缘处画直线,然后打印。我的PC是1280×1024分辨率,96dpi
1. 打印到300dpi的Microsoft Office Document Image Writer上效果正确,直线正好在最右边(300dpi打印之后,打印预览的效果是正确的)
2. 打印到600dpi的Snagit8上效果不对,直线看不到了,应该是打出去了(600dpi打印之后,打印预览的效果又不正确)
3. 打印到1200dpi的打印机上效果也不对,直线看不到。
在1024×768分辨率,96dpi的PC上打印预览的效果始终是正确的,只是打印到不同dpi的设备时效果不同。
打印我不太熟悉,请问和打印机dpi,分辨率有怎样的关系?应该如何设置?谢谢。
------解决方案--------------------
GetDeviceCaps(LOGPIXELSX);获取的是X/Y方向分辨率(DPI)你后面没用到;m_fRate哪来的?
------解决方案--------------------
用Adobe虚拟打印机试验了一下 没有出来效果
我使用下面的代码 不管是把Adobe虚拟打印机设置成什么分辨率都是一样的 没有区别 可能虚拟打印机个真实打印机有区别吧
正在作打印机的处理,但是发现有如下问题需请教:
在View的OnPrepareDC中设置映射模式如下:
pDC->SetMapMode(MM_ANISOTROPIC);
//一个逻辑单位里有(1/2540)*96个像素
m_xViewExt = pDC->GetDeviceCaps(LOGPIXELSX);
m_yViewExt = pDC->GetDeviceCaps(LOGPIXELSY);
//设置逻辑单位大小
m_Ext = 96;
m_Ext = int(96.0 / m_fRate);
pDC->SetWindowExt(m_Ext, -(m_Ext));
我的文档大小是设置的A4那么大的。在文档的最右边缘处画直线,然后打印。我的PC是1280×1024分辨率,96dpi
1. 打印到300dpi的Microsoft Office Document Image Writer上效果正确,直线正好在最右边(300dpi打印之后,打印预览的效果是正确的)
2. 打印到600dpi的Snagit8上效果不对,直线看不到了,应该是打出去了(600dpi打印之后,打印预览的效果又不正确)
3. 打印到1200dpi的打印机上效果也不对,直线看不到。
在1024×768分辨率,96dpi的PC上打印预览的效果始终是正确的,只是打印到不同dpi的设备时效果不同。
打印我不太熟悉,请问和打印机dpi,分辨率有怎样的关系?应该如何设置?谢谢。
------解决方案--------------------
GetDeviceCaps(LOGPIXELSX);获取的是X/Y方向分辨率(DPI)你后面没用到;m_fRate哪来的?
------解决方案--------------------
用Adobe虚拟打印机试验了一下 没有出来效果
我使用下面的代码 不管是把Adobe虚拟打印机设置成什么分辨率都是一样的 没有区别 可能虚拟打印机个真实打印机有区别吧
- C/C++ code
void C***View::OnPrepareDC(CDC* pDC, CPrintInfo* pInfo) { CView::OnPrepareDC(pDC, pInfo); if( pDC->IsPrinting() ) { 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); } }